mcdev 4.3.4 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.coverage-comment-template.md +20 -0
  2. package/.coverage-comment-template.svelte +178 -0
  3. package/.eslintrc.json +2 -0
  4. package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
  5. package/.github/workflows/code-test.yml +36 -0
  6. package/.github/workflows/coverage-base-update.yml +57 -0
  7. package/.github/workflows/coverage-develop-branch.yml +41 -0
  8. package/.github/workflows/coverage-main-branch.yml +41 -0
  9. package/.github/workflows/coverage.yml +77 -0
  10. package/.husky/post-checkout +1 -1
  11. package/.prettierrc +1 -1
  12. package/.vscode/extensions.json +0 -4
  13. package/boilerplate/config.json +1 -1
  14. package/boilerplate/files/.prettierrc +1 -1
  15. package/boilerplate/files/.vscode/extensions.json +1 -1
  16. package/boilerplate/forcedUpdates.json +4 -0
  17. package/docs/dist/documentation.md +1196 -430
  18. package/lib/Builder.js +6 -1
  19. package/lib/Deployer.js +30 -5
  20. package/lib/MetadataTypeDefinitions.js +8 -6
  21. package/lib/MetadataTypeInfo.js +8 -6
  22. package/lib/cli.js +54 -42
  23. package/lib/index.js +82 -8
  24. package/lib/metadataTypes/Asset.js +73 -1
  25. package/lib/metadataTypes/AttributeGroup.js +0 -1
  26. package/lib/metadataTypes/Automation.js +48 -5
  27. package/lib/metadataTypes/Campaign.js +20 -7
  28. package/lib/metadataTypes/ContentArea.js +1 -1
  29. package/lib/metadataTypes/DataExtension.js +221 -184
  30. package/lib/metadataTypes/DataExtensionField.js +12 -19
  31. package/lib/metadataTypes/DataExtensionTemplate.js +1 -1
  32. package/lib/metadataTypes/DataExtract.js +1 -1
  33. package/lib/metadataTypes/DataExtractType.js +1 -1
  34. package/lib/metadataTypes/Email.js +1 -1
  35. package/lib/metadataTypes/{EmailSendDefinition.js → EmailSend.js} +5 -5
  36. package/lib/metadataTypes/{EventDefinition.js → Event.js} +17 -35
  37. package/lib/metadataTypes/{FtpLocation.js → FileLocation.js} +2 -2
  38. package/lib/metadataTypes/FileTransfer.js +8 -7
  39. package/lib/metadataTypes/Filter.js +1 -1
  40. package/lib/metadataTypes/Folder.js +8 -3
  41. package/lib/metadataTypes/ImportFile.js +6 -6
  42. package/lib/metadataTypes/{Interaction.js → Journey.js} +311 -147
  43. package/lib/metadataTypes/List.js +2 -2
  44. package/lib/metadataTypes/MetadataType.js +318 -90
  45. package/lib/metadataTypes/MobileCode.js +0 -1
  46. package/lib/metadataTypes/MobileKeyword.js +336 -40
  47. package/lib/metadataTypes/MobileMessage.js +473 -0
  48. package/lib/metadataTypes/Query.js +114 -32
  49. package/lib/metadataTypes/Role.js +60 -21
  50. package/lib/metadataTypes/Script.js +2 -3
  51. package/lib/metadataTypes/SendClassification.js +40 -0
  52. package/lib/metadataTypes/SetDefinition.js +1 -7
  53. package/lib/metadataTypes/TransactionalEmail.js +2 -3
  54. package/lib/metadataTypes/TransactionalMessage.js +1 -2
  55. package/lib/metadataTypes/TransactionalSMS.js +8 -15
  56. package/lib/metadataTypes/{TriggeredSendDefinition.js → TriggeredSend.js} +35 -27
  57. package/lib/metadataTypes/User.js +1177 -0
  58. package/lib/metadataTypes/definitions/Asset.definition.js +1 -0
  59. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
  60. package/lib/metadataTypes/definitions/Automation.definition.js +3 -2
  61. package/lib/metadataTypes/definitions/Campaign.definition.js +79 -4
  62. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
  63. package/lib/metadataTypes/definitions/DataExtension.definition.js +2 -1
  64. package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
  65. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
  66. package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
  67. package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
  68. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
  69. package/lib/metadataTypes/definitions/Email.definition.js +1 -0
  70. package/lib/metadataTypes/definitions/{EmailSendDefinition.definition.js → EmailSend.definition.js} +4 -2
  71. package/lib/metadataTypes/definitions/{EventDefinition.definition.js → Event.definition.js} +2 -1
  72. package/lib/metadataTypes/definitions/{FtpLocation.definition.js → FileLocation.definition.js} +4 -3
  73. package/lib/metadataTypes/definitions/FileTransfer.definition.js +3 -2
  74. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  75. package/lib/metadataTypes/definitions/Folder.definition.js +2 -0
  76. package/lib/metadataTypes/definitions/ImportFile.definition.js +4 -3
  77. package/lib/metadataTypes/definitions/{Interaction.definition.js → Journey.definition.js} +11 -2
  78. package/lib/metadataTypes/definitions/List.definition.js +1 -0
  79. package/lib/metadataTypes/definitions/MobileCode.definition.js +3 -1
  80. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +27 -17
  81. package/lib/metadataTypes/definitions/MobileMessage.definition.js +743 -0
  82. package/lib/metadataTypes/definitions/Query.definition.js +3 -2
  83. package/lib/metadataTypes/definitions/Role.definition.js +5 -0
  84. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  85. package/lib/metadataTypes/definitions/SendClassification.definition.js +114 -0
  86. package/lib/metadataTypes/definitions/SetDefinition.definition.js +1 -0
  87. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -1
  88. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -0
  89. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +1 -0
  90. package/lib/metadataTypes/definitions/{TriggeredSendDefinition.definition.js → TriggeredSend.definition.js} +5 -3
  91. package/lib/metadataTypes/definitions/User.definition.js +365 -0
  92. package/lib/retrieveChangelog.js +1 -2
  93. package/lib/util/auth.js +29 -9
  94. package/lib/util/businessUnit.js +3 -3
  95. package/lib/util/cli.js +55 -7
  96. package/lib/util/devops.js +6 -4
  97. package/lib/util/file.js +55 -13
  98. package/lib/util/init.config.js +1 -2
  99. package/lib/util/init.npm.js +3 -3
  100. package/lib/util/util.js +23 -14
  101. package/package.json +16 -15
  102. package/test/general.test.js +62 -0
  103. package/test/mockRoot/.mcdevrc.json +7 -5
  104. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testBlocked_user.user-meta.json +23 -0
  105. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testExisting_user.user-meta.json +31 -0
  106. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testNew_user.user-meta.json +27 -0
  107. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{childBU_dataextension_test.dataExtension-meta.json → testExisting_dataExtension.dataExtension-meta.json} +2 -2
  108. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{testDataExtension.dataExtension-meta.json → testNew_dataExtension.dataExtension-meta.json} +2 -2
  109. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_interaction.interaction-meta.json +576 -0
  110. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.amp +2 -0
  111. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.json +10 -0
  112. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.amp +2 -0
  113. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.json +10 -0
  114. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.amp +1 -0
  115. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +61 -0
  116. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.amp +1 -0
  117. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +60 -0
  118. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +1 -1
  119. package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.json +1 -1
  120. package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.sql +1 -1
  121. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +1 -1
  122. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -1
  123. package/test/resourceFactory.js +13 -0
  124. package/test/resources/1111111/accountUser/configure-response.xml +70 -0
  125. package/test/resources/1111111/accountUser/create-response.xml +97 -0
  126. package/test/resources/1111111/accountUser/retrieve-response.xml +156 -0
  127. package/test/resources/1111111/accountUser/update-response.xml +111 -0
  128. package/test/resources/1111111/accountUserAccount/retrieve-response.xml +77 -0
  129. package/test/resources/1111111/platform/v1/setup/quickflow/data/get-response.json +455 -0
  130. package/test/resources/1111111/role/retrieve-response.xml +76 -0
  131. package/test/resources/1111111/user/build-expected.json +16 -0
  132. package/test/resources/1111111/user/create-expected.json +21 -0
  133. package/test/resources/1111111/user/retrieve-expected.json +24 -0
  134. package/test/resources/1111111/user/template-expected.json +16 -0
  135. package/test/resources/1111111/user/update-expected.json +21 -0
  136. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/delete-response.json +1 -0
  137. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +17 -0
  138. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +3 -3
  139. package/test/resources/9999999/automation/v1/queries/get-response.json +21 -4
  140. package/test/resources/9999999/automation/v1/queries/post-response.json +4 -4
  141. package/test/resources/9999999/data/v1/customobjectdata/key/{childBU_dataextension_test → testExisting_dataExtension}/rowset/get-response.json +1 -1
  142. package/test/resources/9999999/dataExtension/build-expected.json +3 -3
  143. package/test/resources/9999999/dataExtension/create-expected.json +2 -2
  144. package/test/resources/9999999/dataExtension/create-response.xml +8 -3
  145. package/test/resources/9999999/dataExtension/retrieve-expected.json +3 -3
  146. package/test/resources/9999999/dataExtension/retrieve-response.xml +9 -4
  147. package/test/resources/9999999/dataExtension/template-expected.json +3 -3
  148. package/test/resources/9999999/dataExtension/update-expected.json +3 -3
  149. package/test/resources/9999999/dataExtension/update-response.xml +9 -4
  150. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +14 -9
  151. package/test/resources/9999999/interaction/v1/interactions/get-response.json +312 -0
  152. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/get-response.json +312 -0
  153. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/put-response.json +592 -0
  154. package/test/resources/9999999/journey/build-expected.json +572 -0
  155. package/test/resources/9999999/journey/get-expected.json +576 -0
  156. package/test/resources/9999999/journey/put-expected.json +576 -0
  157. package/test/resources/9999999/journey/template-expected.json +572 -0
  158. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +42 -0
  159. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/cTVJaG5oSDJPVUNHcUh6Z3pQT2tVdzo4Njow/delete-response.json +0 -0
  160. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +1 -0
  161. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/post-response.json +3 -0
  162. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/delete-response.json +0 -0
  163. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +106 -0
  164. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/post-response.json +0 -0
  165. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +127 -0
  166. package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +129 -0
  167. package/test/resources/9999999/legacy/v1/beta/mobile/message/post-response.json +3 -0
  168. package/test/resources/9999999/legacy/v1/beta2/data/campaign/get-response.json +29 -0
  169. package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
  170. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +1 -1
  171. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +1 -1
  172. package/test/resources/9999999/mobileKeyword/build-expected.amp +2 -0
  173. package/test/resources/9999999/mobileKeyword/build-expected.json +9 -0
  174. package/test/resources/9999999/mobileKeyword/get-expected.amp +2 -0
  175. package/test/resources/9999999/mobileKeyword/get-expected.json +15 -0
  176. package/test/resources/9999999/mobileKeyword/post-create-expected.amp +2 -0
  177. package/test/resources/9999999/mobileKeyword/post-create-expected.json +17 -0
  178. package/test/resources/9999999/mobileKeyword/template-expected.amp +2 -0
  179. package/test/resources/9999999/mobileKeyword/template-expected.json +9 -0
  180. package/test/resources/9999999/mobileMessage/build-expected.amp +1 -0
  181. package/test/resources/9999999/mobileMessage/build-expected.json +60 -0
  182. package/test/resources/9999999/mobileMessage/get-expected.amp +1 -0
  183. package/test/resources/9999999/mobileMessage/get-expected.json +61 -0
  184. package/test/resources/9999999/mobileMessage/post-create-expected.amp +1 -0
  185. package/test/resources/9999999/mobileMessage/post-create-expected.json +63 -0
  186. package/test/resources/9999999/mobileMessage/post-update-expected.amp +1 -0
  187. package/test/resources/9999999/mobileMessage/post-update-expected.json +61 -0
  188. package/test/resources/9999999/mobileMessage/template-expected.amp +1 -0
  189. package/test/resources/9999999/mobileMessage/template-expected.json +60 -0
  190. package/test/resources/9999999/query/build-expected.json +1 -1
  191. package/test/resources/9999999/query/get-expected.json +1 -1
  192. package/test/resources/9999999/query/get2-expected.json +11 -0
  193. package/test/resources/9999999/query/patch-expected.json +1 -1
  194. package/test/resources/9999999/query/post-expected.json +1 -1
  195. package/test/resources/9999999/query/template-expected.json +1 -1
  196. package/test/resources/9999999/queryDefinition/retrieve-response.xml +30 -0
  197. package/test/resources/9999999/transactionalEmail/build-expected.json +5 -5
  198. package/test/resources/9999999/transactionalEmail/get-expected.json +1 -1
  199. package/test/resources/9999999/transactionalEmail/patch-expected.json +1 -1
  200. package/test/resources/9999999/transactionalEmail/post-expected.json +1 -1
  201. package/test/resources/9999999/transactionalEmail/template-expected.json +5 -5
  202. package/test/resources/9999999/transactionalPush/build-expected.json +2 -2
  203. package/test/resources/9999999/transactionalPush/template-expected.json +2 -2
  204. package/test/resources/9999999/transactionalSMS/build-expected.json +3 -3
  205. package/test/resources/9999999/transactionalSMS/template-expected.json +3 -3
  206. package/test/{dataExtension.test.js → type.dataExtension.test.js} +78 -21
  207. package/test/{interaction.test.js → type.journey.test.js} +64 -30
  208. package/test/type.mobileKeyword.test.js +250 -0
  209. package/test/type.mobileMessage.test.js +205 -0
  210. package/test/{query.test.js → type.query.test.js} +102 -5
  211. package/test/{transactionalEmail.test.js → type.transactionalEmail.test.js} +40 -2
  212. package/test/{transactionalPush.test.js → type.transactionalPush.test.js} +41 -2
  213. package/test/{transactionalSMS.test.js → type.transactionalSMS.test.js} +73 -3
  214. package/test/type.user.test.js +160 -0
  215. package/test/utils.js +17 -5
  216. package/types/mcdev.d.js +48 -15
  217. package/.github/workflows/code-analysis.yml +0 -57
  218. package/lib/metadataTypes/AccountUser.js +0 -426
  219. package/lib/metadataTypes/definitions/AccountUser.definition.js +0 -227
  220. package/test/mockRoot/deploy/testInstance/testBU/interaction/testExisting_interaction.interaction-meta.json +0 -266
  221. package/test/resources/9999999/interaction/build-expected.json +0 -260
  222. package/test/resources/9999999/interaction/get-expected.json +0 -264
  223. package/test/resources/9999999/interaction/put-expected.json +0 -264
  224. package/test/resources/9999999/interaction/template-expected.json +0 -260
  225. package/test/resources/9999999/interaction/v1/interactions/put-response.json +0 -280
  226. /package/test/mockRoot/deploy/testInstance/testBU/{interaction → journey}/testNew_interaction.interaction-meta.json +0 -0
  227. /package/test/resources/9999999/{interaction → journey}/post-expected.json +0 -0
