mcdev 9.0.3 → 10.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 (1049) hide show
  1. package/@types/lib/Builder.d.ts +13 -14
  2. package/@types/lib/Builder.d.ts.map +1 -1
  3. package/@types/lib/Deployer.d.ts +16 -17
  4. package/@types/lib/Deployer.d.ts.map +1 -1
  5. package/@types/lib/MetadataTypeDefinitions.d.ts +4 -0
  6. package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
  7. package/@types/lib/MetadataTypeInfo.d.ts +4 -0
  8. package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
  9. package/@types/lib/Retriever.d.ts +16 -21
  10. package/@types/lib/Retriever.d.ts.map +1 -1
  11. package/@types/lib/cli.d.ts.map +1 -1
  12. package/@types/lib/index.d.ts +64 -36
  13. package/@types/lib/index.d.ts.map +1 -1
  14. package/@types/lib/metadataTypes/Asset.d.ts +159 -84
  15. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  16. package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/Automation.d.ts +2 -12
  18. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/Campaign.d.ts +1 -0
  20. package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
  21. package/@types/lib/metadataTypes/DataExtension.d.ts +2 -24
  22. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  23. package/@types/lib/metadataTypes/DataExtensionField.d.ts +1 -1
  24. package/@types/lib/metadataTypes/DataExtract.d.ts +1 -10
  25. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
  26. package/@types/lib/metadataTypes/DataFilter.d.ts +6 -19
  27. package/@types/lib/metadataTypes/DataFilter.d.ts.map +1 -1
  28. package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
  29. package/@types/lib/metadataTypes/DomainVerification.d.ts +1 -0
  30. package/@types/lib/metadataTypes/DomainVerification.d.ts.map +1 -1
  31. package/@types/lib/metadataTypes/Email.d.ts +0 -2
  32. package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
  33. package/@types/lib/metadataTypes/Event.d.ts +6 -16
  34. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  35. package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
  36. package/@types/lib/metadataTypes/FileTransfer.d.ts +1 -10
  37. package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
  38. package/@types/lib/metadataTypes/Folder.d.ts +4 -4
  39. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
  40. package/@types/lib/metadataTypes/ImportFile.d.ts +2 -12
  41. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
  42. package/@types/lib/metadataTypes/Journey.d.ts +4 -4
  43. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  44. package/@types/lib/metadataTypes/List.d.ts +1 -1
  45. package/@types/lib/metadataTypes/MetadataType.d.ts +23 -36
  46. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  47. package/@types/lib/metadataTypes/MobileApplication.d.ts +189 -0
  48. package/@types/lib/metadataTypes/MobileApplication.d.ts.map +1 -0
  49. package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
  50. package/@types/lib/metadataTypes/MobileKeyword.d.ts +1 -11
  51. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
  52. package/@types/lib/metadataTypes/MobileMessage.d.ts +23 -1
  53. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
  54. package/@types/lib/metadataTypes/MobilePush.d.ts +407 -0
  55. package/@types/lib/metadataTypes/MobilePush.d.ts.map +1 -0
  56. package/@types/lib/metadataTypes/MobilePushApp.d.ts +189 -0
  57. package/@types/lib/metadataTypes/MobilePushApp.d.ts.map +1 -0
  58. package/@types/lib/metadataTypes/Query.d.ts +1 -13
  59. package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
  60. package/@types/lib/metadataTypes/Script.d.ts +1 -13
  61. package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
  62. package/@types/lib/metadataTypes/SenderProfile.d.ts +7 -2
  63. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
  64. package/@types/lib/metadataTypes/User.d.ts.map +1 -1
  65. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +51 -41
  66. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
  67. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
  68. package/@types/lib/metadataTypes/definitions/DomainVerification.definition.d.ts +1 -0
  69. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +1 -0
  70. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +2 -0
  71. package/@types/lib/metadataTypes/definitions/MobileApplication.definition.d.ts +122 -0
  72. package/@types/lib/metadataTypes/definitions/MobileApplication.definition.d.ts.map +1 -0
  73. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +6 -0
  74. package/@types/lib/metadataTypes/definitions/MobilePush.definition.d.ts +467 -0
  75. package/@types/lib/metadataTypes/definitions/MobilePush.definition.d.ts.map +1 -0
  76. package/@types/lib/metadataTypes/definitions/MobilePushApp.definition.d.ts +122 -0
  77. package/@types/lib/metadataTypes/definitions/MobilePushApp.definition.d.ts.map +1 -0
  78. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +1 -0
  79. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
  80. package/@types/lib/util/auth.d.ts +30 -23
  81. package/@types/lib/util/auth.d.ts.map +1 -1
  82. package/@types/lib/util/cache.d.ts.map +1 -1
  83. package/@types/lib/util/cli.d.ts.map +1 -1
  84. package/@types/lib/util/config.d.ts.map +1 -1
  85. package/@types/lib/util/devops.d.ts +9 -0
  86. package/@types/lib/util/devops.d.ts.map +1 -1
  87. package/@types/lib/util/file.d.ts +32 -18
  88. package/@types/lib/util/file.d.ts.map +1 -1
  89. package/@types/lib/util/git.d.ts +155 -0
  90. package/@types/lib/util/git.d.ts.map +1 -0
  91. package/@types/lib/util/init.config.d.ts +30 -14
  92. package/@types/lib/util/init.config.d.ts.map +1 -1
  93. package/@types/lib/util/init.d.ts.map +1 -1
  94. package/@types/lib/util/init.git.d.ts +10 -0
  95. package/@types/lib/util/init.git.d.ts.map +1 -1
  96. package/@types/lib/util/init.npm.d.ts +9 -14
  97. package/@types/lib/util/init.npm.d.ts.map +1 -1
  98. package/@types/lib/util/isDeepEqual.d.ts +9 -0
  99. package/@types/lib/util/isDeepEqual.d.ts.map +1 -0
  100. package/@types/lib/util/jsonToTable.d.ts +9 -0
  101. package/@types/lib/util/jsonToTable.d.ts.map +1 -0
  102. package/@types/lib/util/migrations/assetV10.d.ts +70 -0
  103. package/@types/lib/util/migrations/assetV10.d.ts.map +1 -0
  104. package/@types/lib/util/progress.d.ts +249 -0
  105. package/@types/lib/util/progress.d.ts.map +1 -0
  106. package/@types/lib/util/sessionStore.d.ts +25 -0
  107. package/@types/lib/util/sessionStore.d.ts.map +1 -0
  108. package/@types/lib/util/topological-sort.d.ts +22 -0
  109. package/@types/lib/util/topological-sort.d.ts.map +1 -0
  110. package/@types/lib/util/util.d.ts +124 -83
  111. package/@types/lib/util/util.d.ts.map +1 -1
  112. package/@types/lib/util/validations.d.ts +15 -3
  113. package/@types/lib/util/validations.d.ts.map +1 -1
  114. package/@types/types/mcdev.d.d.ts +35 -22
  115. package/@types/types/mcdev.d.d.ts.map +1 -1
  116. package/README.md +6 -2
  117. package/boilerplate/files/.prettierignore +7 -0
  118. package/boilerplate/files/.prettierrc +1 -23
  119. package/boilerplate/files/.vscode/extensions.json +14 -13
  120. package/boilerplate/files/.vscode/settings.json +14 -8
  121. package/boilerplate/files/eslint.config.js +44 -175
  122. package/boilerplate/forcedUpdates.json +11 -0
  123. package/boilerplate/npm-dependencies.json +3 -5
  124. package/boilerplate/npmrc-template +1 -0
  125. package/lib/Builder.js +4 -12
  126. package/lib/Deployer.js +32 -29
  127. package/lib/MetadataTypeDefinitions.js +4 -0
  128. package/lib/MetadataTypeInfo.js +4 -0
  129. package/lib/Retriever.js +6 -31
  130. package/lib/cli.js +101 -82
  131. package/lib/index.js +223 -164
  132. package/lib/metadataTypes/Asset.js +958 -307
  133. package/lib/metadataTypes/AttributeGroup.js +1 -6
  134. package/lib/metadataTypes/AttributeSet.js +1 -1
  135. package/lib/metadataTypes/Automation.js +95 -162
  136. package/lib/metadataTypes/Campaign.js +1 -6
  137. package/lib/metadataTypes/DataExtension.js +33 -132
  138. package/lib/metadataTypes/DataExtensionField.js +1 -1
  139. package/lib/metadataTypes/DataExtract.js +1 -56
  140. package/lib/metadataTypes/DataExtractType.js +1 -1
  141. package/lib/metadataTypes/DataFilter.js +23 -9
  142. package/lib/metadataTypes/DeliveryProfile.js +1 -6
  143. package/lib/metadataTypes/DomainVerification.js +1 -1
  144. package/lib/metadataTypes/Email.js +2 -4
  145. package/lib/metadataTypes/Event.js +7 -66
  146. package/lib/metadataTypes/FileLocation.js +1 -7
  147. package/lib/metadataTypes/FileTransfer.js +1 -56
  148. package/lib/metadataTypes/Filter.js +1 -1
  149. package/lib/metadataTypes/Folder.js +9 -9
  150. package/lib/metadataTypes/ImportFile.js +4 -59
  151. package/lib/metadataTypes/Journey.js +326 -129
  152. package/lib/metadataTypes/MetadataType.js +156 -174
  153. package/lib/metadataTypes/MobileCode.js +0 -1
  154. package/lib/metadataTypes/MobileKeyword.js +6 -39
  155. package/lib/metadataTypes/MobileMessage.js +111 -13
  156. package/lib/metadataTypes/MobilePush.js +456 -0
  157. package/lib/metadataTypes/MobilePushApp.js +118 -0
  158. package/lib/metadataTypes/Query.js +11 -37
  159. package/lib/metadataTypes/Script.js +1 -20
  160. package/lib/metadataTypes/SenderProfile.js +27 -23
  161. package/lib/metadataTypes/TransactionalMessage.js +1 -1
  162. package/lib/metadataTypes/TransactionalSMS.js +1 -1
  163. package/lib/metadataTypes/TriggeredSend.js +1 -1
  164. package/lib/metadataTypes/User.js +27 -23
  165. package/lib/metadataTypes/Verification.js +2 -2
  166. package/lib/metadataTypes/definitions/Asset.definition.js +94 -61
  167. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
  168. package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
  169. package/lib/metadataTypes/definitions/DomainVerification.definition.js +1 -0
  170. package/lib/metadataTypes/definitions/EmailSend.definition.js +2 -2
  171. package/lib/metadataTypes/definitions/FileTransfer.definition.js +1 -0
  172. package/lib/metadataTypes/definitions/Journey.definition.js +7 -3
  173. package/lib/metadataTypes/definitions/MobileMessage.definition.js +6 -0
  174. package/lib/metadataTypes/definitions/MobilePush.definition.js +308 -0
  175. package/lib/metadataTypes/definitions/MobilePushApp.definition.js +121 -0
  176. package/lib/metadataTypes/definitions/Query.definition.js +1 -0
  177. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  178. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +1 -1
  179. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -1
  180. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +2 -2
  181. package/lib/retrieveChangelog.js +28 -26
  182. package/lib/util/auth.js +127 -83
  183. package/lib/util/businessUnit.js +1 -1
  184. package/lib/util/cache.js +4 -6
  185. package/lib/util/cli.js +16 -19
  186. package/lib/util/config.js +22 -21
  187. package/lib/util/devops.js +162 -77
  188. package/lib/util/file.js +213 -199
  189. package/lib/util/git.js +278 -0
  190. package/lib/util/init.config.js +149 -169
  191. package/lib/util/init.git.js +37 -13
  192. package/lib/util/init.js +24 -15
  193. package/lib/util/init.npm.js +103 -120
  194. package/lib/util/isDeepEqual.js +48 -0
  195. package/lib/util/jsonToTable.js +76 -0
  196. package/lib/util/migrations/assetV10.js +367 -0
  197. package/lib/util/progress.js +609 -0
  198. package/lib/util/sessionStore.js +219 -0
  199. package/lib/util/topological-sort.js +114 -0
  200. package/lib/util/util.js +203 -118
  201. package/lib/util/validations.js +17 -11
  202. package/package.json +121 -126
  203. package/scripts/verify-packed-package.mjs +90 -0
  204. package/scripts/verify-progress-fixture.mjs +362 -0
  205. package/types/init-declarations.type-test.js +10 -0
  206. package/types/mcdev.d.js +18 -12
  207. package/.beautyamp.json +0 -13
  208. package/.bitbucket/PULL_REQUEST_TEMPLATE.md +0 -19
  209. package/.coverage-comment-template.svelte +0 -194
  210. package/.editorconfig +0 -9
  211. package/.fork/.prettierrc +0 -6
  212. package/.fork/custom-commands.json +0 -140
  213. package/.gitattributes +0 -7
  214. package/.github/ISSUE_TEMPLATE/bug.yml +0 -150
  215. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  216. package/.github/ISSUE_TEMPLATE/task.md +0 -10
  217. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +0 -28
  218. package/.github/PULL_REQUEST_TEMPLATE.md +0 -16
  219. package/.github/copilot-instructions.md +0 -85
  220. package/.github/dependabot.yml +0 -23
  221. package/.github/pr-labeler.yml +0 -3
  222. package/.github/workflows/close_issues_on_merge.yml +0 -23
  223. package/.github/workflows/code-test.yml +0 -41
  224. package/.github/workflows/coverage-base-update.yml +0 -61
  225. package/.github/workflows/coverage-develop-branch.yml +0 -42
  226. package/.github/workflows/coverage-main-branch.yml +0 -42
  227. package/.github/workflows/coverage.yml +0 -82
  228. package/.github/workflows/npm-publish.yml +0 -85
  229. package/.github/workflows/pr-labeler.yml +0 -19
  230. package/.github/workflows/sync-milestone.yml +0 -55
  231. package/.husky/commit-msg +0 -8
  232. package/.husky/post-checkout +0 -38
  233. package/.husky/post-merge +0 -24
  234. package/.husky/pre-commit +0 -8
  235. package/.issuetracker +0 -15
  236. package/.markdownlint.json +0 -16
  237. package/.markdownlint.md +0 -4
  238. package/.nycrc.json +0 -5
  239. package/.prettierignore +0 -3
  240. package/.prettierrc +0 -33
  241. package/.vscode/extensions.json +0 -28
  242. package/.vscode/launch.json +0 -15
  243. package/.vscode/settings.json +0 -92
  244. package/.vsls.json +0 -6
  245. package/CONTRIBUTING.md +0 -22
  246. package/boilerplate/files/.beautyamp.json +0 -13
  247. package/docs/dist/considerations.md +0 -66
  248. package/eslint.config.js +0 -144
  249. package/img/README.md/cdp-1.jpg +0 -0
  250. package/img/README.md/troubleshoot-authentication.jpg +0 -0
  251. package/img/README.md/troubleshoot-execution_policy-2.png +0 -0
  252. package/img/README.md/troubleshoot-execution_policy.jpg +0 -0
  253. package/img/README.md/troubleshoot-mac-sudo.png +0 -0
  254. package/img/README.md/troubleshoot-nodejs-index.jpg +0 -0
  255. package/img/README.md/troubleshoot-nodejs-permission.jpg +0 -0
  256. package/img/README.md/troubleshoot-ssh.jpg +0 -0
  257. package/img/README.md/vscode-eslint-allow_everywhere.jpg +0 -0
  258. package/img/README.md/vscode-recommendations-1.png +0 -0
  259. package/img/README.md/vscode-recommendations-2.png +0 -0
  260. package/prepare-release.js +0 -37
  261. package/test/general.test.js +0 -2709
  262. package/test/mockRoot/.mcdev-auth.json +0 -8
  263. package/test/mockRoot/.mcdev-validations.js +0 -93
  264. package/test/mockRoot/.mcdevrc.json +0 -182
  265. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +0 -58
  266. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +0 -20
  267. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.json +0 -11
  268. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.sql +0 -4
  269. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testBlocked_user.user-meta.json +0 -23
  270. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testExisting_user.user-meta.json +0 -31
  271. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testNew_user.user-meta.json +0 -27
  272. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNamFail.asset-block-meta.html +0 -23
  273. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNamFail.asset-block-meta.json +0 -41
  274. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchName.asset-block-meta.html +0 -23
  275. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchName.asset-block-meta.json +0 -41
  276. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNameAdd.asset-block-meta.html +0 -23
  277. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNameAdd.asset-block-meta.json +0 -41
  278. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.html +0 -12
  279. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.json +0 -39
  280. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.html +0 -1
  281. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.json +0 -39
  282. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.html +0 -4
  283. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.json +0 -39
  284. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.html +0 -4
  285. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.json +0 -39
  286. package/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.html +0 -12
  287. package/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.json +0 -29
  288. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/testNew_assetMessage.asset-message-meta.json +0 -435
  289. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/views.html.content.asset-message-meta.html +0 -150
  290. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/testNew_asset_templatebasedemail.asset-message-meta.json +0 -305
  291. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/views.html.content.asset-message-meta.html +0 -150
  292. package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/content.asset-template-meta.html +0 -150
  293. package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/testNew_asset_template.asset-template-meta.json +0 -116
  294. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +0 -52
  295. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +0 -49
  296. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +0 -59
  297. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testNew_dataExtension.dataExtension-meta.json +0 -20
  298. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +0 -35
  299. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +0 -35
  300. package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testExisting_dataFilter.dataFilter-meta.json +0 -19
  301. package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testNew_dataFilter.dataFilter-meta.json +0 -19
  302. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld.New@accenture.com.domainVerification-meta.json +0 -6
  303. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld@accenture.com.domainVerification-meta.json +0 -6
  304. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/mcdev.accenture.com.domainVerification-meta.json +0 -6
  305. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testExisting_emailSend.emailSend-meta.json +0 -36
  306. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testNew_emailSend.emailSend-meta.json +0 -36
  307. package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +0 -201
  308. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +0 -233
  309. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +0 -194
  310. package/test/mockRoot/deploy/testInstance/testBU/fileLocation/ExactTarget Enhanced FTP.fileLocation-meta.json +0 -5
  311. package/test/mockRoot/deploy/testInstance/testBU/fileLocation/testExisting_fileLocation_aws.fileLocation-meta.json +0 -14
  312. package/test/mockRoot/deploy/testInstance/testBU/fileLocation/testExisting_fileLocation_exsftp.fileLocation-meta.json +0 -12
  313. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +0 -17
  314. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +0 -17
  315. package/test/mockRoot/deploy/testInstance/testBU/filter/testExisting_filter.filter-meta.json +0 -10
  316. package/test/mockRoot/deploy/testInstance/testBU/filter/testNew_filter.filter-meta.json +0 -11
  317. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +0 -36
  318. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +0 -34
  319. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Multistep.journey-meta.json +0 -418
  320. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Quicksend.journey-meta.json +0 -232
  321. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_updatecontact.journey-meta.json +0 -108
  322. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_updatecontact_sharedDE.journey-meta.json +0 -108
  323. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_temail.journey-meta.json +0 -212
  324. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_temail_notPublished.journey-meta.json +0 -217
  325. package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_temail_notPublished.journey-meta.json +0 -213
  326. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.amp +0 -2
  327. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +0 -8
  328. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.amp +0 -2
  329. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +0 -8
  330. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.amp +0 -1
  331. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +0 -59
  332. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.amp +0 -1
  333. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +0 -58
  334. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.json +0 -11
  335. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.sql +0 -6
  336. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +0 -11
  337. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +0 -6
  338. package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.json +0 -11
  339. package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.sql +0 -4
  340. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +0 -6
  341. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +0 -1
  342. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +0 -6
  343. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +0 -1
  344. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testExisting_sendClassification.sendClassification-meta.json +0 -8
  345. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testNew_sendClassification.sendClassification-meta.json +0 -8
  346. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +0 -15
  347. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +0 -15
  348. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +0 -20
  349. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +0 -19
  350. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testExisting_tpush.transactionalPush-meta.json +0 -16
  351. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testNew_tpush.transactionalPush-meta.json +0 -16
  352. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.amp +0 -4
  353. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.json +0 -14
  354. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.amp +0 -4
  355. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.json +0 -14
  356. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +0 -27
  357. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +0 -27
  358. package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_automation__s1.7.verification-meta.json +0 -11
  359. package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_automation__s1.7.verification-meta.json +0 -11
  360. package/test/resourceFactory.js +0 -494
  361. package/test/resources/1111111/accountUser/configure-response.xml +0 -70
  362. package/test/resources/1111111/accountUser/create-response.xml +0 -97
  363. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml +0 -27
  364. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml +0 -156
  365. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml +0 -156
  366. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml +0 -87
  367. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml +0 -156
  368. package/test/resources/1111111/accountUser/update-response.xml +0 -111
  369. package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +0 -60
  370. package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml +0 -77
  371. package/test/resources/1111111/automation/v1/queries/get-response.json +0 -6
  372. package/test/resources/1111111/automation/v1/queries/post-response.json +0 -18
  373. package/test/resources/1111111/businessUnit/retrieve-ID=1111111-QAA-response.xml +0 -33
  374. package/test/resources/1111111/data/v1/customobjectdata/key/testExisting_dataExtensionShared/rowset/get-response.json +0 -13
  375. package/test/resources/1111111/dataExtension/create-expected.json +0 -20
  376. package/test/resources/1111111/dataExtension/create-response.xml +0 -59
  377. package/test/resources/1111111/dataExtension/retrieve-expected.json +0 -53
  378. package/test/resources/1111111/dataExtension/retrieve-expected.md +0 -23
  379. package/test/resources/1111111/dataExtension/retrieve-response.xml +0 -52
  380. package/test/resources/1111111/dataExtension/template_sharedDE-expected.json +0 -53
  381. package/test/resources/1111111/dataExtension/update-expected.json +0 -55
  382. package/test/resources/1111111/dataExtension/update-response.xml +0 -59
  383. package/test/resources/1111111/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtensionShared].[TriggerUpdate_randomNumber_]-response.xml +0 -45
  384. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +0 -98
  385. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionSharedORDataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +0 -98
  386. package/test/resources/1111111/dataExtensionField/retrieve-response.xml +0 -98
  387. package/test/resources/1111111/dataExtensionTemplate/retrieve-response.xml +0 -303
  388. package/test/resources/1111111/dataFolder/retrieve-ContentType=queryactivity-response.xml +0 -48
  389. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -26
  390. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -387
  391. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -364
  392. package/test/resources/1111111/dataFolder/retrieve-response-.xml +0 -387
  393. package/test/resources/1111111/list/retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml +0 -39
  394. package/test/resources/1111111/platform/v1/setup/quickflow/data/get-response.json +0 -455
  395. package/test/resources/1111111/query/patch_keySuffix-expected.json +0 -11
  396. package/test/resources/1111111/query/patch_keySuffix-expected.sql +0 -4
  397. package/test/resources/1111111/role/retrieve-IsPrivate=false-response.xml +0 -76
  398. package/test/resources/1111111/user/build-expected.json +0 -16
  399. package/test/resources/1111111/user/create-expected.json +0 -21
  400. package/test/resources/1111111/user/retrieve-expected.json +0 -24
  401. package/test/resources/1111111/user/retrieve-expected.md +0 -21
  402. package/test/resources/1111111/user/template-expected.json +0 -16
  403. package/test/resources/1111111/user/update-expected.json +0 -21
  404. package/test/resources/9999999/accountUser/retrieve-response.xml +0 -104
  405. package/test/resources/9999999/asset/build-asset_htmlblock-expected.html +0 -23
  406. package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +0 -29
  407. package/test/resources/9999999/asset/build-templatebasedemail-expected.json +0 -145
  408. package/test/resources/9999999/asset/build-templatebasedemail-html-expected.html +0 -20
  409. package/test/resources/9999999/asset/build-templatebasedemail-preheader-expected.amp +0 -1
  410. package/test/resources/9999999/asset/create-expected.json +0 -18
  411. package/test/resources/9999999/asset/resolveId-1234-notFound-expected.json +0 -1
  412. package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +0 -8
  413. package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +0 -8
  414. package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +0 -148
  415. package/test/resources/9999999/asset/retrieve-templatebasedemail-html-expected.html +0 -20
  416. package/test/resources/9999999/asset/retrieve-templatebasedemail-preheader-expected.amp +0 -1
  417. package/test/resources/9999999/asset/template-emailTemplate-expected.json +0 -20
  418. package/test/resources/9999999/asset/template-templatebasedemail-expected.json +0 -145
  419. package/test/resources/9999999/asset/template-templatebasedemail-html-expected.html +0 -20
  420. package/test/resources/9999999/asset/template-templatebasedemail-preheader-expected.amp +0 -1
  421. package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +0 -29
  422. package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +0 -23
  423. package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.json +0 -41
  424. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-id-expected.html +0 -33
  425. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +0 -33
  426. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-name-expected.html +0 -35
  427. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +0 -4
  428. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +0 -4
  429. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +0 -4
  430. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-id-expected.amp +0 -4
  431. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +0 -4
  432. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-name-expected.amp +0 -4
  433. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.js +0 -1
  434. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.json +0 -45
  435. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +0 -45
  436. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.jsonc +0 -1
  437. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.json +0 -44
  438. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +0 -1
  439. package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +0 -41
  440. package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +0 -40
  441. package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +0 -41
  442. package/test/resources/9999999/asset/v1/content/assets/1209971/get-response.json +0 -61
  443. package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +0 -60
  444. package/test/resources/9999999/asset/v1/content/assets/1295064/patch-response.json +0 -59
  445. package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +0 -60
  446. package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +0 -60
  447. package/test/resources/9999999/asset/v1/content/assets/1295067/get-response.json +0 -60
  448. package/test/resources/9999999/asset/v1/content/assets/16992/get-response.json +0 -60
  449. package/test/resources/9999999/asset/v1/content/assets/5286/get-response.json +0 -48
  450. package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +0 -273
  451. package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +0 -185
  452. package/test/resources/9999999/asset/v1/content/assets/9451/get-response.json +0 -61
  453. package/test/resources/9999999/asset/v1/content/assets/9456/get-response.json +0 -56
  454. package/test/resources/9999999/asset/v1/content/assets/9458/get-response.json +0 -56
  455. package/test/resources/9999999/asset/v1/content/assets/9460/get-response.json +0 -59
  456. package/test/resources/9999999/asset/v1/content/assets/9463/get-response.json +0 -61
  457. package/test/resources/9999999/asset/v1/content/assets/9465/get-response.json +0 -54
  458. package/test/resources/9999999/asset/v1/content/assets/950143/delete-response.txt +0 -1
  459. package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +0 -97
  460. package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +0 -105
  461. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_assetMessage.json +0 -441
  462. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_htmlblock.json +0 -59
  463. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_template.json +0 -147
  464. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_templatebasedemail.json +0 -322
  465. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_notexisting.json +0 -59
  466. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_preexisting.json +0 -59
  467. package/test/resources/9999999/asset/v1/content/assets/post-response-key=test_slash.json +0 -60
  468. package/test/resources/9999999/asset/v1/content/assets/post-response.json +0 -59
  469. package/test/resources/9999999/asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json +0 -198
  470. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,205,206,230,232.json +0 -129
  471. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,215,216,217,218,219,220,221,222,223,224.json +0 -257
  472. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,214,215,216,217,218,219,220,221,222.json +0 -377
  473. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,5,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,217,218.json +0 -460
  474. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,5,205,206,207,208,209,230,232.json +0 -229
  475. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN14,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192.json +0 -7
  476. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN15,193,194.json +0 -7
  477. 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 +0 -7
  478. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232,240,241,242,243,244,245.json +0 -168
  479. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,230,232.json +0 -32
  480. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN225,226,227,228,230,232.json +0 -7
  481. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN240,241,242,243,244,245.json +0 -144
  482. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN246,247,248,249.json +0 -132
  483. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213.json +0 -160
  484. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN4,214.json +0 -35
  485. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN5,207,208,209.json +0 -108
  486. package/test/resources/9999999/asset/v1/content/assets/query/post-response-customerKey=testExisting_asset_htmlblock.json +0 -46
  487. package/test/resources/9999999/asset/v1/content/categories/post-response.json +0 -9
  488. package/test/resources/9999999/asset-deploy/block/testNew_asset_badExtension.bad-type-extension.json +0 -39
  489. package/test/resources/9999999/asset-deploy/block/testNew_asset_badName_bad.asset-block-meta.json +0 -39
  490. package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.html +0 -1
  491. package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.json +0 -39
  492. package/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.html +0 -12
  493. package/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.json +0 -29
  494. package/test/resources/9999999/attributeGroup/retrieve-expected.json +0 -25
  495. package/test/resources/9999999/attributeSet/retrieve-expected.json +0 -143
  496. package/test/resources/9999999/automation/build-expected.json +0 -61
  497. package/test/resources/9999999/automation/clone-expected.json +0 -61
  498. package/test/resources/9999999/automation/create-callout-expected.json +0 -66
  499. package/test/resources/9999999/automation/create-expected.json +0 -50
  500. package/test/resources/9999999/automation/create-testNew_automation-expected.md +0 -29
  501. package/test/resources/9999999/automation/delete-response.xml +0 -40
  502. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +0 -44
  503. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +0 -44
  504. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -42
  505. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +0 -42
  506. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +0 -42
  507. package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -42
  508. package/test/resources/9999999/automation/retrieve-expected.json +0 -67
  509. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +0 -31
  510. package/test/resources/9999999/automation/retrieve-wait-expected.json +0 -81
  511. package/test/resources/9999999/automation/retrieve-wait-expected.md +0 -18
  512. package/test/resources/9999999/automation/template-expected.json +0 -61
  513. package/test/resources/9999999/automation/update-callout-expected.json +0 -68
  514. package/test/resources/9999999/automation/update-expected.json +0 -67
  515. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +0 -31
  516. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +0 -92
  517. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/patch-response.json +0 -85
  518. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +0 -85
  519. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +0 -85
  520. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +0 -85
  521. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +0 -86
  522. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +0 -85
  523. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +0 -86
  524. package/test/resources/9999999/automation/v1/automations/0fc2ac96-14ba-495a-8db9-3ddd4f8ac444-wait/get-response.json +0 -114
  525. package/test/resources/9999999/automation/v1/automations/8f82c2a7-0bae-45a9-bdee-e631ab25c0d5/get-response.json +0 -44
  526. package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +0 -85
  527. package/test/resources/9999999/automation/v1/automations/post-response.json +0 -93
  528. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/delete-response.txt +0 -1
  529. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/get-response.json +0 -38
  530. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +0 -38
  531. package/test/resources/9999999/automation/v1/dataextracts/get-response.json +0 -20
  532. package/test/resources/9999999/automation/v1/dataextracts/post-response.json +0 -38
  533. package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +0 -50
  534. package/test/resources/9999999/automation/v1/dataverifications/post-response.json +0 -12
  535. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/delete-response.json +0 -0
  536. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/get-response.json +0 -12
  537. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/patch-response.json +0 -12
  538. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/delete-response.json +0 -1
  539. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/get-response.json +0 -18
  540. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +0 -18
  541. package/test/resources/9999999/automation/v1/filetransfers/get-response.json +0 -15
  542. package/test/resources/9999999/automation/v1/filetransfers/post-response.json +0 -18
  543. package/test/resources/9999999/automation/v1/filters/a0f1a1bc-4ea1-44b3-8fe1-ce40ef35c1c0/patch-response.json +0 -18
  544. package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/delete-response.txt +0 -0
  545. package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/get-response.json +0 -15
  546. package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/patch-response.json +0 -15
  547. package/test/resources/9999999/automation/v1/filters/get-response.json +0 -22
  548. package/test/resources/9999999/automation/v1/ftplocations/get-response.json +0 -43
  549. package/test/resources/9999999/automation/v1/imports/1ebf557b-372e-eb11-b81b-48df37d1dbd7/get-response.json +0 -78
  550. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/delete-response.txt +0 -0
  551. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/get-response.json +0 -35
  552. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +0 -35
  553. package/test/resources/9999999/automation/v1/imports/d2474efb-a449-ef11-b876-f40343c95928/get-response.json +0 -37
  554. package/test/resources/9999999/automation/v1/imports/get-response.json +0 -146
  555. package/test/resources/9999999/automation/v1/imports/post-response.json +0 -30
  556. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +0 -1
  557. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/actions/start/post-response.txt +0 -1
  558. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/delete-response.json +0 -1
  559. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +0 -17
  560. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +0 -18
  561. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +0 -17
  562. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +0 -18
  563. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/get-response.json +0 -17
  564. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/patch-response.json +0 -18
  565. package/test/resources/9999999/automation/v1/queries/abcde-607c-4940-afef-437965094dat/get-response.json +0 -17
  566. package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +0 -24
  567. package/test/resources/9999999/automation/v1/queries/get-response.json +0 -92
  568. package/test/resources/9999999/automation/v1/queries/post-response.json +0 -18
  569. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/delete-response.txt +0 -1
  570. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/get-response.json +0 -10
  571. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +0 -10
  572. package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +0 -17
  573. package/test/resources/9999999/automation/v1/scripts/get-response.json +0 -57
  574. package/test/resources/9999999/automation/v1/scripts/post-response.json +0 -10
  575. package/test/resources/9999999/data/v1/customobjectdata/key/testExisting_dataExtension/rowset/get-response.json +0 -13
  576. package/test/resources/9999999/data/v1/filetransferlocation/Salesforce%20Objects%20%26%20Reports/get-response.json +0 -4
  577. package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_aws/patch-response.json +0 -18
  578. package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_azure/delete-response.json +0 -4
  579. package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_azure/get-response.json +0 -18
  580. package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_exsftp/patch-response.json +0 -16
  581. package/test/resources/9999999/data/v1/filetransferlocations/get-response.json +0 -59
  582. package/test/resources/9999999/dataExtension/build-expected.json +0 -66
  583. package/test/resources/9999999/dataExtension/create-expected.json +0 -20
  584. package/test/resources/9999999/dataExtension/create-response.xml +0 -59
  585. package/test/resources/9999999/dataExtension/delete-response.xml +0 -42
  586. package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testExisting_dataExtension-response.xml +0 -52
  587. package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +0 -50
  588. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +0 -52
  589. package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +0 -50
  590. package/test/resources/9999999/dataExtension/retrieve-expected.json +0 -66
  591. package/test/resources/9999999/dataExtension/retrieve-expected.md +0 -25
  592. package/test/resources/9999999/dataExtension/retrieve-response.xml +0 -224
  593. package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +0 -219
  594. package/test/resources/9999999/dataExtension/template-expected.json +0 -66
  595. package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +0 -55
  596. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +0 -1
  597. package/test/resources/9999999/dataExtension/update-expected.json +0 -72
  598. package/test/resources/9999999/dataExtension/update-response.xml +0 -59
  599. package/test/resources/9999999/dataExtension-deploy/testBlacklist_dataExtension.dataExtension-meta.json +0 -20
  600. package/test/resources/9999999/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtension].[LastName]-response.xml +0 -44
  601. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +0 -133
  602. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +0 -99
  603. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +0 -461
  604. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +0 -133
  605. package/test/resources/9999999/dataExtensionField/retrieve-Name=FirstName-response.xml +0 -78
  606. package/test/resources/9999999/dataExtensionField/retrieve-Name=LastName-response.xml +0 -78
  607. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +0 -1075
  608. package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +0 -303
  609. package/test/resources/9999999/dataExtract/build-expected.json +0 -35
  610. package/test/resources/9999999/dataExtract/get-expected.json +0 -39
  611. package/test/resources/9999999/dataExtract/patch-expected.json +0 -39
  612. package/test/resources/9999999/dataExtract/post-expected.json +0 -37
  613. package/test/resources/9999999/dataExtract/template-expected.json +0 -35
  614. package/test/resources/9999999/dataFilter/build-expected.json +0 -19
  615. package/test/resources/9999999/dataFilter/get-expected.json +0 -23
  616. package/test/resources/9999999/dataFilter/patch-expected.json +0 -20
  617. package/test/resources/9999999/dataFilter/post-expected.json +0 -20
  618. package/test/resources/9999999/dataFilter/template-expected.json +0 -19
  619. package/test/resources/9999999/dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml +0 -136
  620. package/test/resources/9999999/dataFolder/create-ContentType=asset,Name=testFolder_samePath,ParentFolderID=89397-response.xml +0 -33
  621. package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=my,ParentFolderID=2-response.xml +0 -33
  622. package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=path,ParentFolderID=862002-response.xml +0 -33
  623. package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=sub,ParentFolderID=862001-response.xml +0 -33
  624. package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=subpath,ParentFolderID=862003-response.xml +0 -33
  625. package/test/resources/9999999/dataFolder/create-response.xml +0 -33
  626. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +0 -70
  627. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +0 -70
  628. package/test/resources/9999999/dataFolder/retrieve-ContentType=automations-response.xml +0 -48
  629. package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +0 -48
  630. package/test/resources/9999999/dataFolder/retrieve-ContentType=queryactivity-response.xml +0 -48
  631. package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +0 -48
  632. package/test/resources/9999999/dataFolder/retrieve-ContentType=userinitiatedsends-response.xml +0 -48
  633. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,filteract,filterdef,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml +0 -765
  634. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml +0 -562
  635. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml +0 -335
  636. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,dataexten,salesforc,shared_da,shared_da,shared_sa,synchroni,automatio,useriniti,journey,mysubs,list,publicati,queryacti,ssjsactiv,triggered,triggered-response.xml +0 -519
  637. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -181
  638. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,journey-response.xml +0 -136
  639. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,ssjsactivity-response.xml +0 -136
  640. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml +0 -114
  641. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -115
  642. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +0 -70
  643. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-response.xml +0 -70
  644. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -431
  645. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +0 -70
  646. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINcontextual_suppression_list,hidden,list,mysubs,publication,suppression_list,triggered_send,triggered_send_journeybuilder-response.xml +0 -385
  647. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINcontextual_suppression_list,list,mysubs,publication,suppression_list-response.xml +0 -136
  648. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -138
  649. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -117
  650. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -117
  651. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilteractivity,hidden-response.xml +0 -139
  652. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilterdefinition,hidden-response.xml +0 -116
  653. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -46
  654. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,triggered_send,triggered_send_journeybuilder-response.xml +0 -276
  655. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -251
  656. package/test/resources/9999999/dataFolder/retrieve-QAA-response.xml +0 -387
  657. package/test/resources/9999999/dataFolder/retrieve-response.xml +0 -542
  658. package/test/resources/9999999/dataFolder/retrieve-samePathOtherBU-response.xml +0 -564
  659. package/test/resources/9999999/dataFolder/update-response.xml +0 -31
  660. package/test/resources/9999999/deliveryProfile/get-expected.json +0 -7
  661. package/test/resources/9999999/domainVerification/create-expected.json +0 -3
  662. package/test/resources/9999999/domainVerification/get-sap-expected.json +0 -6
  663. package/test/resources/9999999/domainVerification/update-expected.json +0 -6
  664. package/test/resources/9999999/email/retrieve-response.xml +0 -203
  665. package/test/resources/9999999/email/v1/category/post-response-parentCatId=290937,name=my,catType=automations.json +0 -7
  666. package/test/resources/9999999/email/v1/category/post-response-parentCatId=862100,name=sub,catType=automations.json +0 -7
  667. package/test/resources/9999999/email/v1/category/post-response-parentCatId=862101,name=path,catType=automations.json +0 -7
  668. package/test/resources/9999999/email/v1/category/post-response-parentCatId=862102,name=subpath,catType=automations.json +0 -7
  669. package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/delete-response.txt +0 -1
  670. package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/get-response.json +0 -19
  671. package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/patch-response.json +0 -15
  672. package/test/resources/9999999/email/v1/filters/filterdefinition/category/5318/get-response.json +0 -27
  673. package/test/resources/9999999/email/v1/filters/filterdefinition/category/8502/get-response.json +0 -7
  674. package/test/resources/9999999/email/v1/filters/filterdefinition/category/8503/get-response.json +0 -7
  675. package/test/resources/9999999/email/v1/filters/filterdefinition/post-response.json +0 -15
  676. package/test/resources/9999999/emailSend/build-expected.json +0 -43
  677. package/test/resources/9999999/emailSend/get-expected.json +0 -43
  678. package/test/resources/9999999/emailSend/patch-expected.json +0 -41
  679. package/test/resources/9999999/emailSend/post-expected.json +0 -41
  680. package/test/resources/9999999/emailSend/template-expected.json +0 -43
  681. package/test/resources/9999999/emailSendDefinition/create-response.xml +0 -98
  682. package/test/resources/9999999/emailSendDefinition/delete-response.xml +0 -36
  683. package/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml +0 -95
  684. package/test/resources/9999999/emailSendDefinition/update-response.xml +0 -97
  685. package/test/resources/9999999/event/build-expected.json +0 -226
  686. package/test/resources/9999999/event/get-automation-expected.json +0 -41
  687. package/test/resources/9999999/event/get-expected.json +0 -232
  688. package/test/resources/9999999/event/get-published-expected.json +0 -28
  689. package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +0 -231
  690. package/test/resources/9999999/event/post_withExistingDE-expected.json +0 -21
  691. package/test/resources/9999999/event/post_withSchema-callout-expected.json +0 -202
  692. package/test/resources/9999999/event/post_withSchema-expected.json +0 -232
  693. package/test/resources/9999999/event/put-callout-expected.json +0 -207
  694. package/test/resources/9999999/event/put-expected.json +0 -232
  695. package/test/resources/9999999/event/template-expected.json +0 -226
  696. package/test/resources/9999999/event-deploy/testNew_event_badExtension.bad-type-extension.json +0 -200
  697. package/test/resources/9999999/event-deploy/testNew_event_badName_bad.event-meta.json +0 -200
  698. package/test/resources/9999999/eventDefinition/get-expected.json +0 -34
  699. package/test/resources/9999999/fileLocation/build-expected.json +0 -14
  700. package/test/resources/9999999/fileLocation/get-aws-expected.json +0 -14
  701. package/test/resources/9999999/fileLocation/get-azure-expected.json +0 -14
  702. package/test/resources/9999999/fileLocation/get-eftp-expected.json +0 -5
  703. package/test/resources/9999999/fileLocation/get-exsftp-expected.json +0 -12
  704. package/test/resources/9999999/fileLocation/get-gcp-expected.json +0 -10
  705. package/test/resources/9999999/fileLocation/get-sor-expected.json +0 -5
  706. package/test/resources/9999999/fileLocation/patch-aws-expected.json +0 -14
  707. package/test/resources/9999999/fileLocation/patch-exsftp-expected.json +0 -12
  708. package/test/resources/9999999/fileLocation/template-expected.json +0 -14
  709. package/test/resources/9999999/fileTransfer/build-expected.json +0 -15
  710. package/test/resources/9999999/fileTransfer/get-expected.json +0 -17
  711. package/test/resources/9999999/fileTransfer/patch-expected.json +0 -17
  712. package/test/resources/9999999/fileTransfer/post-expected.json +0 -17
  713. package/test/resources/9999999/fileTransfer/template-expected.json +0 -15
  714. package/test/resources/9999999/filter/build-expected.json +0 -10
  715. package/test/resources/9999999/filter/get-expected.json +0 -11
  716. package/test/resources/9999999/filter/patch-expected.json +0 -11
  717. package/test/resources/9999999/filter/post-expected.json +0 -11
  718. package/test/resources/9999999/filter/template-expected.json +0 -10
  719. package/test/resources/9999999/filterActivity/create-response.xml +0 -46
  720. package/test/resources/9999999/filterActivity/retrieve-CustomerKey=testExisting_filter-response.xml +0 -30
  721. package/test/resources/9999999/filterDefinition/retrieve-CustomerKey=testExisting_dataFilter-response.xml +0 -30
  722. package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path/subpath.folder-meta.json +0 -9
  723. package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path.folder-meta.json +0 -9
  724. package/test/resources/9999999/folder-deploy/Data Extensions/my/sub.folder-meta.json +0 -9
  725. package/test/resources/9999999/folder-deploy/Data Extensions/my.folder-meta.json +0 -9
  726. package/test/resources/9999999/folder-deploy/Data Extensions/testExisting_folder.folder-meta.json +0 -9
  727. package/test/resources/9999999/folder-deploy/my automations/my/sub/path/subpath.folder-meta.json +0 -9
  728. package/test/resources/9999999/folder-deploy/my automations/my/sub/path.folder-meta.json +0 -9
  729. package/test/resources/9999999/folder-deploy/my automations/my/sub.folder-meta.json +0 -9
  730. package/test/resources/9999999/folder-deploy/my automations/my.folder-meta.json +0 -9
  731. package/test/resources/9999999/folder-deploy-samepath/Content Builder/testFolder_samePath.folder-meta.json +0 -9
  732. package/test/resources/9999999/folder-deploy-slash/Content Builder/Headers%2FFolders.folder-meta.json +0 -9
  733. package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +0 -628
  734. package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +0 -20194
  735. package/test/resources/9999999/importDefinition/retrieve-CustomerKey=testExisting_importFile-response.xml +0 -30
  736. package/test/resources/9999999/importDefinition/retrieve-Name=testExisting_importFile-response.xml +0 -30
  737. package/test/resources/9999999/importFile/build-expected.json +0 -30
  738. package/test/resources/9999999/importFile/get-dataImport-expected.json +0 -36
  739. package/test/resources/9999999/importFile/get-expected.json +0 -36
  740. package/test/resources/9999999/importFile/get-sms-expected.json +0 -80
  741. package/test/resources/9999999/importFile/patch-expected.json +0 -32
  742. package/test/resources/9999999/importFile/post-expected.json +0 -30
  743. package/test/resources/9999999/importFile/template-expected.json +0 -30
  744. package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +0 -426
  745. package/test/resources/9999999/interaction/v1/eventDefinitions/key_DEAudience-2e3c73b6-48cc-2ec0-5522-48636e1a236e/get-response.json +0 -39
  746. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/delete-response.txt +0 -0
  747. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +0 -242
  748. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event_automation/get-response.json +0 -52
  749. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +0 -28
  750. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +0 -243
  751. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=1.json +0 -86
  752. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=2.json +0 -101
  753. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=3.json +0 -86
  754. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response-versionNumber=1.txt +0 -1
  755. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +0 -1
  756. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=1.json +0 -461
  757. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=3.json +0 -461
  758. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response.json +0 -461
  759. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/delete-response.txt +0 -1
  760. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +0 -253
  761. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=1.json +0 -38
  762. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=2.json +0 -53
  763. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/delete-response.txt +0 -1
  764. package/test/resources/9999999/interaction/v1/interactions/get-response-status=Published.json +0 -40
  765. package/test/resources/9999999/interaction/v1/interactions/get-response.json +0 -249
  766. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response-versionNumber=1.json +0 -461
  767. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response.json +0 -461
  768. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/put-response.json +0 -461
  769. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response-versionNumber=1.json +0 -253
  770. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +0 -253
  771. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/get-response.json +0 -119
  772. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/put-response.json +0 -106
  773. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact_sharedDE/get-response.json +0 -119
  774. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact_sharedDE/put-response.json +0 -110
  775. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response-versionNumber=1.json +0 -219
  776. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response.json +0 -219
  777. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +0 -219
  778. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response.json +0 -219
  779. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response-versionNumber=1.json +0 -226
  780. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response.json +0 -226
  781. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/put-response.json +0 -226
  782. package/test/resources/9999999/interaction/v1/interactions/key_testNew_temail_notPublished/get-response.json +0 -218
  783. package/test/resources/9999999/interaction/v1/interactions/post-response.json +0 -216
  784. package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=1.json +0 -4
  785. package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=3.json +0 -4
  786. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +0 -34
  787. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +0 -5
  788. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +0 -36
  789. package/test/resources/9999999/interaction/v1/interactions/transactional/create/post-response.json +0 -3
  790. package/test/resources/9999999/interaction/v1/interactions/transactional/pause/post-response.json +0 -3
  791. package/test/resources/9999999/interaction/v1/interactions/transactional/resume/post-response.json +0 -3
  792. package/test/resources/9999999/interaction/v1/interactions/validateAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response.json +0 -4
  793. package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +0 -34
  794. package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +0 -5
  795. package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +0 -36
  796. package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response.json +0 -0
  797. package/test/resources/9999999/journey/build-expected.json +0 -229
  798. package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +0 -216
  799. package/test/resources/9999999/journey/get-multistep-expected.json +0 -414
  800. package/test/resources/9999999/journey/get-published-expected.json +0 -216
  801. package/test/resources/9999999/journey/get-quicksend-expected.json +0 -234
  802. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +0 -232
  803. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +0 -232
  804. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +0 -236
  805. package/test/resources/9999999/journey/get-transactionalEmail-expected.json +0 -211
  806. package/test/resources/9999999/journey/get-updatecontact-expected.json +0 -108
  807. package/test/resources/9999999/journey/get-updatecontact-sharedDE-expected.json +0 -108
  808. package/test/resources/9999999/journey/post-expected.json +0 -264
  809. package/test/resources/9999999/journey/publish-callout-expected.json +0 -1
  810. package/test/resources/9999999/journey/put-expected.json +0 -576
  811. package/test/resources/9999999/journey/put-updatecontact-expected.json +0 -108
  812. package/test/resources/9999999/journey/put-updatecontact-sharedDE-expected.json +0 -108
  813. package/test/resources/9999999/journey/template-expected.json +0 -229
  814. package/test/resources/9999999/journey/validate-callout-expected.json +0 -1
  815. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -21
  816. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/post-response.json +0 -0
  817. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +0 -3
  818. package/test/resources/9999999/legacy/v1/beta/automations/notifications/bHF6Q0Q3b1VXa21OdVQzZFQ0ckVSQToyNTow/get-response.json +0 -3
  819. package/test/resources/9999999/legacy/v1/beta/automations/notifications/cDhLQ2o2NExxVVc5N3VZeHF5WEExUToyNTow/get-response.json +0 -3
  820. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/NewRkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -29
  821. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -50
  822. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +0 -51
  823. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/bHF6Q0Q3b1VXa21OdVQzZFQ0ckVSQToyNTow/get-response.json +0 -216
  824. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/cDhLQ2o2NExxVVc5N3VZeHF5WEExUToyNTow/get-response.json +0 -79
  825. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +0 -286
  826. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-pauseSchedule.json +0 -1
  827. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-schedule.json +0 -1
  828. package/test/resources/9999999/legacy/v1/beta/messaging/deliverypolicy/get-response.json +0 -15
  829. package/test/resources/9999999/legacy/v1/beta/mobile/code/get-response.json +0 -32
  830. package/test/resources/9999999/legacy/v1/beta/mobile/imports/get-response.json +0 -112
  831. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +0 -42
  832. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/cTVJaG5oSDJPVUNHcUh6Z3pQT2tVdzo4Njow/delete-response.json +0 -0
  833. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +0 -47
  834. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/post-response.json +0 -3
  835. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/delete-response.json +0 -0
  836. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +0 -106
  837. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/post-response.json +0 -0
  838. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +0 -127
  839. package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +0 -129
  840. package/test/resources/9999999/legacy/v1/beta/mobile/message/post-response.json +0 -3
  841. package/test/resources/9999999/legacy/v1/beta/object/NWQwdnhEU3dFZWVBekJRQzdISWl0QTo0NTow/get-response.json +0 -12
  842. package/test/resources/9999999/legacy/v1/beta2/data/campaign/get-response.json +0 -29
  843. package/test/resources/9999999/list/retrieve-response.xml +0 -91
  844. package/test/resources/9999999/messaging/v1/domainverification/delete/post-response.txt +0 -1
  845. package/test/resources/9999999/messaging/v1/domainverification/get-response.json +0 -52
  846. package/test/resources/9999999/messaging/v1/domainverification/post-response.txt +0 -1
  847. package/test/resources/9999999/messaging/v1/domainverification/update/post-response.txt +0 -1
  848. package/test/resources/9999999/messaging/v1/email/definitions/get-response.json +0 -29
  849. package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +0 -19
  850. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/delete-response.json +0 -6
  851. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +0 -26
  852. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +0 -26
  853. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail_notPublished/get-response.json +0 -26
  854. package/test/resources/9999999/messaging/v1/email/definitions/testNew_temail_notPublished/get-response.json +0 -26
  855. package/test/resources/9999999/messaging/v1/push/definitions/get-response.json +0 -15
  856. package/test/resources/9999999/messaging/v1/push/definitions/post-response.json +0 -13
  857. package/test/resources/9999999/messaging/v1/push/definitions/testExisting_tpush/get-response.json +0 -13
  858. package/test/resources/9999999/messaging/v1/push/definitions/testExisting_tpush/patch-response.json +0 -13
  859. package/test/resources/9999999/messaging/v1/sms/definitions/get-response.json +0 -15
  860. package/test/resources/9999999/messaging/v1/sms/definitions/post-response.json +0 -19
  861. package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/get-response.json +0 -20
  862. package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/patch-response.json +0 -20
  863. package/test/resources/9999999/mobileKeyword/build-expected.amp +0 -6
  864. package/test/resources/9999999/mobileKeyword/build-expected.json +0 -7
  865. package/test/resources/9999999/mobileKeyword/get-expected.amp +0 -6
  866. package/test/resources/9999999/mobileKeyword/get-expected.json +0 -13
  867. package/test/resources/9999999/mobileKeyword/post-create-expected.amp +0 -2
  868. package/test/resources/9999999/mobileKeyword/post-create-expected.json +0 -15
  869. package/test/resources/9999999/mobileKeyword/template-expected.amp +0 -6
  870. package/test/resources/9999999/mobileKeyword/template-expected.json +0 -7
  871. package/test/resources/9999999/mobileMessage/build-expected.amp +0 -6
  872. package/test/resources/9999999/mobileMessage/build-expected.json +0 -57
  873. package/test/resources/9999999/mobileMessage/get-expected.amp +0 -6
  874. package/test/resources/9999999/mobileMessage/get-expected.json +0 -58
  875. package/test/resources/9999999/mobileMessage/post-create-expected.amp +0 -1
  876. package/test/resources/9999999/mobileMessage/post-create-expected.json +0 -61
  877. package/test/resources/9999999/mobileMessage/post-update-expected.amp +0 -1
  878. package/test/resources/9999999/mobileMessage/post-update-expected.json +0 -58
  879. package/test/resources/9999999/mobileMessage/template-expected.amp +0 -6
  880. package/test/resources/9999999/mobileMessage/template-expected.json +0 -57
  881. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation-response.xml +0 -30
  882. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +0 -32
  883. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +0 -32
  884. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +0 -32
  885. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +0 -32
  886. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +0 -30
  887. package/test/resources/9999999/program/retrieve-CustomerKey=testNew_automation-response.xml +0 -30
  888. package/test/resources/9999999/program/retrieve-Name=testExisting_automation-response.xml +0 -31
  889. package/test/resources/9999999/program/retrieve-response.xml +0 -62
  890. package/test/resources/9999999/query/build-expected.json +0 -8
  891. package/test/resources/9999999/query/build-expected.sql +0 -7
  892. package/test/resources/9999999/query/clone-expected.json +0 -8
  893. package/test/resources/9999999/query/clone-expected.sql +0 -7
  894. package/test/resources/9999999/query/get-expected.json +0 -11
  895. package/test/resources/9999999/query/get-expected.sql +0 -7
  896. package/test/resources/9999999/query/get2-expected.json +0 -11
  897. package/test/resources/9999999/query/get_sharedDE-expected.json +0 -11
  898. package/test/resources/9999999/query/get_sharedDE-expected.sql +0 -7
  899. package/test/resources/9999999/query/patch-expected.json +0 -11
  900. package/test/resources/9999999/query/patch-expected.sql +0 -6
  901. package/test/resources/9999999/query/patch_fixKeys-expected.json +0 -11
  902. package/test/resources/9999999/query/patch_fixKeys-expected.sql +0 -6
  903. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.json +0 -11
  904. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.sql +0 -6
  905. package/test/resources/9999999/query/post-expected.json +0 -11
  906. package/test/resources/9999999/query/post-expected.sql +0 -4
  907. package/test/resources/9999999/query/template-expected.json +0 -8
  908. package/test/resources/9999999/query/template-expected.sql +0 -7
  909. package/test/resources/9999999/query/template_sharedDE-expected.json +0 -8
  910. package/test/resources/9999999/query/template_sharedDE-expected.sql +0 -7
  911. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml +0 -26
  912. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query2ANDStatus=Active-response.xml +0 -30
  913. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml +0 -30
  914. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +0 -30
  915. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysSuffixANDStatus=Active-response.xml +0 -30
  916. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +0 -30
  917. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +0 -30
  918. package/test/resources/9999999/script/build-expected.json +0 -6
  919. package/test/resources/9999999/script/build-expected.ssjs +0 -1
  920. package/test/resources/9999999/script/get-expected.json +0 -8
  921. package/test/resources/9999999/script/get-expected.ssjs +0 -1
  922. package/test/resources/9999999/script/get_ampincluded-expected.html +0 -5
  923. package/test/resources/9999999/script/get_ampincluded-expected.json +0 -8
  924. package/test/resources/9999999/script/get_ampincluded-rcb-id-expected.html +0 -5
  925. package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +0 -5
  926. package/test/resources/9999999/script/get_ampincluded-rcb-name-expected.html +0 -5
  927. package/test/resources/9999999/script/get_ampscript-expected.html +0 -11
  928. package/test/resources/9999999/script/get_ampscript-expected.json +0 -8
  929. package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +0 -9
  930. package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +0 -9
  931. package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +0 -13
  932. package/test/resources/9999999/script/get_mixed-expected.html +0 -12
  933. package/test/resources/9999999/script/get_mixed-expected.json +0 -8
  934. package/test/resources/9999999/script/get_mixed-rcb-id-expected.html +0 -12
  935. package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +0 -12
  936. package/test/resources/9999999/script/get_mixed-rcb-name-expected.html +0 -14
  937. package/test/resources/9999999/script/get_noScriptTag-expected.html +0 -1
  938. package/test/resources/9999999/script/get_noScriptTag-expected.json +0 -8
  939. package/test/resources/9999999/script/patch-expected.json +0 -8
  940. package/test/resources/9999999/script/patch-expected.ssjs +0 -2
  941. package/test/resources/9999999/script/post-expected.json +0 -8
  942. package/test/resources/9999999/script/post-expected.ssjs +0 -1
  943. package/test/resources/9999999/script/template-expected.json +0 -6
  944. package/test/resources/9999999/script/template-expected.ssjs +0 -1
  945. package/test/resources/9999999/sendClassification/build-expected.json +0 -8
  946. package/test/resources/9999999/sendClassification/create-response.xml +0 -51
  947. package/test/resources/9999999/sendClassification/delete-response.xml +0 -36
  948. package/test/resources/9999999/sendClassification/get-expected.json +0 -10
  949. package/test/resources/9999999/sendClassification/patch-expected.json +0 -10
  950. package/test/resources/9999999/sendClassification/post-expected.json +0 -8
  951. package/test/resources/9999999/sendClassification/retrieve-response.xml +0 -86
  952. package/test/resources/9999999/sendClassification/template-expected.json +0 -8
  953. package/test/resources/9999999/sendClassification/update-response.xml +0 -49
  954. package/test/resources/9999999/senderProfile/build-expected.json +0 -15
  955. package/test/resources/9999999/senderProfile/create-response.xml +0 -50
  956. package/test/resources/9999999/senderProfile/delete-response.xml +0 -36
  957. package/test/resources/9999999/senderProfile/get-expected.json +0 -19
  958. package/test/resources/9999999/senderProfile/get-rcb-id-expected.json +0 -19
  959. package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +0 -19
  960. package/test/resources/9999999/senderProfile/get-rcb-name-expected.json +0 -19
  961. package/test/resources/9999999/senderProfile/patch-expected.json +0 -19
  962. package/test/resources/9999999/senderProfile/post-expected.json +0 -15
  963. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=Default-response.xml +0 -49
  964. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=wrong-key-response.xml +0 -26
  965. package/test/resources/9999999/senderProfile/retrieve-response.xml +0 -95
  966. package/test/resources/9999999/senderProfile/template-expected.json +0 -15
  967. package/test/resources/9999999/senderProfile/update-response.xml +0 -48
  968. package/test/resources/9999999/transactionalEmail/build-expected.json +0 -18
  969. package/test/resources/9999999/transactionalEmail/create-publish-expected.json +0 -20
  970. package/test/resources/9999999/transactionalEmail/get-expected.json +0 -20
  971. package/test/resources/9999999/transactionalEmail/get-published-expected.json +0 -20
  972. package/test/resources/9999999/transactionalEmail/patch-expected.json +0 -20
  973. package/test/resources/9999999/transactionalEmail/post-expected.json +0 -20
  974. package/test/resources/9999999/transactionalEmail/template-expected.json +0 -18
  975. package/test/resources/9999999/transactionalPush/build-expected.json +0 -8
  976. package/test/resources/9999999/transactionalPush/get-expected.json +0 -11
  977. package/test/resources/9999999/transactionalPush/patch-expected.json +0 -14
  978. package/test/resources/9999999/transactionalPush/post-expected.json +0 -14
  979. package/test/resources/9999999/transactionalPush/template-expected.json +0 -8
  980. package/test/resources/9999999/transactionalSMS/build-expected.amp +0 -108
  981. package/test/resources/9999999/transactionalSMS/build-expected.json +0 -12
  982. package/test/resources/9999999/transactionalSMS/get-expected.amp +0 -108
  983. package/test/resources/9999999/transactionalSMS/get-expected.json +0 -14
  984. package/test/resources/9999999/transactionalSMS/patch-expected.amp +0 -102
  985. package/test/resources/9999999/transactionalSMS/patch-expected.json +0 -14
  986. package/test/resources/9999999/transactionalSMS/post-expected.amp +0 -102
  987. package/test/resources/9999999/transactionalSMS/post-expected.json +0 -14
  988. package/test/resources/9999999/transactionalSMS/template-expected.amp +0 -108
  989. package/test/resources/9999999/transactionalSMS/template-expected.json +0 -12
  990. package/test/resources/9999999/triggeredSend/build-expected.json +0 -28
  991. package/test/resources/9999999/triggeredSend/get-expected.json +0 -28
  992. package/test/resources/9999999/triggeredSend/get-rcb-id-expected.json +0 -28
  993. package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +0 -28
  994. package/test/resources/9999999/triggeredSend/get-rcb-name-expected.json +0 -28
  995. package/test/resources/9999999/triggeredSend/patch-expected.json +0 -27
  996. package/test/resources/9999999/triggeredSend/post-expected.json +0 -27
  997. package/test/resources/9999999/triggeredSend/template-expected.json +0 -28
  998. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +0 -79
  999. package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +0 -36
  1000. package/test/resources/9999999/triggeredSendDefinition/retrieve-CustomerKey=testExisting_triggeredSend-response.xml +0 -72
  1001. package/test/resources/9999999/triggeredSendDefinition/retrieve-CustomerKey=testExisting_triggeredSend_rcb-response.xml +0 -72
  1002. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +0 -118
  1003. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINdummy,Active-response.xml +0 -118
  1004. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +0 -78
  1005. package/test/resources/9999999/triggeredSendSummary/get-expected.json +0 -24
  1006. package/test/resources/9999999/triggeredSendSummary/retrieve-response.xml +0 -49
  1007. package/test/resources/9999999/verification/build-expected.json +0 -11
  1008. package/test/resources/9999999/verification/get-expected.json +0 -12
  1009. package/test/resources/9999999/verification/patch-expected.json +0 -12
  1010. package/test/resources/9999999/verification/post-expected.json +0 -12
  1011. package/test/resources/9999999/verification/template-expected.json +0 -11
  1012. package/test/resources/auth.json +0 -32
  1013. package/test/resources/rest404-response.json +0 -5
  1014. package/test/resources/retrieve-response.xml +0 -21
  1015. package/test/type.asset.test.js +0 -1432
  1016. package/test/type.attributeGroup.test.js +0 -56
  1017. package/test/type.attributeSet.test.js +0 -97
  1018. package/test/type.automation.test.js +0 -1003
  1019. package/test/type.dataExtension.test.js +0 -419
  1020. package/test/type.dataExtensionField.test.js +0 -81
  1021. package/test/type.dataExtract.test.js +0 -186
  1022. package/test/type.dataFilter.test.js +0 -182
  1023. package/test/type.deliveryProfile.test.js +0 -45
  1024. package/test/type.domainVerification.test.js +0 -169
  1025. package/test/type.emailSend.test.js +0 -144
  1026. package/test/type.event.test.js +0 -346
  1027. package/test/type.fileLocation.test.js +0 -279
  1028. package/test/type.fileTransfer.test.js +0 -183
  1029. package/test/type.filter.test.js +0 -177
  1030. package/test/type.folder.test.js +0 -264
  1031. package/test/type.importFile.test.js +0 -223
  1032. package/test/type.journey.test.js +0 -1649
  1033. package/test/type.mobileKeyword.test.js +0 -279
  1034. package/test/type.mobileMessage.test.js +0 -206
  1035. package/test/type.query.test.js +0 -1031
  1036. package/test/type.script.test.js +0 -674
  1037. package/test/type.sendClassification.test.js +0 -156
  1038. package/test/type.senderProfile.test.js +0 -320
  1039. package/test/type.transactionalEmail.test.js +0 -162
  1040. package/test/type.transactionalPush.test.js +0 -160
  1041. package/test/type.transactionalSMS.test.js +0 -222
  1042. package/test/type.triggeredSend.test.js +0 -397
  1043. package/test/type.triggeredSendSummary.test.js +0 -45
  1044. package/test/type.user.test.js +0 -221
  1045. package/test/type.verification.test.js +0 -169
  1046. package/test/utils.js +0 -426
  1047. package/tsconfig.json +0 -26
  1048. package/tsconfig.npmScripts.json +0 -12
  1049. package/tsconfig.precommit.json +0 -26
@@ -4,12 +4,12 @@ import MetadataType from './MetadataType.js';
4
4
  import { Util } from '../util/util.js';
5
5
  import File from '../util/file.js';
6
6
  import pLimit from 'p-limit';
7
- import cliProgress from 'cli-progress';
7
+ import { ProgressBar } from '../util/progress.js';
8
8
  import cache from '../util/cache.js';
9
9
  import TriggeredSend from './TriggeredSend.js';
10
10
  import Folder from './Folder.js';
11
11
  import ReplaceCbReference from '../util/replaceContentBlockReference.js';
12
- import toposort from 'toposort';
12
+ import { topologicalSort } from '../util/topological-sort.js';
13
13
 
14
14
  /**
15
15
  * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
@@ -17,6 +17,7 @@ import toposort from 'toposort';
17
17
  * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
18
18
  * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
19
19
  * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
20
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
20
21
  * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
21
22
  * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
22
23
  * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
@@ -64,8 +65,8 @@ class Asset extends MetadataType {
64
65
  }
65
66
  if (retrieveDir && !cache.getCache()?.asset) {
66
67
  // cache this for 3 reasons:
67
- // 1) subtypes asset, message and template reference other content blocks by id/key/objectId as part of their views
68
- // 2) subtype message references a template if it is template-based
68
+ // 1) subtypes asset, email and template reference other content blocks by id/key/objectId as part of their views
69
+ // 2) subtype email references a template if it is template-based
69
70
  // 3) all non-binary subtypes support ampscript / ssjs which can load otherc content blocks via ContentBlockyByX()
70
71
 
71
72
  Util.logger.info(' - Caching dependent Metadata: asset');
@@ -88,11 +89,15 @@ class Asset extends MetadataType {
88
89
  if (retrieveDir) {
89
90
  if (key) {
90
91
  // running post-delete tasks to clean up potential old files
91
- await this.postDeleteTasks(key);
92
+ try {
93
+ await this.postDeleteTasks(key);
94
+ } catch (ex) {
95
+ Util.logger.warn(
96
+ ` - asset ${key}: cleanup failed: ${ex.message}; manual deletion of stale extracted code files may be necessary`
97
+ );
98
+ }
92
99
  // retrieve by key/id/name
93
- items.push(
94
- ...(await this.requestSubType(null, retrieveDir, key, null, loadShared))
95
- );
100
+ items.push(...(await this.requestSubType(null, retrieveDir, key, loadShared)));
96
101
  } else {
97
102
  // retrieve all
98
103
  // loop through subtypes and return results of each subType for caching (saving is handled per subtype)
@@ -100,13 +105,13 @@ class Asset extends MetadataType {
100
105
  // each subtype contains multiple different specific types (images contains jpg and png for example)
101
106
  // we use await here to limit the risk of too many concurrent api requests at time
102
107
  items.push(
103
- ...(await this.requestSubType(subType, retrieveDir, key, null, loadShared))
108
+ ...(await this.requestSubType(subType, retrieveDir, key, loadShared))
104
109
  );
105
110
  }
106
111
  }
107
112
  } else {
108
113
  // caching
109
- items.push(...(await this.requestSubType(subTypeArr, null, null, null, loadShared)));
114
+ items.push(...(await this.requestSubType(subTypeArr, null, null, loadShared)));
110
115
  }
111
116
  const metadata = this.parseResponseBody({ items: items });
112
117
  if (retrieveDir) {
@@ -132,44 +137,7 @@ class Asset extends MetadataType {
132
137
  }
133
138
 
134
139
  /**
135
- * Retrieves asset metadata for templating
136
- *
137
- * @deprecated Use `retrieve` followed by `build` instead. `retrieveAsTemplate` will be removed in a future version.
138
- * @param {string} templateDir Directory where retrieved metadata directory will be saved
139
- * @param {string} name name of the metadata file
140
- * @param {TemplateMap} templateVariables variables to be replaced in the metadata
141
- * @param {AssetSubType} [selectedSubType] optionally limit to a single subtype
142
- * @returns {Promise.<{metadata: AssetItem, type: string}>} Promise
143
- */
144
- static async retrieveAsTemplate(templateDir, name, templateVariables, selectedSubType) {
145
- Util.logDeprecated('retrieveAsTemplate', `'retrieve' followed by 'build'`);
146
- const items = [];
147
- const subTypes = selectedSubType ? [selectedSubType] : this._getSubTypes();
148
- await File.initPrettier();
149
- // loop through subtypes and return results of each subType for caching (saving is handled per subtype)
150
- for (const subType of subTypes) {
151
- // each subtype contains multiple different specific types (images contains jpg and png for example)
152
- // we use await here to limit the risk of too many concurrent api requests at time
153
- items.push(
154
- ...(await this.requestSubType(
155
- subType,
156
- templateDir,
157
- 'name:' + name,
158
- templateVariables
159
- ))
160
- );
161
- }
162
- const metadata = this.parseResponseBody({ items: items });
163
- if (!Object.keys(metadata).length) {
164
- Util.logger.error(`${this.definition.type} '${name}' not found on server.`);
165
- }
166
- Util.logger.info(`Downloaded: ${this.definition.type} (${Object.keys(metadata).length})`);
167
-
168
- return { metadata: Object.values(metadata)[0], type: this.definition.type };
169
- }
170
-
171
- /**
172
- * helper for {@link Asset.retrieve} + {@link Asset.retrieveAsTemplate}
140
+ * helper for {@link Asset.retrieve}
173
141
  *
174
142
  * @private
175
143
  * @returns {string[]} AssetSubType array
@@ -178,7 +146,7 @@ class Asset extends MetadataType {
178
146
  const selectedSubTypeArr = this.properties.metaDataTypes.retrieve.filter((type) =>
179
147
  type.startsWith('asset-')
180
148
  );
181
- /* eslint-disable unicorn/prefer-ternary */
149
+
182
150
  if (
183
151
  this.properties.metaDataTypes.retrieve.includes('asset') ||
184
152
  !selectedSubTypeArr.length
@@ -188,7 +156,6 @@ class Asset extends MetadataType {
188
156
  } else {
189
157
  return selectedSubTypeArr.map((type) => type.replace('asset-', ''));
190
158
  }
191
- /* eslint-enable unicorn/prefer-ternary */
192
159
  }