@@ -7,6 +7,7 @@ module.exports = {
7
7
  },
8
8
  hasExtended: false,
9
9
  idField: 'queryDefinitionId',
10
+ keyIsFixed: false,
10
11
  keyField: 'key',
11
12
  nameField: 'name',
12
13
  folderIdField: 'categoryId',
@@ -86,8 +87,8 @@ module.exports = {
86
87
  template: false,
87
88
  },
88
89
  targetId: {
89
- isCreateable: false,
90
- isUpdateable: false,
90
+ isCreateable: true,
91
+ isUpdateable: true,
91
92
  retrieving: false,
92
93
  template: false,
93
94
  },
@@ -16,6 +16,7 @@ module.exports = {
16
16
  documentInOneFile: true,
17
17
  hasExtended: true,
18
18
  idField: 'ObjectID',
19
+ keyIsFixed: false,
19
20
  keyField: 'CustomerKey',
20
21
  nameField: 'Name',
21
22
  createdDateField: 'CreatedDate',
@@ -77,6 +78,10 @@ module.exports = {
77
78
  },
78
79
  PermissionSets: {
79
80
  retrieving: true,
81
+ skipCache: true,
82
+ skipValidation: true,
83
+ },
84
+ c__notAssignable: {
80
85
  skipValidation: true,
81
86
  },
82
87
  },