193
160
 
194
161
  /**
@@ -253,7 +220,7 @@ class Asset extends MetadataType {
253
220
  }
254
221
 
255
222
  // sort list & remove the undefined dependencies
256
- const flatList = toposort(dependencies).filter((a) => !!a);
223
+ const flatList = topologicalSort(dependencies).filter((a) => !!a);
257
224
 
258
225
  /** @type {AssetMap} */
259
226
  const metadataTypeMapSorted = {};
@@ -304,7 +271,6 @@ class Asset extends MetadataType {
304
271
  * @returns {Promise} Promise
305
272
  */
306
273
  static create(metadata) {
307
- delete metadata.businessUnitAvailability;
308
274
  const uri = '/asset/v1/content/assets/';
309
275
  return super.createREST(metadata, uri);
310
276
  }
@@ -345,17 +311,37 @@ class Asset extends MetadataType {
345
311
  return super.updateREST(metadata, uri);
346
312
  }
347
313
 
314
+ /**
315
+ * helper for {@link MetadataType.buildTemplate}
316
+ *
317
+ * @param {string} retrieveDir Directory where retrieved metadata directory is stored
318
+ * @param {string} templateDir Directory where metadata templates are stored
319
+ * @param {string} key name of the metadata file
320
+ * @param {TemplateMap} templateVariables variables to be replaced in the metadata
321
+ * @returns {Promise.<MetadataTypeItemObj>} single metadata
322
+ */
323
+ static async buildTemplate(retrieveDir, templateDir, key, templateVariables) {
324
+ if (Util.OPTIONS.shareAsset) {
325
+ this._toggleShareAssetTemplating(true);
326
+ }
327
+ const result = await super.buildTemplate(retrieveDir, templateDir, key, templateVariables);
328
+ if (Util.OPTIONS.shareAsset) {
329
+ // return values to normal
330
+ this._toggleShareAssetTemplating(false);
331
+ }
332
+ return result;
333
+ }
334
+
348
335
  /**
349
336
  * Retrieves Metadata of a specific asset type
350
337
  *
351
338
  * @param {string|string[]} subType group of similar assets to put in a folder (ie. images)
352
339
  * @param {string} [retrieveDir] target directory for saving assets
353
340
  * @param {string} [key] key/id/name to filter by
354
- * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata
355
341
  * @param {boolean} [loadShared] optionally retrieve assets from other BUs that were shared with the current
356
342
  * @returns {Promise.<object[]>} Promise
357
343
  */
358
- static async requestSubType(subType, retrieveDir, key, templateVariables, loadShared = false) {
344
+ static async requestSubType(subType, retrieveDir, key, loadShared = false) {
359
345
  const subTypeArr = Array.isArray(subType) ? subType : [subType];
360
346
  if (retrieveDir) {
361
347
  if (Array.isArray(subType)) {
@@ -505,12 +491,7 @@ class Asset extends MetadataType {
505
491
  }
506
492
  }
507
493
  // we have to wait on execution or it potentially causes memory reference issues when changing between BUs
508
- downloadedItemsMap = await this.requestAndSaveExtended(
509
- items,
510
- subType,
511
- retrieveDir,
512
- templateVariables
513
- );
494
+ downloadedItemsMap = await this.requestAndSaveExtended(items, subType, retrieveDir);
514
495
  }
515
496
  // always show the summary even if we already had the progress bar in the console
516
497
  Util.logger.info(
@@ -528,24 +509,20 @@ class Asset extends MetadataType {
528
509
  * @param {Array} items array of items to retrieve
529
510
  * @param {string} subType group of similar assets to put in a folder (ie. images)
530
511
  * @param {string} retrieveDir target directory for saving assets
531
- * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata
532
512
  * @returns {Promise.<MetadataTypeMap>} Promise
533
513
  */
534
- static async requestAndSaveExtended(items, subType, retrieveDir, templateVariables) {
514
+ static async requestAndSaveExtended(items, subType, retrieveDir) {
535
515
  // disable CLI logs other than error while retrieving subtype
536
516
  const loggerLevelBak = Util.logger.level;
537
517
  if (loggerLevelBak !== 'error') {
538
518
  // disable logging to cli other than Errors
539
519
  Util.setLoggingLevel({ silent: true });
540
520
  }
541
- const extendedBar = new cliProgress.SingleBar(
542
- {
543
- format:
544
- ' Downloading [{bar}] {percentage}% | {value}/{total} | asset-' +
545
- subType,
546
- },
547
- cliProgress.Presets.shades_classic
548
- );
521
+ const extendedBar = new ProgressBar({
522
+ format:
523
+ ' Downloading [{bar}] {percentage}% | {value}/{total} | asset-' +
524
+ subType,
525
+ });
549
526
 
550
527
  const completed = [];
551
528
  const failed = [];
@@ -599,8 +576,7 @@ class Asset extends MetadataType {
599
576
  const savedItem = await this.saveResults(
600
577
  metadataMapSaveSingle,
601
578
  retrieveDir,
602
- 'asset-' + subType,
603
- templateVariables
579
+ 'asset-' + subType
604
580
  );
605
581
  if (!savedItem[item.customerKey]) {
606
582
  // filtered by like-option
@@ -682,7 +658,7 @@ class Asset extends MetadataType {
682
658
  fail.error.endpoint
683
659
  ? Util.getGrayMsg(
684
660
  ' - ' +
685
- fail.error.endpoint.split('rest.marketingcloudapis.com')[1]
661
+ fail.error.endpoint.split('rest.marketingcloudapis.com', 2)[1]
686
662
  )
687
663
  : ''
688
664
  }`
@@ -708,7 +684,7 @@ class Asset extends MetadataType {
708
684
 
709
685
  // to handle uploaded files that bear the same name, SFMC engineers decided to add a number after the fileName
710
686
  // however, their solution was not following standards: fileName="header.png (4) " and then extension="png (4) "
711
- const fileExt = metadata.fileProperties.extension.split(' ')[0];
687
+ const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
712
688
 
713
689
  File.writeToFile(
714
690
  [retrieveDir, this.definition.type, subType],
@@ -736,7 +712,7 @@ class Asset extends MetadataType {
736
712
  if (!metadata?.fileProperties?.extension) {
737
713
  return;
738
714
  }
739
- const fileExt = metadata.fileProperties.extension.split(' ')[0];
715
+ const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
740
716
 
741
717
  const path = File.normalizePath([
742
718
  deployDir,
@@ -848,7 +824,7 @@ class Asset extends MetadataType {
848
824
  if (Util.OPTIONS.refresh) {
849
825
  if (createdUpdated.updated) {
850
826
  // only run this if assets were updated. for created assets we do not expect
851
- await this._refreshTriggeredSend(metadata);
827
+ await this.refresh(Object.keys(metadata));
852
828
  } else {
853
829
  Util.logger.warn(
854
830
  'You set the --refresh flag but no updated assets found. Skipping refresh of triggeredSendDefinitions.'
@@ -856,13 +832,147 @@ class Asset extends MetadataType {
856
832
  }
857
833
  }
858
834
  }
835
+ /**
836
+ * helper for {@link Asset}. finds active emails that reference the updated block
837
+ *
838
+ * @private
839
+ * @param {AssetMap[]} blocks block metadata
840
+ * @param {AssetMap} _foundEmails map of found emails
841
+ * @param {Set} _searchedKeys set of searched block keys
842
+ * @returns {Promise.<AssetMap[]>} - map of assets keyed by their keyField
843
+ */
844
+ static async _findEmailsUsingBlock(blocks, _foundEmails = {}, _searchedKeys = new Set()) {
845
+ const uri = '/asset/v1/content/assets/query';
846
+
847
+ // Mark all current blocks as searched
848
+ for (const block of blocks) {
849
+ _searchedKeys.add(block.customerKey);
850
+ }
851
+
852
+ /** @type {AssetRequestParams} */
853
+ const payload = {
854
+ page: { page: 1, pageSize: 50 },
855
+ sort: [{ property: 'id', direction: 'ASC' }],
856
+ // @ts-ignore
857
+ query: ['Key', 'Id', 'Name']
858
+ .map((by) => ({
859
+ property: 'content',
860
+ simpleOperator: 'mustContain',
861
+ value: `ContentBlockBy${by}`,
862
+ }))
863
+ .reduce((acc, condition, index) => {
864
+ if (index === 0) {
865
+ return condition;
866
+ }
867
+ return { leftOperand: acc, logicalOperator: 'OR', rightOperand: condition };
868
+ }, null),
869
+ };
870
+
871
+ const dependencyQuery = payload.query;
872
+ let items = [];
873
+ let moreResults;
874
+ let lastPage = 0;
875
+ let cursor = 0;
876
+
877
+ try {
878
+ do {
879
+ payload.page.page = lastPage + 1;
880
+ const response = await this.client.rest.post(uri, payload);
881
+ // sometimes the api will return a payload without items
882
+ // --> ensure we only add proper items-arrays here
883
+ if (response?.items?.length) {
884
+ items = items.concat(response.items);
885
+ }
886
+ // check if any more records
887
+ if (response?.message?.includes('all shards failed')) {
888
+ // When running certain filters, there is a limit of 10k on ElastiCache.
889
+ // Since we sort by ID, we can get the last ID then run new requests from there
890
+ const lastId = Number(items.at(-1)?.id);
891
+ if (!Number.isSafeInteger(lastId) || lastId <= cursor) {
892
+ throw new Error(
893
+ 'Asset dependency query failed: all shards failed without a usable ID cursor.'
894
+ );
895
+ }
896
+ cursor = lastId;
897
+ payload.query = {
898
+ leftOperand: dependencyQuery,
899
+ logicalOperator: 'AND',
900
+ rightOperand: {
901
+ property: 'id',
902
+ simpleOperator: 'greaterThan',
903
+ value: cursor,
904
+ },
905
+ };
906
+ lastPage = 0;
907
+ moreResults = true;
908
+ } else if (response.page * response.pageSize < response.count) {
909
+ moreResults = true;
910
+ lastPage = Number(response.page);
911
+ } else {
912
+ moreResults = false;
913
+ }
914
+ } while (moreResults);
915
+ } catch (ex) {
916
+ Util.logger.error(`An error occurred while attempting to query assets. ${ex.message}`);
917
+ throw ex;
918
+ }
919
+
920
+ // The API filter finds candidates only; verify exact literal arguments locally.
921
+ const references = { key: new Set(), id: new Set(), name: new Set() };
922
+ for (const block of blocks) {
923
+ references.key.add(block.customerKey);
924
+ if (block.id) {
925
+ references.id.add(String(block.id));
926
+ }
927
+ const namedBlock = structuredClone(block);
928
+ if (!namedBlock.r__folder_Path) {
929
+ this.setFolderPath(namedBlock, true);
930
+ }
931
+ if (namedBlock.r__folder_Path && namedBlock.name) {
932
+ references.name.add(
933
+ namedBlock.r__folder_Path.replaceAll('/', '\\') + '\\' + namedBlock.name
934
+ );
935
+ }
936
+ }
937
+ const verifiedItems = [];
938
+ for (let item of items) {
939
+ let contents = this._getReferenceContents(item);
940
+ if (!contents.length) {
941
+ item = await this.client.rest.get('/asset/v1/content/assets/' + item.id);
942
+ contents = this._getReferenceContents(item);
943
+ }
944
+ if (contents.some((content) => this._hasLiteralBlockReference(content, references))) {
945
+ verifiedItems.push(item);
946
+ }
947
+ }
948
+ items = verifiedItems;
949
+
950
+ const emailTypes = this.definition.extendedSubTypes.email;
951
+ const foundEmails = items.filter((item) => emailTypes.includes(item.assetType.name));
952
+ const foundBlocks = items.filter((item) => !emailTypes.includes(item.assetType.name));
953
+
954
+ for (const email of foundEmails) {
955
+ _foundEmails[email.customerKey] = email;
956
+ }
957
+
958
+ // Recurse with all unsearched blocks in one call
959
+ const unsearchedBlocks = foundBlocks.filter(
960
+ (block) => !_searchedKeys.has(block.customerKey)
961
+ );
962
+ if (unsearchedBlocks.length) {
963
+ await this._findEmailsUsingBlock(unsearchedBlocks, _foundEmails, _searchedKeys);
964
+ }
965
+
966
+ // @ts-ignore
967
+ return _foundEmails;
968
+ }
859
969
 
860
970
  /**
861
- * helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-message items. Gets executed if refresh option has been set.
971
+ * helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-email items. Gets executed if refresh option has been set.
862
972
  *
863
973
  * @private
864
974
  * @param {MetadataTypeMap} metadata metadata mapped by their keyField
865
- * @returns {Promise.<void>} -
975
+ * @returns {Promise.<string[]>} Returns list of keys that were refreshed
866
976
  */
867
977
  static async _refreshTriggeredSend(metadata) {
868
978
  // get legacyData.legacyId from assets to compare to TSD's metadata.Email.ID to
@@ -874,36 +984,33 @@ class Asset extends MetadataType {
874
984
  Util.logger.warn(
875
985
  'No legacyId found in updated emails. Skipping refresh of triggeredSendDefinitions.'
876
986
  );
877
- return;
987
+ return [];
878
988
  }
879
989
  // prep triggeredSendDefinition class
880
990
  TriggeredSend.properties = this.properties;
881
991
  TriggeredSend.buObject = this.buObject;
882
992
  TriggeredSend.client = this.client;
883
- try {
884
- // find refreshable TSDs
885
- const tsdObj = (await TriggeredSend.findRefreshableItems(true))?.metadata;
993
+ // find refreshable TSDs; discovery errors must reach the refresh/deploy handler
994
+ const tsdObj = (await TriggeredSend.findRefreshableItems(true))?.metadata;
886
995
 
887
- const tsdCountInitial = Object.keys(tsdObj).length;
888
- const emailCount = legacyIdArr.length;
889
- // filter TSDs by legacyId
890
- for (const key in tsdObj) {
891
- if (!legacyIdArr.includes(tsdObj[key].Email.ID)) {
892
- delete tsdObj[key];
893
- }
996
+ const tsdCountInitial = Object.keys(tsdObj).length;
997
+ const emailCount = legacyIdArr.length;
998
+ // filter TSDs by legacyId
999
+ for (const key in tsdObj) {
1000
+ if (!legacyIdArr.includes(tsdObj[key].Email.ID)) {
1001
+ delete tsdObj[key];
894
1002
  }
895
- const tsdCountFiltered = Object.keys(tsdObj).length;
896
- Util.logger.info(
897
- `Found ${tsdCountFiltered} out of ${tsdCountInitial} total triggeredSendDefinitions for ${emailCount} deployed emails. Commencing validation...`
898
- );
1003
+ }
1004
+ const tsdCountFiltered = Object.keys(tsdObj).length;
1005
+ Util.logger.info(
1006
+ `Found ${tsdCountFiltered} out of ${tsdCountInitial} total triggeredSendDefinitions for ${emailCount} deployed emails. Commencing validation...`
1007
+ );
899
1008
 
900
- // get keys of TSDs to refresh
901
- const keyArr = await TriggeredSend.getKeysForValidTSDs(tsdObj);
1009
+ // get keys of TSDs to refresh
1010
+ const keyArr = await TriggeredSend.getKeysForValidTSDs(tsdObj);
902
1011
 
903
- await TriggeredSend.refresh(keyArr);
904
- } catch {
905
- Util.logger.warn('Failed to refresh triggeredSendDefinition');
906
- }
1012
+ // Never pass an empty selection to a refresh-all-capable method.
1013
+ return keyArr.length ? await TriggeredSend.refresh(keyArr) : [];
907
1014
  }
908
1015
 
909
1016
  /**
@@ -931,10 +1038,7 @@ class Asset extends MetadataType {
931
1038
  'CloudPage content cannot be created via mcdev. Please create it via the UI first, then you can update the content or key.'
932
1039
  );
933
1040
  }
934
- if (
935
- this.definition.extendedSubTypes.cloudpage.includes(metadata.assetType.name) ||
936
- this.definition.extendedSubTypes.coderesource.includes(metadata.assetType.name)
937
- ) {
1041
+ if (this.definition.extendedSubTypes.webstudio.includes(metadata.assetType.name)) {
938
1042
  // if we do create those, we get the error "Asset <id> not found" because the internal endpoint internal/v2/cloudpages/sites won't find it.
939
1043
  throw new Error(
940
1044
  'CloudPage assets cannot be created via mcdev. Please create it via the UI first, then you can update the content or key.'
@@ -1013,6 +1117,8 @@ class Asset extends MetadataType {
1013
1117
 
1014
1118
  // #1 get text extracts back into the JSON
1015
1119
  await this._mergeCode(metadata, deployDir, subType);
1120
+ // Keep preview tokens through Mustache builds; restore only the final deployment source.
1121
+ this._restoreMobilePreview(metadata);
1016
1122
 
1017
1123
  // #2 get file from local disk and insert as base64
1018
1124
  await this._readExtendedFileFromFS(metadata, subType, deployDir);
@@ -1057,7 +1163,7 @@ class Asset extends MetadataType {
1057
1163
  * find the subType matching the extendedSubType
1058
1164
  *
1059
1165
  * @param {string} extendedSubType webpage, htmlblock, etc
1060
- * @returns {string} subType: block, message, other, etc
1166
+ * @returns {string} subType: block, email, other, etc
1061
1167
  */
1062
1168
  static #getMainSubtype(extendedSubType) {
1063
1169
  return Object.keys(this.definition.extendedSubTypes).find((subType) =>
@@ -1206,7 +1312,7 @@ class Asset extends MetadataType {
1206
1312
  if (metadata?.fileProperties?.extension) {
1207
1313
  // to handle uploaded files that bear the same name, SFMC engineers decided to add a number after the fileName
1208
1314
  // however, their solution was not following standards: fileName="header.png (4) " and then extension="png (4) "
1209
- const fileExt = metadata.fileProperties.extension.split(' ')[0];
1315
+ const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
1210
1316
 
1211
1317
  const filecontent = await File.readFilteredFilename(
1212
1318
  [templateDir, this.definition.type, subType],
@@ -1239,7 +1345,7 @@ class Asset extends MetadataType {
1239
1345
  extractedFile.content = ssjs;
1240
1346
  }
1241
1347
  }
1242
- File.writeToFile(
1348
+ await File.writeToFile(
1243
1349
  [targetDir, ...extractedFile.subFolder],
1244
1350
  extractedFile.fileName,
1245
1351
  extractedFile.fileExt,
@@ -1330,7 +1436,7 @@ class Asset extends MetadataType {
1330
1436
  */
1331
1437
  static async _preDeployTasksBocks(metadata) {
1332
1438
  switch (metadata.assetType.name) {
1333
- case 'templatebasedemail': // message
1439
+ case 'templatebasedemail': // email
1334
1440
  case 'htmlemail':
1335
1441
  case 'webpage': {
1336
1442
  // metadata.views.html.slots.<>.blocks.<>.content (optional)
@@ -1358,40 +1464,44 @@ class Asset extends MetadataType {
1358
1464
  */
1359
1465
  static async _preDeployTasksBocks_slots(metadataSlots) {
1360
1466
  for (const slot in metadataSlots) {
1361
- if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
1362
- const slotObj = metadataSlots[slot];
1363
- // found slot
1364
- if (slotObj.blocks) {
1365
- for (const block in slotObj.blocks) {
1366
- if (Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
1367
- const asset = slotObj.blocks[block];
1368
- if (asset.r__asset_key) {
1369
- // by only running the following if r__asset_key was set, we simply skip anything that wasnt resolved during retrieve
1370
- asset.customerKey = asset.r__asset_key;
1371
- asset.id = cache.searchForField(
1372
- 'asset',
1373
- asset.r__asset_key,
1374
- 'customerKey',
1375
- 'id'
1376
- );
1377
- asset.objectID = cache.searchForField(
1378
- 'asset',
1379
- asset.r__asset_key,
1380
- 'customerKey',
1381
- 'objectID'
1382
- );
1383
- delete asset.r__asset_key;
1384
- asset.thumbnail = {
1385
- thumbnailUrl: '/v1/assets/' + asset.id + '/thumbnail',
1386
- };
1387
- }
1388
- if (asset.r__folder_Path) {
1389
- // if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
1390
- delete asset.r__folder_Path;
1391
- }
1392
- await this._preDeployTasksBocks(asset);
1393
- }
1467
+ if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
1468
+ continue;
1469
+ }
1470
+
1471
+ const slotObj = metadataSlots[slot];
1472
+ // found slot
1473
+ if (slotObj.blocks) {
1474
+ for (const block in slotObj.blocks) {
1475
+ if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
1476
+ continue;
1477
+ }
1478
+
1479
+ const asset = slotObj.blocks[block];
1480
+ if (asset.r__asset_key) {
1481
+ // by only running the following if r__asset_key was set, we simply skip anything that wasnt resolved during retrieve
1482
+ asset.customerKey = asset.r__asset_key;
1483
+ asset.id = cache.searchForField(
1484
+ 'asset',
1485
+ asset.r__asset_key,
1486
+ 'customerKey',
1487
+ 'id'
1488
+ );
1489
+ asset.objectID = cache.searchForField(
1490
+ 'asset',
1491
+ asset.r__asset_key,
1492
+ 'customerKey',
1493
+ 'objectID'
1494
+ );
1495
+ delete asset.r__asset_key;
1496
+ asset.thumbnail = {
1497
+ thumbnailUrl: '/v1/assets/' + asset.id + '/thumbnail',
1498
+ };
1499
+ }
1500
+ if (asset.r__folder_Path) {
1501
+ // if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
1502
+ delete asset.r__folder_Path;
1394
1503
  }
1504
+ await this._preDeployTasksBocks(asset);
1395
1505
  }
1396
1506
  }
1397
1507
  }
@@ -1416,9 +1526,41 @@ class Asset extends MetadataType {
1416
1526
  const customerKey = metadata.customerKey.trim();
1417
1527
  const templateFileName = templateName || customerKey;
1418
1528
  switch (metadata.assetType.name) {
1419
- case 'templatebasedemail': // message
1529
+ case 'jsonmessage': {
1530
+ subDirArr = [this.definition.type, subType, templateFileName.trim()];
1531
+ readDirArr = [deployDir, ...subDirArr];
1532
+ for (const { field, companion, data } of this._getMobileCodeFields(metadata)) {
1533
+ const fileName = `${field.replaceAll(':', '_')}${subtypeExtension}`;
1534
+ const path = File.normalizePath([
1535
+ ...readDirArr,
1536
+ File.filterIllegalFilenames(`${fileName}.amp`),
1537
+ ]);
1538
+ if (!(await File.pathExists(path))) {
1539
+ if (!fileListOnly) {
1540
+ // Missing source is not an explicitly empty sidecar.
1541
+ delete data[field];
1542
+ delete data[companion];
1543
+ }
1544
+ continue;
1545
+ }
1546
+
1547
+ if (!fileListOnly) {
1548
+ data[field] = await File.readFilteredFilename(readDirArr, fileName, 'amp');
1549
+ // The sidecar is authoritative for both duplicate source fields.
1550
+ data[companion] = data[field];
1551
+ }
1552
+ fileList.push({
1553
+ subFolder: subDirArr,
1554
+ fileName,
1555
+ fileExt: 'amp',
1556
+ content: data[field],
1557
+ });
1558
+ }
1559
+ break;
1560
+ }
1561
+ case 'templatebasedemail': // email
1420
1562
  case 'htmlemail': {
1421
- // message
1563
+ // email
1422
1564
  // this complex type always creates its own subdir per asset
1423
1565
  subDirArr = [this.definition.type, subType];
1424
1566
  readDirArr = [deployDir, ...subDirArr, templateFileName];
@@ -1586,7 +1728,7 @@ class Asset extends MetadataType {
1586
1728
  break;
1587
1729
  }
1588
1730
  case 'textonlyemail': {
1589
- // message
1731
+ // email
1590
1732
  // metadata.views.text.content
1591
1733
  subDirArr = [this.definition.type, subType];
1592
1734
  readDirArr = [deployDir, ...subDirArr];
@@ -1792,70 +1934,70 @@ class Asset extends MetadataType {
1792
1934
  const templateFileName = templateName || customerKey;
1793
1935
 
1794
1936
  for (const slot in metadataSlots) {
1795
- if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
1796
- const slotObj = metadataSlots[slot];
1797
- // found slot
1798
- if (slotObj.blocks) {
1799
- for (const block in slotObj.blocks) {
1800
- if (Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
1801
- const asset = slotObj.blocks[block];
1802
- const fileName = `${prefix}.[${slot}-${block}]${subtypeExtension}`;
1803
- if (
1804
- await File.pathExists(
1805
- File.normalizePath([
1806
- ...readDirArr,
1807
- 'blocks',
1808
- `${fileName}.html`,
1809
- ])
1810
- )
1811
- ) {
1812
- // the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs
1813
- // if an extracted block was found, save it back into JSON
1814
- if (!fileListOnly) {
1815
- asset.content = await File.readFilteredFilename(
1816
- [...readDirArr, 'blocks'],
1817
- fileName,
1818
- 'html'
1819
- );
1820
- }
1821
- if (templateName) {
1822
- // to use this method in templating, store a copy of the info in fileList
1823
- fileList.push({
1824
- subFolder: [...subDirArr, templateFileName, 'blocks'],
1825
- fileName: fileName,
1826
- fileExt: 'html',
1827
- content: asset.content,
1828
- });
1829
- }
1830
- }
1831
- if (asset.slots) {
1832
- // * recursion: each block can have slots of its own
1833
- await this._mergeCode_slots(
1834
- `${prefix}.[${slot}-${block}]`,
1835
- asset.slots,
1836
- readDirArr,
1837
- subtypeExtension,
1838
- subDirArr,
1839
- fileList,
1840
- customerKey,
1841
- templateName,
1842
- fileListOnly
1843
- );
1844
- } else if (asset?.views?.html?.slots) {
1845
- // * recursion: each block can have slots of its own
1846
- await this._mergeCode_slots(
1847
- `${prefix}.[${slot}-${block}]`,
1848
- asset.views.html.slots,
1849
- readDirArr,
1850
- subtypeExtension,
1851
- subDirArr,
1852
- fileList,
1853
- customerKey,
1854
- templateName,
1855
- fileListOnly
1856
- );
1857
- }
1937
+ if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
1938
+ continue;
1939
+ }
1940
+
1941
+ const slotObj = metadataSlots[slot];
1942
+ // found slot
1943
+ if (slotObj.blocks) {
1944
+ for (const block in slotObj.blocks) {
1945
+ if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
1946
+ continue;
1947
+ }
1948
+
1949
+ const asset = slotObj.blocks[block];
1950
+ const fileName = `${prefix}.[${slot}-${block}]${subtypeExtension}`;
1951
+ if (
1952
+ await File.pathExists(
1953
+ File.normalizePath([...readDirArr, 'blocks', `${fileName}.html`])
1954
+ )
1955
+ ) {
1956
+ // the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs
1957
+ // if an extracted block was found, save it back into JSON
1958
+ if (!fileListOnly) {
1959
+ asset.content = await File.readFilteredFilename(
1960
+ [...readDirArr, 'blocks'],
1961
+ fileName,
1962
+ 'html'
1963
+ );
1858
1964
  }
1965
+ if (templateName) {
1966
+ // to use this method in templating, store a copy of the info in fileList
1967
+ fileList.push({
1968
+ subFolder: [...subDirArr, templateFileName, 'blocks'],
1969
+ fileName: fileName,
1970
+ fileExt: 'html',
1971
+ content: asset.content,
1972
+ });
1973
+ }
1974
+ }
1975
+ if (asset.slots) {
1976
+ // * recursion: each block can have slots of its own
1977
+ await this._mergeCode_slots(
1978
+ `${prefix}.[${slot}-${block}]`,
1979
+ asset.slots,
1980
+ readDirArr,
1981
+ subtypeExtension,
1982
+ subDirArr,
1983
+ fileList,
1984
+ customerKey,
1985
+ templateName,
1986
+ fileListOnly
1987
+ );
1988
+ } else if (asset?.views?.html?.slots) {
1989
+ // * recursion: each block can have slots of its own
1990
+ await this._mergeCode_slots(
1991
+ `${prefix}.[${slot}-${block}]`,
1992
+ asset.views.html.slots,
1993
+ readDirArr,
1994
+ subtypeExtension,
1995
+ subDirArr,
1996
+ fileList,
1997
+ customerKey,
1998
+ templateName,
1999
+ fileListOnly
2000
+ );
1859
2001
  }
1860
2002
  }
1861
2003
  }
@@ -1867,7 +2009,299 @@ class Asset extends MetadataType {
1867
2009
  * to allow saving that separately and formatted
1868
2010
  *
1869
2011
  * @param {AssetItem} metadata a single asset definition
1870
- * @returns {CodeExtractItem} { json: metadata, codeArr: object[], subFolder: string[] }
2012
+ * @returns {{channel: 'push' | 'sms' | 'inApp', field: 'display:title' | 'display:message', companion: 'display:title:display' | 'display:message:display', data: object}[]} editable mobile fields
2013
+ */
2014
+ static _getMobileCodeFields(metadata) {
2015
+ /** @type {{channel: 'push' | 'sms' | 'inApp', field: 'display:title' | 'display:message', companion: 'display:title:display' | 'display:message:display', data: object}[]} */
2016
+ const fields = [];
2017
+ // Only real message source is editable; views.<channel>.content is generated preview HTML.
2018
+ // Keep the allowlist narrow: push/inApp title/message and SMS message, not UI options.
2019
+ const channels = /** @type {const} */ (['push', 'sms', 'inApp']);
2020
+ if (
2021
+ channels.filter((channel) => metadata.views?.[channel]?.meta?.options?.customBlockData)
2022
+ .length > 1
2023
+ ) {
2024
+ throw new TypeError('Cannot process mobile source with multiple supported channels');
2025
+ }
2026
+ for (const channel of channels) {
2027
+ const data = metadata.views?.[channel]?.meta?.options?.customBlockData;
2028
+ if (data) {
2029
+ for (const field of channel === 'sms'
2030
+ ? /** @type {const} */ (['display:message'])
2031
+ : /** @type {const} */ (['display:title', 'display:message'])) {
2032
+ fields.push({ channel, field, companion: `${field}:display`, data });
2033
+ }
2034
+ }
2035
+ }
2036
+ return fields;
2037
+ }
2038
+
2039
+ /**
2040
+ * Escape literal mobile source for an existing HTML text slot, without rendering it.
2041
+ *
2042
+ * @param {string} value source text
2043
+ * @returns {string} escaped text
2044
+ */
2045
+ static _escapeMobilePreview(value) {
2046
+ return value
2047
+ .replaceAll('&', '&amp;')
2048
+ .replaceAll('<', '&lt;')
2049
+ .replaceAll('>', '&gt;')
2050
+ .replaceAll('"', '&quot;')
2051
+ .replaceAll("'", '&#39;');
2052
+ }
2053
+
2054
+ /**
2055
+ * Escape a URL for the generated unquoted CSS url slot, including HTML style boundaries.
2056
+ *
2057
+ * @param {string} value source URL
2058
+ * @returns {string} escaped CSS URL
2059
+ */
2060
+ static _escapeMobilePreviewUrl(value) {
2061
+ return value.replaceAll(
2062
+ /[\s()"'\\<>]/g,
2063
+ (char) => `\\${char.codePointAt(0).toString(16)} `
2064
+ );
2065
+ }
2066
+
2067
+ /**
2068
+ * Tokenize only known, source-equal mobile preview text slots before extracting source.
2069
+ *
2070
+ * @param {AssetItem} metadata asset with inline source
2071
+ * @returns {void} -
2072
+ */
2073
+ static _tokenizeMobilePreview(metadata) {
2074
+ for (const channel of /** @type {const} */ (['push', 'sms', 'inApp'])) {
2075
+ const view = metadata.views?.[channel];
2076
+ const data = view?.meta?.options?.customBlockData;
2077
+ if (typeof view?.content !== 'string' || !data) {
2078
+ continue;
2079
+ }
2080
+ const replaceSlot = (slot, field, context) => {
2081
+ const value = data[field];
2082
+ if (typeof value !== 'string' || !value) {
2083
+ return slot;
2084
+ }
2085
+ const escaped =
2086
+ context === 'url'
2087
+ ? this._escapeMobilePreviewUrl(value)
2088
+ : this._escapeMobilePreview(value);
2089
+ // Field identity keeps equal title/message source independently editable.
2090
+ return context
2091
+ ? this._replaceMobilePreviewPadding(slot, escaped, `[[[${field}]]]`)
2092
+ : slot === escaped
2093
+ ? `[[[${field}]]]`
2094
+ : slot;
2095
+ };
2096
+ view.content = this._replaceMobilePreviewSlots(view.content, channel, replaceSlot);
2097
+ }
2098
+ }
2099
+
2100
+ /**
2101
+ * Replace an exact source value with whitespace allowed only outside that value.
2102
+ *
2103
+ * @param {string} slot complete preview slot
2104
+ * @param {string} source escaped source or field token
2105
+ * @param {string} replacement updated slot value
2106
+ * @returns {string} slot with external padding preserved
2107
+ */
2108
+ static _replaceMobilePreviewPadding(slot, source, replacement) {
2109
+ const start = slot.indexOf(source);
2110
+ if (start === -1) {
2111
+ return slot;
2112
+ }
2113
+ const before = slot.slice(0, start);
2114
+ const after = slot.slice(start + source.length);
2115
+ return /^\s*$/.test(before) && /^\s*$/.test(after) ? before + replacement + after : slot;
2116
+ }
2117
+
2118
+ /**
2119
+ * Replace text only in recognized mobile preview slots, preserving wrapper bytes.
2120
+ *
2121
+ * @param {string} content preview HTML
2122
+ * @param {'push' | 'sms' | 'inApp'} channel mobile view
2123
+ * @param {(text: string, field: 'display:title' | 'display:subtitle' | 'display:message' | 'button1:title' | 'button2:title' | 'display:media:url', context?: 'url' | 'padded') => string} replaceSlot slot replacement
2124
+ * @returns {string} updated HTML
2125
+ */
2126
+ static _replaceMobilePreviewSlots(content, channel, replaceSlot) {
2127
+ // Consume comments as opaque matches so apparent slots inside them remain untouched.
2128
+ if (channel === 'inApp') {
2129
+ // One pass over original wrappers: inserted source is never visited as another slot.
2130
+ return content.replaceAll(
2131
+ /<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|(<style\b[^>]*>)([\s\S]*?)(<\/style\s*>)|(<header\b(?:[^>"']|"[^"]*"|'[^']*')*>\s*<h1\b[^>]*>)([^<]*)(<\/h1\s*>\s*<\/header\s*>)|(<(?:p|button)\b(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/(?:p|button)\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
2132
+ (
2133
+ match,
2134
+ styleOpen,
2135
+ css,
2136
+ styleClose,
2137
+ header,
2138
+ title,
2139
+ headerClose,
2140
+ open,
2141
+ text,
2142
+ close
2143
+ ) => {
2144
+ if (styleOpen) {
2145
+ return (
2146
+ styleOpen +
2147
+ css.replaceAll(
2148
+ /((?:^|[{}])(?:\s|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*)(\.jmb-image\s*\{(?:[^{}/]|\/(?!\*)|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*\})|(\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)/g,
2149
+ (rule, prefix, block, comment) =>
2150
+ comment
2151
+ ? rule
2152
+ : prefix +
2153
+ block.replaceAll(
2154
+ /\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/|([{;](?:\s|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*background(?:-image)?\s*:\s*url\()([^()]*)(\))/g,
2155
+ (url, before, value, after) =>
2156
+ before
2157
+ ? before +
2158
+ replaceSlot(
2159
+ value,
2160
+ 'display:media:url',
2161
+ 'url'
2162
+ ) +
2163
+ after
2164
+ : url
2165
+ )
2166
+ ) +
2167
+ styleClose
2168
+ );
2169
+ }
2170
+ const attributes = [
2171
+ ...(header || open || '').matchAll(/\s([\w:-]+)\s*=\s*(["'])(.*?)\2/gs),
2172
+ ];
2173
+ const classes =
2174
+ attributes
2175
+ .find((attribute) => attribute[1].toLowerCase() === 'class')?.[3]
2176
+ .split(/\s+/) || [];
2177
+ if (header) {
2178
+ return classes.includes('jmb-header')
2179
+ ? header + replaceSlot(title, 'display:title') + headerClose
2180
+ : match;
2181
+ }
2182
+ if (!open) {
2183
+ return match;
2184
+ }
2185
+ if (/^<p\b/i.test(open) && classes.includes('jmb-message')) {
2186
+ return open + replaceSlot(text, 'display:message') + close;
2187
+ }
2188
+ const buttons = classes.filter((name) =>
2189
+ ['jmb-button-1', 'jmb-button-2'].includes(name)
2190
+ );
2191
+ if (!/^<button\b/i.test(open) || buttons.length !== 1) {
2192
+ return match;
2193
+ }
2194
+ const field = /** @type {'button1:title' | 'button2:title'} */ (
2195
+ `button${buttons[0].at(-1)}:title`
2196
+ );
2197
+ return (
2198
+ open.replaceAll(
2199
+ /(\s([\w:-]+)\s*=\s*)(["'])(.*?)\3/gs,
2200
+ (attribute, before, name, quote, value) =>
2201
+ name.toLowerCase() === 'title'
2202
+ ? before + quote + replaceSlot(value, field) + quote
2203
+ : attribute
2204
+ ) +
2205
+ replaceSlot(text, field, 'padded') +
2206
+ close
2207
+ );
2208
+ }
2209
+ );
2210
+ }
2211
+ if (channel === 'push') {
2212
+ // Match text-only divs with an exact class-list member, retaining every wrapper byte.
2213
+ return content.replaceAll(
2214
+ /<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|<style\b[^>]*>[\s\S]*?<\/style\s*>|(<div\b(?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(["'])([^"']*)\2(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/div\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
2215
+ (match, open, quote, classes, text, close) => {
2216
+ if (!open) {
2217
+ return match;
2218
+ }
2219
+ const fields = classes
2220
+ .split(/\s+/)
2221
+ .filter((name) => ['title', 'subtitle', 'message'].includes(name));
2222
+ return fields.length === 1
2223
+ ? open +
2224
+ replaceSlot(
2225
+ text,
2226
+ /** @type {'display:title' | 'display:subtitle' | 'display:message'} */ (
2227
+ `display:${fields[0]}`
2228
+ )
2229
+ ) +
2230
+ close
2231
+ : match;
2232
+ }
2233
+ );
2234
+ }
2235
+ // SMS embeds its message in a span inside the generated text-bubble div.
2236
+ return content.replaceAll(
2237
+ /<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|<style\b[^>]*>[\s\S]*?<\/style\s*>|(<div\b(?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(["'])([^"']*)\2(?:[^>"']|"[^"]*"|'[^']*')*>\s*<span\b(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/span\s*>\s*<\/div\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
2238
+ (match, open, quote, classes, text, close) =>
2239
+ open && classes.split(/\s+/).includes('text-bubble')
2240
+ ? open + replaceSlot(text, 'display:message') + close
2241
+ : match
2242
+ );
2243
+ }
2244
+
2245
+ /**
2246
+ * Restore mapped preview slots after final source merging, never during Mustache builds.
2247
+ *
2248
+ * @param {AssetItem} metadata asset with merged source
2249
+ * @returns {void} -
2250
+ */
2251
+ static _restoreMobilePreview(metadata) {
2252
+ if (metadata.assetType.name !== 'jsonmessage') {
2253
+ return;
2254
+ }
2255
+ for (const channel of /** @type {const} */ (['push', 'sms', 'inApp'])) {
2256
+ const view = metadata.views?.[channel];
2257
+ const data = view?.meta?.options?.customBlockData;
2258
+ if (typeof view?.content !== 'string' || !data) {
2259
+ continue;
2260
+ }
2261
+ // One slot pass cannot rescan placeholder-like source inserted by another slot.
2262
+ view.content = this._replaceMobilePreviewSlots(
2263
+ view.content,
2264
+ channel,
2265
+ (text, field, context) => {
2266
+ const token = `[[[${field}]]]`;
2267
+ if (
2268
+ context
2269
+ ? this._replaceMobilePreviewPadding(text, token, '') === text
2270
+ : text !== token
2271
+ ) {
2272
+ return text;
2273
+ }
2274
+ let value = data[field];
2275
+ if (typeof value !== 'string') {
2276
+ // Only extracted title/message source can be absent after merging.
2277
+ if (
2278
+ this._getMobileCodeFields(metadata).every(
2279
+ (source) => !(source.channel === channel && source.field === field)
2280
+ )
2281
+ ) {
2282
+ throw new TypeError(
2283
+ `Missing mobile preview source: ${channel}.${field}`
2284
+ );
2285
+ }
2286
+ value = '';
2287
+ }
2288
+ const escaped =
2289
+ context === 'url'
2290
+ ? this._escapeMobilePreviewUrl(value)
2291
+ : this._escapeMobilePreview(value);
2292
+ return context
2293
+ ? this._replaceMobilePreviewPadding(text, token, escaped)
2294
+ : escaped;
2295
+ }
2296
+ );
2297
+ }
2298
+ }
2299
+
2300
+ /**
2301
+ * Extract editable source into sidecars.
2302
+ *
2303
+ * @param {AssetItem} metadata a single asset definition
2304
+ * @returns {CodeExtractItem} extracted source and JSON
1871
2305
  */
1872
2306
  static _extractCode(metadata) {
1873
2307
  const codeArr = [];
@@ -1875,9 +2309,33 @@ class Asset extends MetadataType {
1875
2309
  // unfortunately, asset's key can contain spaces at beginning/end which can break the file system when folders are created with it
1876
2310
  const customerKey = metadata.customerKey.trim();
1877
2311
  switch (metadata.assetType.name) {
1878
- case 'templatebasedemail': // message-templatebasedemail
2312
+ case 'jsonmessage': {
2313
+ const fields = this._getMobileCodeFields(metadata);
2314
+ this._tokenizeMobilePreview(metadata);
2315
+ for (const { field, companion, data } of fields) {
2316
+ // Empty and plain strings are source too, matching the same editable file layout.
2317
+ if (typeof data[field] !== 'string') {
2318
+ continue;
2319
+ }
2320
+ codeArr.push({
2321
+ subFolder: null,
2322
+ fileName: `${field.replaceAll(':', '_')}`,
2323
+ fileExt: 'amp',
2324
+ content: data[field],
2325
+ });
2326
+ // Keep a single editable source; deployment normalizes the duplicate field.
2327
+ delete data[companion];
2328
+ delete data[field];
2329
+ }
2330
+ return {
2331
+ json: metadata,
2332
+ codeArr,
2333
+ subFolder: codeArr.length ? [customerKey] : null,
2334
+ };
2335
+ }
2336
+ case 'templatebasedemail': // email-templatebasedemail
1879
2337
  case 'htmlemail': {
1880
- // message-htmlemail
2338
+ // email-htmlemail
1881
2339
  // metadata.views.html.content (mandatory)
1882
2340
  if (metadata.views?.html?.content?.length) {
1883
2341
  codeArr.push({
@@ -1946,7 +2404,7 @@ class Asset extends MetadataType {
1946
2404
  };
1947
2405
  }
1948
2406
  case 'textonlyemail': {
1949
- // message-textonlyemail
2407
+ // email-textonlyemail
1950
2408
  // metadata.views.text.content
1951
2409
  if (metadata.views?.text?.content?.length) {
1952
2410
  codeArr.push({
@@ -2077,58 +2535,58 @@ class Asset extends MetadataType {
2077
2535
  */
2078
2536
  static _extractCode_slots(prefix, metadataSlots, codeArr) {
2079
2537
  for (const slot in metadataSlots) {
2080
- if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
2081
- const slotObj = metadataSlots[slot];
2082
- // found slot
2083
- for (const block in slotObj.blocks) {
2084
- if (Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
2085
- const asset = slotObj.blocks[block];
2086
- if (asset.content) {
2087
- // found content block
2088
- const code = asset.content;
2089
- codeArr.push({
2090
- subFolder: ['blocks'],
2091
- fileName: `${prefix}.[${slot}-${block}]`,
2092
- fileExt: 'html',
2093
- content: code,
2094
- });
2095
- delete asset.content;
2096
- }
2097
- // clean up fields from the other content block
2098
- if (asset.id) {
2099
- try {
2100
- asset.r__asset_key = cache.searchForField(
2101
- 'asset',
2102
- asset.id,
2103
- 'id',
2104
- 'customerKey'
2105
- );
2106
- // only delete this if we found the asset in cache, otherwise ignore
2107
- delete asset.id;
2108
- delete asset.objectID;
2109
- delete asset.customerKey;
2110
- delete asset.thumbnail;
2111
- } catch {
2112
- Util.logger.debug(
2113
- ` - asset id:${asset.id} / key:${asset.customerKey} / name:${asset.name} not found in cache`
2114
- );
2115
- }
2116
- }
2117
- if (asset.category?.id) {
2118
- // if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
2119
- delete asset.category;
2120
- }
2538
+ if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
2539
+ continue;
2540
+ }
2121
2541
 
2122
- if (asset.slots) {
2123
- // * recursion: each block can have slots of its own
2124
- this._extractCode_slots(
2125
- `${prefix}.[${slot}-${block}]`,
2126
- asset.slots,
2127
- codeArr
2128
- );
2129
- }
2542
+ const slotObj = metadataSlots[slot];
2543
+ // found slot
2544
+ for (const block in slotObj.blocks) {
2545
+ if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
2546
+ continue;
2547
+ }
2548
+
2549
+ const asset = slotObj.blocks[block];
2550
+ if (asset.content) {
2551
+ // found content block
2552
+ const code = asset.content;
2553
+ codeArr.push({
2554
+ subFolder: ['blocks'],
2555
+ fileName: `${prefix}.[${slot}-${block}]`,
2556
+ fileExt: 'html',
2557
+ content: code,
2558
+ });
2559
+ delete asset.content;
2560
+ }
2561
+ // clean up fields from the other content block
2562
+ if (asset.id) {
2563
+ try {
2564
+ asset.r__asset_key = cache.searchForField(
2565
+ 'asset',
2566
+ asset.id,
2567
+ 'id',
2568
+ 'customerKey'
2569
+ );
2570
+ // only delete this if we found the asset in cache, otherwise ignore
2571
+ delete asset.id;
2572
+ delete asset.objectID;
2573
+ delete asset.customerKey;
2574
+ delete asset.thumbnail;
2575
+ } catch {
2576
+ Util.logger.debug(
2577
+ ` - asset id:${asset.id} / key:${asset.customerKey} / name:${asset.name} not found in cache`
2578
+ );
2130
2579
  }
2131
2580
  }
2581
+ if (asset.category?.id) {
2582
+ // if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
2583
+ delete asset.category;
2584
+ }
2585
+
2586
+ if (asset.slots) {
2587
+ // * recursion: each block can have slots of its own
2588
+ this._extractCode_slots(`${prefix}.[${slot}-${block}]`, asset.slots, codeArr);
2589
+ }
2132
2590
  }
2133
2591
  }
2134
2592
  }
@@ -2138,7 +2596,7 @@ class Asset extends MetadataType {
2138
2596
  *
2139
2597
  * @param {string} dir directory with json files, e.g. /retrieve/cred/bu/asset, /deploy/cred/bu/asset, /template/asset
2140
2598
  * @param {boolean} [_] unused parameter
2141
- * @param {string[]} [selectedSubType] asset, message, ...
2599
+ * @param {string[]} [selectedSubType] asset, email, ...
2142
2600
  * @returns {Promise.<MetadataTypeMap>} fileName => fileContent map
2143
2601
  */
2144
2602
  static async getJsonFromFS(dir, _, selectedSubType) {
@@ -2171,52 +2629,54 @@ class Asset extends MetadataType {
2171
2629
  * @param {MetadataTypeMap} fileName2FileContent fileName => fileContent map
2172
2630
  */
2173
2631
  static async _getJsonFromFS(currentdir, subtype, fileName2FileContent) {
2174
- if (await File.pathExists(currentdir)) {
2175
- const fileEnding = `.asset-${subtype}-meta.json`;
2176
- const fileEndingLength = fileEnding.length;
2177
- const files = await File.readdir(currentdir, { withFileTypes: true });
2178
- for (const dirent of files) {
2179
- const fileName = dirent.name;
2180
- try {
2181
- if (dirent.isDirectory()) {
2182
- await this._getJsonFromFS(
2183
- File.normalizePath([currentdir, fileName]),
2184
- subtype,
2185
- fileName2FileContent
2632
+ if (!(await File.pathExists(currentdir))) {
2633
+ return;
2634
+ }
2635
+
2636
+ const fileEnding = `.asset-${subtype}-meta.json`;
2637
+ const fileEndingLength = fileEnding.length;
2638
+ const files = await File.readdir(currentdir, { withFileTypes: true });
2639
+ for (const dirent of files) {
2640
+ const fileName = dirent.name;
2641
+ try {
2642
+ if (dirent.isDirectory()) {
2643
+ await this._getJsonFromFS(
2644
+ File.normalizePath([currentdir, fileName]),
2645
+ subtype,
2646
+ fileName2FileContent
2647
+ );
2648
+ } else if (fileName.endsWith('.json')) {
2649
+ const errorDir = currentdir.replaceAll('\\', '/');
2650
+ const fileContent = await File.readJSONFile(currentdir, fileName, false);
2651
+ // ! convert numbers to string to allow numeric keys to be checked properly
2652
+ const key = Number.isInteger(fileContent[this.definition.keyField])
2653
+ ? fileContent[this.definition.keyField].toString()
2654
+ : fileContent[this.definition.keyField];
2655
+ if (fileName.endsWith(fileEnding)) {
2656
+ // subtype will change the metadata suffix length
2657
+ const fileNameWithoutEnding = File.reverseFilterIllegalFilenames(
2658
+ fileName.slice(0, -fileEndingLength)
2186
2659
  );
2187
- } else if (fileName.endsWith('.json')) {
2188
- const errorDir = currentdir.split('\\').join('/');
2189
- const fileContent = await File.readJSONFile(currentdir, fileName, false);
2190
- // ! convert numbers to string to allow numeric keys to be checked properly
2191
- const key = Number.isInteger(fileContent[this.definition.keyField])
2192
- ? fileContent[this.definition.keyField].toString()
2193
- : fileContent[this.definition.keyField];
2194
- if (fileName.endsWith(fileEnding)) {
2195
- // subtype will change the metadata suffix length
2196
- const fileNameWithoutEnding = File.reverseFilterIllegalFilenames(
2197
- fileName.slice(0, -fileEndingLength)
2198
- );
2199
- if (key === fileNameWithoutEnding) {
2200
- fileName2FileContent[fileNameWithoutEnding] = fileContent;
2201
- } else {
2202
- Util.logger.error(
2203
- ` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file and the JSON-key (${this.definition.keyField}) must match. Expected: ${key}${fileEnding}. Actual: ` +
2204
- Util.getGrayMsg(`${errorDir}/`) +
2205
- fileName
2206
- );
2207
- }
2660
+ if (key === fileNameWithoutEnding) {
2661
+ fileName2FileContent[fileNameWithoutEnding] = fileContent;
2208
2662
  } else {
2209
2663
  Util.logger.error(
2210
- ` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file must end on the extended metadata suffix. Expected: ${key}${fileEnding}. Actual: ` +
2664
+ ` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file and the JSON-key (${this.definition.keyField}) must match. Expected: ${key}${fileEnding}. Actual: ` +
2211
2665
  Util.getGrayMsg(`${errorDir}/`) +
2212
2666
  fileName
2213
2667
  );
2214
2668
  }
2669
+ } else {
2670
+ Util.logger.error(
2671
+ ` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file must end on the extended metadata suffix. Expected: ${key}${fileEnding}. Actual: ` +
2672
+ Util.getGrayMsg(`${errorDir}/`) +
2673
+ fileName
2674
+ );
2215
2675
  }
2216
- } catch (ex) {
2217
- // by catching this in the loop we gracefully handle the issue and move on to the next file
2218
- Util.metadataLogger('debug', this.definition.type, 'getJsonFromFS', ex);
2219
2676
  }
2677
+ } catch (ex) {
2678
+ // by catching this in the loop we gracefully handle the issue and move on to the next file
2679
+ Util.metadataLogger('debug', this.definition.type, 'getJsonFromFS', ex);
2220
2680
  }
2221
2681
  }
2222
2682
  }
@@ -2316,14 +2776,25 @@ class Asset extends MetadataType {
2316
2776
  ) {
2317
2777
  // #1 load json to be able to find extracted text files & binary files
2318
2778
  const metadata = await File.readJSONFile(filePath, fileName, false);
2779
+ if (!metadata) {
2780
+ throw new Error(
2781
+ `Cannot discover associated asset files: invalid JSON in ${File.normalizePath([...filePath, fileName])}`
2782
+ );
2783
+ }
2319
2784
  // #2 find all extracted text files
2320
2785
  const fileListNested = (
2321
- await this._mergeCode(metadata, basePath, subType, metadata.customerKey)
2786
+ await this._mergeCode(
2787
+ metadata,
2788
+ basePath,
2789
+ subType,
2790
+ metadata.customerKey,
2791
+ true
2792
+ )
2322
2793
  ).map((item) =>
2323
2794
  File.normalizePath([
2324
2795
  basePath,
2325
2796
  ...item.subFolder,
2326
- `${item.fileName}.${item.fileExt}`,
2797
+ File.filterIllegalFilenames(`${item.fileName}.${item.fileExt}`),
2327
2798
  ])
2328
2799
  );
2329
2800
  // ensure we dont overlook other versions when using this logic to auto-delete older files
@@ -2605,7 +3076,6 @@ class Asset extends MetadataType {
2605
3076
  `404. Try running mcdev r ${this.buObject.credential}/${ownerBUName} ${this.definition.type}-${subType} ${item[this.definition.keyField]}`)
2606
3077
  );
2607
3078
  }
2608
- return json;
2609
3079
  } else {
2610
3080
  json.error = 'id not found';
2611
3081
  delete json.key;
@@ -2621,8 +3091,8 @@ class Asset extends MetadataType {
2621
3091
  return json;
2622
3092
  }
2623
3093
  Util.logger.error(` - ${this.definition.type} with id ${id} not found on BU`);
2624
- return json;
2625
3094
  }
3095
+ return json;
2626
3096
  }
2627
3097
 
2628
3098
  /**
@@ -2692,7 +3162,7 @@ class Asset extends MetadataType {
2692
3162
  const subType = this.#getMainSubtype(item.assetType.name);
2693
3163
  /** @type {CodeExtract[]} */
2694
3164
  const fileList = await this._mergeCode(
2695
- item,
3165
+ structuredClone(item),
2696
3166
  retrieveDir,
2697
3167
  subType,
2698
3168
  item[this.definition.keyField],
@@ -2714,10 +3184,42 @@ class Asset extends MetadataType {
2714
3184
  }
2715
3185
  }
2716
3186
  }
3187
+ // Inline companions without a canonical sidecar still participate in reference replacement.
3188
+ let companionsChanged = false;
3189
+ if (item.assetType.name === 'jsonmessage') {
3190
+ for (const { field, companion: alias, data } of this._getMobileCodeFields(
3191
+ responseItem
3192
+ )) {
3193
+ if (
3194
+ fileList.some((file) =>
3195
+ file.fileName.startsWith(`${field.replaceAll(':', '_')}.`)
3196
+ ) ||
3197
+ typeof data[alias] !== 'string'
3198
+ ) {
3199
+ continue;
3200
+ }
3201
+ try {
3202
+ const content = ReplaceCbReference.replaceReference(
3203
+ data[alias],
3204
+ parentName,
3205
+ findAssetKeys
3206
+ );
3207
+ if (!findAssetKeys) {
3208
+ data[alias] = content;
3209
+ companionsChanged = true;
3210
+ }
3211
+ changes = true;
3212
+ } catch (ex) {
3213
+ if (ex.code !== 200) {
3214
+ error = ex;
3215
+ }
3216
+ }
3217
+ }
3218
+ }
2717
3219
  if (!findAssetKeys) {
2718
3220
  // save what was changed regardless of other errors
2719
3221
  for (const extractedFile of fileListChanged) {
2720
- File.writeToFile(
3222
+ await File.writeToFile(
2721
3223
  [retrieveDir, ...extractedFile.subFolder],
2722
3224
  extractedFile.fileName,
2723
3225
  extractedFile.fileExt,
@@ -2725,6 +3227,18 @@ class Asset extends MetadataType {
2725
3227
  extractedFile.encoding || null
2726
3228
  );
2727
3229
  }
3230
+ if (companionsChanged) {
3231
+ // Asset's replacement loop deliberately skips saveToDisk to preserve extracts.
3232
+ const customerKey = item[this.definition.keyField].trim();
3233
+ const fileName = `${customerKey}.${this.definition.type}-${subType}-meta`;
3234
+ const baseDir = [retrieveDir, this.definition.type, subType];
3235
+ const jsonDir = (await File.pathExists(
3236
+ File.normalizePath([...baseDir, customerKey, `${fileName}.json`])
3237
+ ))
3238
+ ? [...baseDir, customerKey]
3239
+ : baseDir;
3240
+ await File.writeJSONToFile(jsonDir, fileName, responseItem);
3241
+ }
2728
3242
  }
2729
3243
 
2730
3244
  if (error) {
@@ -2847,10 +3361,12 @@ class Asset extends MetadataType {
2847
3361
  if (newKeysFound.size) {
2848
3362
  const keysToCrawl = [];
2849
3363
  for (const value of newKeysFound) {
2850
- if (!keyArr.includes(value)) {
2851
- keyArr.push(value);
2852
- keysToCrawl.push(value);
3364
+ if (keyArr.includes(value)) {
3365
+ continue;
2853
3366
  }
3367
+
3368
+ keyArr.push(value);
3369
+ keysToCrawl.push(value);
2854
3370
  }
2855
3371
  Util.logger.info(Util.getGrayMsg(` - asset: ${keysToCrawl.join(', ')}`));
2856
3372
 
@@ -2910,6 +3426,55 @@ class Asset extends MetadataType {
2910
3426
  }
2911
3427
  }
2912
3428
 
3429
+ /**
3430
+ * Collect content strings from an asset and its nested views, slots and blocks.
3431
+ *
3432
+ * @param {object} item asset or nested content node
3433
+ * @returns {string[]} content strings available in the query response
3434
+ */
3435
+ static _getReferenceContents(item) {
3436
+ const contents = [];
3437
+ if (typeof item?.content === 'string') {
3438
+ contents.push(item.content);
3439
+ }
3440
+ for (const field of ['views', 'slots', 'blocks']) {
3441
+ for (const child of Object.values(item?.[field] || {})) {
3442
+ contents.push(...this._getReferenceContents(child));
3443
+ }
3444
+ }
3445
+ return contents;
3446
+ }
3447
+
3448
+ /**
3449
+ * Match literal first arguments only, without evaluating dynamic expressions.
3450
+ *
3451
+ * @param {string} content asset content
3452
+ * @param {{key: Set.<string>, id: Set.<string>, name: Set.<string>}} references target identifiers
3453
+ * @returns {boolean} whether the content references a target block
3454
+ */
3455
+ static _hasLiteralBlockReference(content, references) {
3456
+ const regex =
3457
+ /(?<![\w.])(?<ssjs>Platform\.Function\.)?ContentBlockBy(?<by>Key|Id|Name)\s*\(\s*(?:"(?<double>[^"]*)"|'(?<single>[^']*)'|(?<numeric>[0-9]+))\s*(?=[,)])/gim;
3458
+ for (const match of content.matchAll(regex)) {
3459
+ const { ssjs, by, double, single, numeric } = match.groups;
3460
+ const kind = by.toLowerCase();
3461
+ if (numeric !== undefined && kind !== 'id') {
3462
+ continue;
3463
+ }
3464
+ let identifier = double ?? single ?? numeric;
3465
+ if (kind === 'id' && !/^[0-9]+$/.test(identifier)) {
3466
+ continue;
3467
+ }
3468
+ if (kind === 'name' && ssjs) {
3469
+ identifier = identifier.replaceAll('\\\\', '\\');
3470
+ }
3471
+ if (references[kind].has(identifier)) {
3472
+ return true;
3473
+ }
3474
+ }
3475
+ return false;
3476
+ }
3477
+
2913
3478
  /**
2914
3479
  * helper for {@link MetadataType.createOrUpdate}
2915
3480
  *
@@ -2980,11 +3545,97 @@ class Asset extends MetadataType {
2980
3545
  }
2981
3546
  return cacheMatchedByName;
2982
3547
  }
3548
+ /**
3549
+ * Finds emails in running journeys, filters out the ones that reference the block (if it's a block) and refreshes related TSDs
3550
+ *
3551
+ * @param {string[]} keyArr metadata keys
3552
+ * @returns {Promise.<string[]>} Returns list of keys that were refreshed
3553
+ */
3554
+ static async refresh(keyArr) {
3555
+ if (!Array.isArray(keyArr)) {
3556
+ throw new TypeError('Asset.refresh requires an explicit array of keys');
3557
+ }
3558
+ if (!keyArr.length) {
3559
+ return [];
3560
+ }
3561
+ const codeBlocks = [];
3562
+ const toPublish = [];
3563
+
3564
+ Util.logger.info(' - Caching dependent Metadata: asset');
3565
+ const assets = await this.retrieveForCache(undefined, undefined, undefined, false);
3566
+ cache.mergeMetadata('asset', assets.metadata);
3567
+
3568
+ Util.logger.info(' - Caching dependent Metadata: shared-asset');
3569
+ const sharedAssets = await this.retrieveForCache(undefined, undefined, undefined, true);
3570
+ cache.mergeMetadata('asset', sharedAssets.metadata);
3571
+
3572
+ for (const key of keyArr) {
3573
+ const item = cache.getByKey(this.definition.type, key);
3574
+ if (!item) {
3575
+ Util.logger.warn(` - Could not find asset in cache for key: ${key}, skipping`);
3576
+ continue;
3577
+ }
3578
+ if (this.definition.extendedSubTypes.email.includes(item?.assetType?.name)) {
3579
+ toPublish.push(item);
3580
+ // refreshing code blocks referenced with ContentBlockBy
3581
+ } else if (
3582
+ this.definition.extendedSubTypes.block.includes(item?.assetType?.name) ||
3583
+ this.definition.extendedSubTypes.other.includes(item?.assetType?.name)
3584
+ ) {
3585
+ codeBlocks.push(item);
3586
+ }
3587
+ }
3588
+ if (codeBlocks.length > 0) {
3589
+ if (!cache.getCache().folder) {
3590
+ // Name-based block references require local and shared Content Builder paths.
3591
+ Folder.client = this.client;
3592
+ Folder.buObject = this.buObject;
3593
+ Folder.properties = this.properties;
3594
+ const folders = await Folder.retrieveForCache(null, ['asset', 'asset-shared']);
3595
+ cache.setMetadata('folder', folders.metadata);
3596
+ }
3597
+ toPublish.push(...Object.values(await this._findEmailsUsingBlock(codeBlocks)));
3598
+ }
3599
+ Util.logger.info(
3600
+ ` - Found ${toPublish.length} assets to publish. Looking up triggered sends for the following emails: ${toPublish.map((e) => e.name)}`
3601
+ );
3602
+ return toPublish.length ? await this._refreshTriggeredSend(toPublish) : [];
3603
+ }
3604
+
3605
+ /**
3606
+ * enables metadata definitions required for sharing assets
3607
+ *
3608
+ * @param {boolean} keepSharingInfo true to enable, false to disable
3609
+ * @returns {void}
3610
+ */
3611
+ static _toggleShareAssetTemplating(keepSharingInfo) {
3612
+ const sharingProperties = [
3613
+ 'businessUnitAvailability',
3614
+ 'businessUnitAvailability.%',
3615
+ 'businessUnitAvailability[].view',
3616
+ 'businessUnitAvailability[].update',
3617
+ 'businessUnitAvailability[].delete',
3618
+ 'businessUnitAvailability[].memberId',
3619
+ 'businessUnitAvailability[].transferOwnership',
3620
+ 'sharingProperties',
3621
+ 'sharingProperties.sharedWith',
3622
+ 'sharingProperties.sharingType',
3623
+ ];
3624
+
3625
+ // the above fields are already creatable, updateable and and retrievable - but they are filtered for templating which we seek to override
3626
+ for (const property of sharingProperties) {
3627
+ this.definition.fields[property] = {
3628
+ // isCreateable: true,
3629
+ // isUpdateable: true,
3630
+ // retrieving: true,
3631
+ template: keepSharingInfo,
3632
+ };
3633
+ }
3634
+ }
2983
3635
  }
2984
3636
 
2985
3637
  // Assign definition to static attributes
2986
3638
  import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
2987
-
2988
3639
  Asset.definition = MetadataTypeDefinitions.asset;
2989
3640
 
2990
3641
  export default Asset;