@@ -4,6 +4,7 @@ module.exports = {
4
4
  folderType: 'ssjsactivity',
5
5
  hasExtended: false,
6
6
  idField: 'ssjsActivityId',
7
+ keyIsFixed: false,
7
8
  keyField: 'key',
8
9
  nameField: 'name',
9
10
  folderIdField: 'categoryId',
@@ -0,0 +1,114 @@
1
+ // https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/sendclassification.html
2
+ module.exports = {
3
+ bodyIteratorField: 'Results',
4
+ dependencies: [],
5
+ filter: {},
6
+ hasExtended: false,
7
+ idField: 'ObjectID',
8
+ keyIsFixed: null,
9
+ keyField: 'CustomerKey',
10
+ nameField: 'Name',
11
+ createdDateField: 'CreatedDate',
12
+ createdNameField: null,
13
+ lastmodDateField: 'ModifiedDate',
14
+ lastmodNameField: null,
15
+ restPagination: false,
16
+ type: 'sendClassification',
17
+ typeDescription:
18
+ 'Lets admins define Delivery Profile, Sender Profile and CAN-SPAM for an email job in a central location.',
19
+ typeRetrieveByDefault: false,
20
+ typeName: 'Send Classification',
21
+ fields: {
22
+ 'Client.ID': {
23
+ isCreateable: false,
24
+ isUpdateable: false,
25
+ retrieving: false,
26
+ template: false,
27
+ },
28
+ CreatedDate: {
29
+ isCreateable: false,
30
+ isUpdateable: false,
31
+ retrieving: false,
32
+ template: false,
33
+ },
34
+ ModifiedDate: {
35
+ isCreateable: false,
36
+ isUpdateable: false,
37
+ retrieving: false,
38
+ template: false,
39
+ },
40
+ CustomerKey: {
41
+ isCreateable: false,
42
+ isUpdateable: false,
43
+ retrieving: true,
44
+ template: false,
45
+ },
46
+ ObjectID: {
47
+ isCreateable: false,
48
+ isUpdateable: false,
49
+ retrieving: true,
50
+ template: false,
51
+ },
52
+ Name: {
53
+ isCreateable: false,
54
+ isUpdateable: false,
55
+ retrieving: true,
56
+ template: false,
57
+ },
58
+ Description: {
59
+ isCreateable: false,
60
+ isUpdateable: false,
61
+ retrieving: true,
62
+ template: false,
63
+ },
64
+ PartnerKey: {
65
+ isCreateable: false,
66
+ isUpdateable: false,
67
+ retrieving: false,
68
+ template: false,
69
+ },
70
+ PartnerProperties: {
71
+ isCreateable: false,
72
+ isUpdateable: false,
73
+ retrieving: false,
74
+ template: false,
75
+ },
76
+
77
+ ArchiveEmail: {
78
+ isCreateable: false,
79
+ isUpdateable: false,
80
+ retrieving: true,
81
+ template: true,
82
+ },
83
+ DeliveryProfile: {
84
+ isCreateable: false,
85
+ isUpdateable: false,
86
+ retrieving: false,
87
+ template: false,
88
+ },
89
+ HonorPublicationListOptOutsForTransactionalSends: {
90
+ isCreateable: false,
91
+ isUpdateable: false,
92
+ retrieving: false,
93
+ template: false,
94
+ },
95
+ SendClassificationType: {
96
+ isCreateable: false,
97
+ isUpdateable: false,
98
+ retrieving: true,
99
+ template: true,
100
+ },
101
+ SenderProfile: {
102
+ isCreateable: false,
103
+ isUpdateable: false,
104
+ retrieving: false,
105
+ template: false,
106
+ },
107
+ SendPriority: {
108
+ isCreateable: false,
109
+ isUpdateable: false,
110
+ retrieving: false,
111
+ template: false,
112
+ },
113
+ },
114
+ };
@@ -3,6 +3,7 @@ module.exports = {
3
3
  dependencies: [], // future may have dependency on Data Extensions
4
4
  hasExtended: false,
5
5
  idField: 'definitionID',
6
+ keyIsFixed: null,
6
7
  keyField: 'definitionKey',
7
8
  nameField: 'name',
8
9
  createdDateField: 'createDate',
@@ -1,8 +1,9 @@
1
1
  module.exports = {
2
2
  bodyIteratorField: 'definitions',
3
- dependencies: ['asset-message', 'dataExtension', 'list', 'interaction'],
3
+ dependencies: ['asset-message', 'dataExtension', 'list', 'journey'],
4
4
  hasExtended: false,
5
5
  idField: 'definitionId',
6
+ keyIsFixed: true, // sending definitionKey in update call not allowed by API
6
7
  keyField: 'definitionKey',
7
8
  nameField: 'name',
8
9
  createdDateField: 'createdDate',
@@ -3,6 +3,7 @@ module.exports = {
3
3
  dependencies: ['asset-asset'],
4
4
  hasExtended: false,
5
5
  idField: 'definitionId',
6
+ keyIsFixed: true, // sending definitionKey in update call not allowed by API
6
7
  keyField: 'definitionKey',
7
8
  nameField: 'name',
8
9
  createdDateField: 'createdDate',
@@ -3,6 +3,7 @@ module.exports = {
3
3
  dependencies: ['mobileCode', 'mobileKeyword'],
4
4
  hasExtended: false,
5
5
  idField: 'definitionId',
6
+ keyIsFixed: true, // sending definitionKey in update call not allowed by API
6
7
  keyField: 'definitionKey',
7
8
  nameField: 'name',
8
9
  createdDateField: 'createdDate',
@@ -12,6 +12,7 @@ module.exports = {
12
12
  hasExtended: false,
13
13
  idField: 'ObjectID',
14
14
  keepId: true,
15
+ keyIsFixed: false,
15
16
  keyField: 'CustomerKey',
16
17
  nameField: 'Name',
17
18
  folderIdField: 'CategoryID',
@@ -20,7 +21,8 @@ module.exports = {
20
21
  lastmodDateField: 'ModifiedDate',
21
22
  lastmodNameField: null,
22
23
  restPagination: null,
23
- type: 'triggeredSendDefinition',
24
+ type: 'triggeredSend',
25
+ soapType: 'triggeredSendDefinition',
24
26
  typeDescription: 'DEPRECATED: Sends emails via API or DataExtension Event.',
25
27
  typeRetrieveByDefault: true,
26
28
  typeName: 'Triggered Send',
@@ -303,7 +305,7 @@ module.exports = {
303
305
  },
304
306
  ObjectID: {
305
307
  isCreateable: false,
306
- isUpdateable: false,
308
+ isUpdateable: true,
307
309
  retrieving: false,
308
310
  templating: false,
309
311
  },
@@ -530,7 +532,7 @@ module.exports = {
530
532
  templating: false,
531
533
  },
532
534
  r__folder_Path: { skipValidation: true },
533
- r__assetMessage_Name: { skipValidation: true },
535
+ r__assetMessage_Name_readOnly: { skipValidation: true },
534
536
  r__assetMessage_Key: { skipValidation: true },
535
537
  r__list_PathName: { skipValidation: true },
536
538
  },
@@ -0,0 +1,365 @@
1
+ module.exports = {
2
+ bodyIteratorField: 'Results',
3
+ dependencies: ['role'],
4
+ folderType: null,
5
+ hasExtended: false,
6
+ idField: 'AccountUserID', // ID contains the same value as AccountUserID but is not required by API
7
+ keepId: true,
8
+ keyIsFixed: false,
9
+ keyField: 'CustomerKey',
10
+ nameField: 'Name',
11
+ createdDateField: 'CreatedDate',
12
+ createdNameField: null,
13
+ lastmodDateField: 'ModifiedDate',
14
+ lastmodNameField: 'Client.ModifiedBy',
15
+ type: 'user',
16
+ soapType: 'AccountUser',
17
+ typeDescription: 'Marketing Cloud users',
18
+ typeName: 'User',
19
+ typeRetrieveByDefault: false,
20
+ stringifyFieldsBeforeTemplate: ['DefaultBusinessUnit', 'c__AssociatedBusinessUnits'],
21
+ fields: {
22
+ AccountUserID: {
23
+ // numeric id, cannot be changed but identifies the useruniquely
24
+ isCreateable: false,
25
+ isUpdateable: true,
26
+ retrieving: true,
27
+ template: false,
28
+ },
29
+ ActiveFlag: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
30
+ AssociatedBusinessUnits: {
31
+ // not supported by API
32
+ isCreateable: false,
33
+ isUpdateable: false,
34
+ retrieving: false,
35
+ template: false,
36
+ },
37
+ BusinessUnit: {
38
+ // not supported by API
39
+ isCreateable: false,
40
+ isUpdateable: false,
41
+ retrieving: false,
42
+ template: false,
43
+ },
44
+ ChallengeAnswer: {
45
+ // alwasy empty
46
+ isCreateable: false,
47
+ isUpdateable: false,
48
+ retrieving: false,
49
+ template: false,
50
+ },
51
+ ChallengePhrase: {
52
+ // alwasy empty
53
+ isCreateable: false,
54
+ isUpdateable: false,
55
+ retrieving: false,
56
+ template: false,
57
+ },
58
+ 'Client.ID': { isCreateable: true, isUpdateable: true, retrieving: false, template: false },
59
+ 'Client.ModifiedBy': {
60
+ isCreateable: false,
61
+ isUpdateable: false,
62
+ retrieving: true,
63
+ template: false,
64
+ },
65
+ 'Client.PartnerClientKey': {
66
+ isCreateable: false,
67
+ isUpdateable: false,
68
+ retrieving: false,
69
+ template: false,
70
+ },
71
+ CorrelationID: {
72
+ isCreateable: false,
73
+ isUpdateable: false,
74
+ retrieving: false,
75
+ template: false,
76
+ },
77
+ CreatedDate: {
78
+ isCreateable: false,
79
+ isUpdateable: false,
80
+ retrieving: true,
81
+ template: false,
82
+ },
83
+ CustomerKey: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
84
+ DefaultApplication: {
85
+ // not supported by API
86
+ isCreateable: false,
87
+ isUpdateable: false,
88
+ retrieving: false,
89
+ template: false,
90
+ },
91
+ DefaultBusinessUnit: {
92
+ isCreateable: true,
93
+ isUpdateable: true,
94
+ retrieving: true,
95
+ template: true,
96
+ },
97
+ DefaultBusinessUnitObject: {
98
+ // more complex version of DefaultBusinessUnit thats not needed for deployment
99
+ isCreateable: false,
100
+ isUpdateable: false,
101
+ retrieving: false,
102
+ template: false,
103
+ },
104
+ Delete: { isCreateable: false, isUpdateable: false, retrieving: false, template: false },
105
+ Email: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
106
+ ID: { isCreateable: false, isUpdateable: false, retrieving: false, template: false },
107
+ IsAPIUser: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
108
+ IsLocked: {
109
+ // Indicates if account user can or cannot log into their account
110
+ isCreateable: false,
111
+ isUpdateable: false,
112
+ retrieving: true,
113
+ template: false,
114
+ },
115
+ 'LanguageLocale.LocaleCode': {
116
+ // seems to always return en-US
117
+ isCreateable: false,
118
+ isUpdateable: false,
119
+ retrieving: false,
120
+ template: false,
121
+ },
122
+ LastSuccessfulLogin: {
123
+ isCreateable: false,
124
+ isUpdateable: false,
125
+ retrieving: true,
126
+ template: false,
127
+ },
128
+ 'Locale.LocaleCode': {
129
+ isCreateable: true,
130
+ isUpdateable: true,
131
+ retrieving: true,
132
+ template: true,
133
+ },
134
+ 'Locale.ObjectID': {
135
+ isCreateable: false,
136
+ isUpdateable: false,
137
+ retrieving: false,
138
+ template: false,
139
+ },
140
+ 'Locale.PartnerKey': {
141
+ isCreateable: false,
142
+ isUpdateable: false,
143
+ retrieving: false,
144
+ template: false,
145
+ },
146
+ ModifiedDate: {
147
+ isCreateable: false,
148
+ isUpdateable: false,
149
+ retrieving: true,
150
+ template: false,
151
+ },
152
+ MustChangePassword: {
153
+ isCreateable: true,
154
+ isUpdateable: true,
155
+ retrieving: true,
156
+ template: true,
157
+ },
158
+ Name: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
159
+ NotificationEmailAddress: {
160
+ isCreateable: true,
161
+ isUpdateable: true,
162
+ retrieving: true,
163
+ template: true,
164
+ },
165
+ ObjectID: { isCreateable: null, isUpdateable: null, retrieving: false, template: null },
166
+ ObjectState: {
167
+ isCreateable: false,
168
+ isUpdateable: false,
169
+ retrieving: false,
170
+ template: false,
171
+ },
172
+ Owner: { isCreateable: false, isUpdateable: false, retrieving: false, template: false },
173
+ PartnerKey: {
174
+ isCreateable: false,
175
+ isUpdateable: false,
176
+ retrieving: false,
177
+ template: false,
178
+ },
179
+ PartnerProperties: {
180
+ isCreateable: false,
181
+ isUpdateable: false,
182
+ retrieving: false,
183
+ template: false,
184
+ },
185
+ Password: { isCreateable: true, isUpdateable: true, retrieving: false, template: false },
186
+ Roles: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
187
+ 'Roles.Role': {
188
+ skipValidation: true,
189
+ },
190
+ 'Roles.Role[].Client': {
191
+ skipValidation: false,
192
+ },
193
+ SsoIdentities: {
194
+ isCreateable: true,
195
+ isUpdateable: true,
196
+ retrieving: false, // retrieve not supported by API
197
+ template: false,
198
+ },
199
+ 'SsoIdentities[]': {
200
+ isCreateable: true,
201
+ isUpdateable: true,
202
+ retrieving: false,
203
+ template: false,
204
+ },
205
+ 'SsoIdentities[].IsActive': {
206
+ isCreateable: true,
207
+ isUpdateable: true,
208
+ retrieving: false,
209
+ template: false,
210
+ },
211
+ 'SsoIdentities[].FederatedID': {
212
+ isCreateable: true,
213
+ isUpdateable: true,
214
+ retrieving: false,
215
+ template: false,
216
+ },
217
+ 'TimeZone.ID': {
218
+ isCreateable: true,
219
+ isUpdateable: true,
220
+ retrieving: true,
221
+ template: false,
222
+ },
223
+ 'TimeZone.Name': {
224
+ isCreateable: false,
225
+ isUpdateable: false,
226
+ retrieving: true,
227
+ template: true,
228
+ },
229
+ 'TimeZone.ObjectID': {
230
+ isCreateable: false,
231
+ isUpdateable: false,
232
+ retrieving: false,
233
+ template: false,
234
+ },
235
+ 'TimeZone.PartnerKey': {
236
+ isCreateable: false,
237
+ isUpdateable: false,
238
+ retrieving: false,
239
+ template: false,
240
+ },
241
+ Unlock: {
242
+ // do not retrieve it but also do not remove it from retrieve as we are adding it manually
243
+ skipValidation: true,
244
+ isCreateable: false,
245
+ isUpdateable: true,
246
+ template: true,
247
+ },
248
+ UserID: { isCreateable: true, isUpdateable: true, retrieving: true, template: true },
249
+ UserPermissions: {
250
+ // not sure what to do with the reponse yet. might become interesting for the future
251
+ isCreateable: false,
252
+ isUpdateable: false,
253
+ retrieving: false,
254
+ template: false,
255
+ },
256
+ 'UserPermissions.PartnerKey': {
257
+ isCreateable: null,
258
+ isUpdateable: null,
259
+ retrieving: false,
260
+ template: false,
261
+ },
262
+ 'UserPermissions.ID': {
263
+ skipValidation: true,
264
+ },
265
+ 'UserPermissions.ObjectID': {
266
+ isCreateable: null,
267
+ isUpdateable: null,
268
+ retrieving: false,
269
+ template: false,
270
+ },
271
+ 'UserPermissions.Name': {
272
+ isCreateable: null,
273
+ isUpdateable: null,
274
+ retrieving: false,
275
+ template: false,
276
+ },
277
+ 'UserPermissions.Value': {
278
+ isCreateable: null,
279
+ isUpdateable: null,
280
+ retrieving: false,
281
+ template: false,
282
+ },
283
+ 'UserPermissions.Description': {
284
+ isCreateable: null,
285
+ isUpdateable: null,
286
+ retrieving: false,
287
+ template: false,
288
+ },
289
+ 'UserPermissions.Delete': {
290
+ isCreateable: null,
291
+ isUpdateable: null,
292
+ retrieving: false,
293
+ template: false,
294
+ },
295
+ 'UserPermissions[].PartnerKey': {
296
+ isCreateable: null,
297
+ isUpdateable: null,
298
+ retrieving: false,
299
+ template: false,
300
+ },
301
+ 'UserPermissions[].ID': {
302
+ skipValidation: true,
303
+ },
304
+ 'UserPermissions[].ObjectID': {
305
+ isCreateable: null,
306
+ isUpdateable: null,
307
+ retrieving: false,
308
+ template: false,
309
+ },
310
+ 'UserPermissions[].Name': {
311
+ isCreateable: null,
312
+ isUpdateable: null,
313
+ retrieving: false,
314
+ template: false,
315
+ },
316
+ 'UserPermissions[].Value': {
317
+ isCreateable: null,
318
+ isUpdateable: null,
319
+ retrieving: false,
320
+ template: false,
321
+ },
322
+ 'UserPermissions[].Description': {
323
+ isCreateable: null,
324
+ isUpdateable: null,
325
+ retrieving: false,
326
+ template: false,
327
+ },
328
+ 'UserPermissions[].Delete': {
329
+ isCreateable: null,
330
+ isUpdateable: null,
331
+ retrieving: false,
332
+ template: false,
333
+ },
334
+ c__type: {
335
+ isCreateable: false,
336
+ isUpdateable: false,
337
+ retrieve: null, // handled via script
338
+ template: false,
339
+ },
340
+ c__AssociatedBusinessUnits: {
341
+ skipValidation: true,
342
+ },
343
+ c__RoleNamesGlobal: {
344
+ skipValidation: true,
345
+ },
346
+ c__LocaleCode: {
347
+ skipValidation: true,
348
+ },
349
+ c__TimeZoneName: {
350
+ skipValidation: true,
351
+ },
352
+ c__AccountUserID: {
353
+ isCreateable: false,
354
+ isUpdateable: false,
355
+ retrieve: null, // handled via script
356
+ template: false,
357
+ },
358
+ c__IsLocked_readOnly: {
359
+ isCreateable: false,
360
+ isUpdateable: false,
361
+ retrieve: null, // handled via script
362
+ template: false,
363
+ },
364
+ },
365
+ };
@@ -43,8 +43,7 @@ const customDefinition = {
43
43
  };
44
44
  (async function () {
45
45
  // get userid>name mapping
46
- const userList = (await mcdev.retrieve('ACN-Learning/_ParentBU_', 'accountUser', true))
47
- .accountUser;
46
+ const userList = (await mcdev.retrieve('ACN-Learning/_ParentBU_', 'user', true)).user;
48
47
  // reduce userList to simple id-name map
49
48
  for (const key of Object.keys(userList)) {
50
49
  userList[userList[key].ID] = userList[key].Name;
package/lib/util/auth.js CHANGED
@@ -59,7 +59,7 @@ const Auth = {
59
59
  return initializedSDKs[credentialKey];
60
60
  } else {
61
61
  // check existing credentials cached
62
- authfile = authfile || File.readJsonSync(Util.authFileName);
62
+ authfile ||= File.readJsonSync(Util.authFileName);
63
63
  const newAuthObj = authfile[buObject.credential];
64
64
  // use client_id + MID to ensure a unique combination across instances
65
65
  const sessionKey = newAuthObj.client_id + '|' + buObject.mid;
@@ -93,7 +93,9 @@ function setupSDK(sessionKey, authObject) {
93
93
  eventHandlers: {
94
94
  onLoop: (type, accumulator) => {
95
95
  Util.logger.info(
96
- ` - Requesting next batch (currently ${accumulator?.length} records)`
96
+ Util.getGrayMsg(
97
+ ` - Requesting next batch (currently ${accumulator?.length} records)`
98
+ )
97
99
  );
98
100
  },
99
101
  onRefresh: (authObject) => {
@@ -114,13 +116,31 @@ function setupSDK(sessionKey, authObject) {
114
116
  );
115
117
  Util.logger.errorStack(ex);
116
118
  },
117
- // logRequest: (req) =>
118
- // console.log(`${Util.color.fgMagenta}request${Util.color.reset}`, req), // uncomment to log requests
119
- // logResponse: (res) =>
120
- // console.log(
121
- // `${Util.color.bgMagenta}response${Util.color.reset}:`,
122
- // typeof res.data == 'string' && res.data.length > 10000 ? res.data : res
123
- // ), // uncomment to log responses
119
+ logRequest: (req) => {
120
+ const msg = JSON.parse(JSON.stringify(req));
121
+ if (msg.url === '/Service.asmx') {
122
+ msg.data = msg.data.replaceAll(
123
+ /<fueloauth(.*)<\/fueloauth>/gim,
124
+ '<fueloauth>*** TOKEN REMOVED ***</fueloauth>'
125
+ );
126
+ } else if (msg.headers?.Authorization) {
127
+ msg.headers.Authorization = 'Bearer *** TOKEN REMOVED ***';
128
+ }
129
+ if (Util.OPTIONS.api === 'cli') {
130
+ console.log(`${Util.color.fgMagenta}API REQUEST >>${Util.color.reset}`, msg); // eslint-disable-line no-console
131
+ } else if (Util.OPTIONS.api === 'log') {
132
+ Util.logger.debug('API REQUEST >> ' + JSON.stringify(msg, null, 2));
133
+ }
134
+ },
135
+ logResponse: (res) => {
136
+ const msg =
137
+ typeof res.data == 'string' ? res.data : JSON.stringify(res.data, null, 2);
138
+ if (Util.OPTIONS.api === 'cli') {
139
+ console.log(`${Util.color.fgMagenta}API RESPONSE <<${Util.color.reset}`, msg); // eslint-disable-line no-console
140
+ } else if (Util.OPTIONS.api === 'log') {
141
+ Util.logger.debug('API RESPONSE << ' + msg);
142
+ }
143
+ },
124
144
  },
125
145
  requestAttempts: 4,
126
146
  retryOnConnectionError: true,
@@ -62,9 +62,9 @@ const BusinessUnit = {
62
62
  currentCredentials.eid = element.ID;
63
63
  Util.logger.info(` - ${Util.parentBuName} (${element.Name})`);
64
64
  } else {
65
- const equalizedName = element.Name.replace(/[^\w\s]/gi, '') // remove special chars
66
- .replace(/ +/g, '_') // convert spaces to underscore
67
- .replace(/__+/g, '_'); // make sure we never have more than one underscore in a row
65
+ const equalizedName = element.Name.replaceAll(/[^\w\s]/gi, '') // remove special chars
66
+ .replaceAll(/ +/g, '_') // convert spaces to underscore
67
+ .replaceAll(/__+/g, '_'); // make sure we never have more than one underscore in a row
68
68
  myBuList[equalizedName] = element.ID;
69
69
  Util.logger.info(
70
70
  ` - ${element.Name} ${