mcdev 4.2.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +1 -2
- package/.github/pr-labeler.yml +3 -0
- package/.github/workflows/close_issues_on_merge.yml +18 -0
- package/.github/workflows/pr-labeler.yml +19 -0
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/docs/dist/documentation.md +700 -281
- package/lib/Deployer.js +21 -15
- package/lib/Retriever.js +23 -19
- package/lib/cli.js +36 -6
- package/lib/index.js +56 -10
- package/lib/metadataTypes/AccountUser.js +17 -23
- package/lib/metadataTypes/Asset.js +28 -21
- package/lib/metadataTypes/AttributeGroup.js +1 -2
- package/lib/metadataTypes/Automation.js +75 -37
- package/lib/metadataTypes/Campaign.js +4 -3
- package/lib/metadataTypes/ContentArea.js +2 -3
- package/lib/metadataTypes/DataExtension.js +56 -47
- package/lib/metadataTypes/DataExtensionField.js +9 -12
- package/lib/metadataTypes/DataExtensionTemplate.js +2 -3
- package/lib/metadataTypes/DataExtract.js +1 -2
- package/lib/metadataTypes/DataExtractType.js +1 -2
- package/lib/metadataTypes/Discovery.js +3 -4
- package/lib/metadataTypes/Email.js +20 -6
- package/lib/metadataTypes/EmailSendDefinition.js +5 -8
- package/lib/metadataTypes/EventDefinition.js +29 -2
- package/lib/metadataTypes/FileTransfer.js +1 -2
- package/lib/metadataTypes/Filter.js +1 -2
- package/lib/metadataTypes/Folder.js +12 -14
- package/lib/metadataTypes/FtpLocation.js +1 -2
- package/lib/metadataTypes/ImportFile.js +1 -2
- package/lib/metadataTypes/Interaction.js +678 -12
- package/lib/metadataTypes/List.js +36 -33
- package/lib/metadataTypes/MetadataType.js +170 -124
- package/lib/metadataTypes/MobileCode.js +1 -2
- package/lib/metadataTypes/MobileKeyword.js +1 -2
- package/lib/metadataTypes/Query.js +15 -6
- package/lib/metadataTypes/Role.js +10 -11
- package/lib/metadataTypes/Script.js +2 -5
- package/lib/metadataTypes/SetDefinition.js +1 -2
- package/lib/metadataTypes/TransactionalMessage.js +25 -32
- package/lib/metadataTypes/TransactionalSMS.js +3 -4
- package/lib/metadataTypes/TriggeredSendDefinition.js +232 -56
- package/lib/metadataTypes/definitions/Asset.definition.js +1 -1
- package/lib/metadataTypes/definitions/Automation.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtension.definition.js +10 -1
- package/lib/metadataTypes/definitions/Email.definition.js +1 -1
- package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +1 -1
- package/lib/metadataTypes/definitions/EventDefinition.definition.js +40 -1
- package/lib/metadataTypes/definitions/Folder.definition.js +31 -0
- package/lib/metadataTypes/definitions/ImportFile.definition.js +1 -1
- package/lib/metadataTypes/definitions/Interaction.definition.js +47 -26
- package/lib/metadataTypes/definitions/List.definition.js +1 -1
- package/lib/metadataTypes/definitions/Query.definition.js +1 -1
- package/lib/metadataTypes/definitions/Script.definition.js +1 -1
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -1
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +2 -1
- package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +2 -1
- package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +10 -2
- package/lib/util/auth.js +10 -2
- package/lib/util/cli.js +4 -1
- package/lib/util/file.js +7 -3
- package/lib/util/init.js +62 -0
- package/lib/util/util.js +131 -11
- package/package.json +22 -9
- package/test/dataExtension.test.js +10 -10
- package/test/interaction.test.js +123 -0
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/interaction/testExisting_interaction.interaction-meta.json +266 -0
- package/test/mockRoot/deploy/testInstance/testBU/interaction/testNew_interaction.interaction-meta.json +266 -0
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +0 -3
- package/test/query.test.js +8 -8
- package/test/resourceFactory.js +12 -7
- package/test/resources/1111111/dataExtension/retrieve-response.xml +26 -0
- package/test/resources/9999999/data/v1/customobjectdata/key/childBU_dataextension_test/rowset/get-response.json +13 -0
- package/test/resources/9999999/dataFolder/retrieve-response.xml +22 -0
- package/test/resources/9999999/eventDefinition/get-expected.json +34 -0
- package/test/resources/9999999/interaction/build-expected.json +260 -0
- package/test/resources/9999999/interaction/get-expected.json +264 -0
- package/test/resources/9999999/interaction/post-expected.json +264 -0
- package/test/resources/9999999/interaction/put-expected.json +264 -0
- package/test/resources/9999999/interaction/template-expected.json +260 -0
- package/test/resources/9999999/interaction/v1/EventDefinitions/get-response.json +43 -0
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +222 -3
- package/test/resources/9999999/interaction/v1/interactions/post-response.json +280 -0
- package/test/resources/9999999/interaction/v1/interactions/put-response.json +280 -0
- package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
- package/test/resources/9999999/query/post-expected.sql +1 -1
- package/test/resources/9999999/transactionalEmail/post-expected.json +1 -1
- package/test/transactionalEmail.test.js +7 -7
- package/test/transactionalPush.test.js +7 -7
- package/test/transactionalSMS.test.js +7 -7
- package/test/utils.js +50 -0
- package/types/mcdev.d.js +1 -0
|
@@ -16,14 +16,10 @@ class Email extends MetadataType {
|
|
|
16
16
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
17
17
|
* @param {void} [_] unused parameter
|
|
18
18
|
* @param {void} [__] unused parameter
|
|
19
|
-
* @param {void} [___] unused parameter
|
|
20
19
|
* @param {string} [key] customer key of single item to retrieve
|
|
21
20
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
22
21
|
*/
|
|
23
|
-
static retrieve(retrieveDir, _, __,
|
|
24
|
-
Util.logger.warn(
|
|
25
|
-
' - Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
|
|
26
|
-
);
|
|
22
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
27
23
|
/** @type {TYPE.SoapRequestParams} */
|
|
28
24
|
let requestParams = null;
|
|
29
25
|
if (key) {
|
|
@@ -36,7 +32,25 @@ class Email extends MetadataType {
|
|
|
36
32
|
};
|
|
37
33
|
}
|
|
38
34
|
// !dont activate `await File.initPrettier('html');` as we only want to retrieve for migration and formatting might mess with the outcome
|
|
39
|
-
return super.retrieveSOAP(retrieveDir,
|
|
35
|
+
return super.retrieveSOAP(retrieveDir, requestParams);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Helper for writing Metadata to disk, used for Retrieve and deploy
|
|
39
|
+
*
|
|
40
|
+
* @param {TYPE.MetadataTypeMap} results metadata results from deploy
|
|
41
|
+
* @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve
|
|
42
|
+
* @param {string} [overrideType] for use when there is a subtype (such as folder-queries)
|
|
43
|
+
* @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata
|
|
44
|
+
* @returns {Promise.<TYPE.MetadataTypeMap>} Promise of saved metadata
|
|
45
|
+
*/
|
|
46
|
+
static async saveResults(results, retrieveDir, overrideType, templateVariables) {
|
|
47
|
+
if (Object.keys(results).length) {
|
|
48
|
+
// only execute the following if records were found
|
|
49
|
+
Util.logger.warn(
|
|
50
|
+
' - Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
return super.saveResults(results, retrieveDir, overrideType, templateVariables);
|
|
40
54
|
}
|
|
41
55
|
/**
|
|
42
56
|
* manages post retrieve steps
|
|
@@ -17,11 +17,10 @@ class EmailSendDefinition extends MetadataType {
|
|
|
17
17
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
18
|
* @param {void} [_] unused parameter
|
|
19
19
|
* @param {void} [__] unused parameter
|
|
20
|
-
* @param {void} [___] unused parameter
|
|
21
20
|
* @param {string} [key] customer key of single item to retrieve
|
|
22
21
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
23
22
|
*/
|
|
24
|
-
static retrieve(retrieveDir, _, __,
|
|
23
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
25
24
|
/** @type {TYPE.SoapRequestParams} */
|
|
26
25
|
let requestParams = {
|
|
27
26
|
filter: {
|
|
@@ -53,7 +52,7 @@ class EmailSendDefinition extends MetadataType {
|
|
|
53
52
|
},
|
|
54
53
|
};
|
|
55
54
|
}
|
|
56
|
-
return super.retrieveSOAP(retrieveDir,
|
|
55
|
+
return super.retrieveSOAP(retrieveDir, requestParams);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
/**
|
|
@@ -79,12 +78,11 @@ class EmailSendDefinition extends MetadataType {
|
|
|
79
78
|
/**
|
|
80
79
|
* Delete a metadata item from the specified business unit
|
|
81
80
|
*
|
|
82
|
-
* @param {TYPE.BuObject} buObject references credentials
|
|
83
81
|
* @param {string} customerKey Identifier of data extension
|
|
84
82
|
* @returns {Promise.<boolean>} deletion success status
|
|
85
83
|
*/
|
|
86
|
-
static deleteByKey(
|
|
87
|
-
return super.deleteByKeySOAP(
|
|
84
|
+
static deleteByKey(customerKey) {
|
|
85
|
+
return super.deleteByKeySOAP(customerKey, false);
|
|
88
86
|
}
|
|
89
87
|
|
|
90
88
|
/**
|
|
@@ -97,8 +95,7 @@ class EmailSendDefinition extends MetadataType {
|
|
|
97
95
|
// re-add IsPlatformObject, required for visibility
|
|
98
96
|
metadata.IsPlatformObject = false;
|
|
99
97
|
// folder
|
|
100
|
-
|
|
101
|
-
delete metadata.r__folder_Path;
|
|
98
|
+
super.setFolderId(metadata);
|
|
102
99
|
// email
|
|
103
100
|
metadata.Email = {};
|
|
104
101
|
if (metadata.r__email_Name) {
|
|
@@ -20,11 +20,11 @@ class EventDefinition extends MetadataType {
|
|
|
20
20
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
21
21
|
* @param {void} [_] unused parameter
|
|
22
22
|
* @param {void} [__] unused parameter
|
|
23
|
-
* @param {void} [___] unused parameter
|
|
24
23
|
* @param {string} [key] customer key of single item to retrieve
|
|
25
24
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
26
25
|
*/
|
|
27
|
-
static retrieve(retrieveDir, _, __,
|
|
26
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
27
|
+
Util.logBeta(this.definition.type);
|
|
28
28
|
return super.retrieveREST(
|
|
29
29
|
retrieveDir,
|
|
30
30
|
`/interaction/v1/EventDefinitions${
|
|
@@ -54,6 +54,7 @@ class EventDefinition extends MetadataType {
|
|
|
54
54
|
* @returns {Promise.<TYPE.MetadataTypeItemObj>} Promise of metadata
|
|
55
55
|
*/
|
|
56
56
|
static async retrieveAsTemplate(templateDir, name, templateVariables) {
|
|
57
|
+
Util.logBeta(this.definition.type);
|
|
57
58
|
const res = await this.client.rest.get(
|
|
58
59
|
'/interaction/v1/EventDefinitions?name=' + encodeURIComponent(name)
|
|
59
60
|
);
|
|
@@ -116,6 +117,32 @@ class EventDefinition extends MetadataType {
|
|
|
116
117
|
this.keepRetrieveFields(val);
|
|
117
118
|
return val;
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Delete a metadata item from the specified business unit
|
|
122
|
+
*
|
|
123
|
+
* @param {string} key Identifier of item
|
|
124
|
+
* @returns {Promise.<boolean>} deletion success status
|
|
125
|
+
*/
|
|
126
|
+
static deleteByKey(key) {
|
|
127
|
+
Util.logBeta(this.definition.type);
|
|
128
|
+
return super.deleteByKeyREST(
|
|
129
|
+
'/interaction/v1/eventDefinitions/key:' + encodeURIComponent(key),
|
|
130
|
+
key,
|
|
131
|
+
false
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Deploys metadata - merely kept here to be able to print {@link Util.logBeta} once per deploy
|
|
136
|
+
*
|
|
137
|
+
* @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField
|
|
138
|
+
* @param {string} deployDir directory where deploy metadata are saved
|
|
139
|
+
* @param {string} retrieveDir directory where metadata after deploy should be saved
|
|
140
|
+
* @returns {Promise.<TYPE.MetadataTypeMap>} Promise of keyField => metadata map
|
|
141
|
+
*/
|
|
142
|
+
static async deploy(metadata, deployDir, retrieveDir) {
|
|
143
|
+
Util.logBeta(this.definition.type);
|
|
144
|
+
return super.deploy(metadata, deployDir, retrieveDir);
|
|
145
|
+
}
|
|
119
146
|
|
|
120
147
|
/**
|
|
121
148
|
* Creates a single Event Definition
|
|
@@ -19,11 +19,10 @@ class FileTransfer extends MetadataType {
|
|
|
19
19
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
20
20
|
* @param {void} [_] unused parameter
|
|
21
21
|
* @param {void} [__] unused parameter
|
|
22
|
-
* @param {void} [___] unused parameter
|
|
23
22
|
* @param {string} [key] customer key of single item to retrieve
|
|
24
23
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
25
24
|
*/
|
|
26
|
-
static async retrieve(retrieveDir, _, __,
|
|
25
|
+
static async retrieve(retrieveDir, _, __, key) {
|
|
27
26
|
return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null, null, key);
|
|
28
27
|
}
|
|
29
28
|
/**
|
|
@@ -18,11 +18,10 @@ class Filter extends MetadataType {
|
|
|
18
18
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
19
19
|
* @param {void} [_] unused parameter
|
|
20
20
|
* @param {void} [__] unused parameter
|
|
21
|
-
* @param {void} [___] unused parameter
|
|
22
21
|
* @param {string} [key] customer key of single item to retrieve
|
|
23
22
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
24
23
|
*/
|
|
25
|
-
static async retrieve(retrieveDir, _, __,
|
|
24
|
+
static async retrieve(retrieveDir, _, __, key) {
|
|
26
25
|
return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, null, key);
|
|
27
26
|
}
|
|
28
27
|
}
|
|
@@ -18,21 +18,19 @@ class Folder extends MetadataType {
|
|
|
18
18
|
*
|
|
19
19
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
20
20
|
* @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {void} [___] unused parameter
|
|
21
|
+
* @param {string[]} [subTypeArr] content type of folder
|
|
23
22
|
* @param {string} [key] customer key of single item to retrieve
|
|
24
|
-
* @param {string[]} [contentTypeList] content type of folder
|
|
25
23
|
* @returns {Promise} Promise
|
|
26
24
|
*/
|
|
27
|
-
static async retrieve(retrieveDir, additionalFields,
|
|
25
|
+
static async retrieve(retrieveDir, additionalFields, subTypeArr, key) {
|
|
28
26
|
if (key) {
|
|
29
27
|
Util.logger.error(`Folder.retrieve() does not support key parameter`);
|
|
30
28
|
}
|
|
31
|
-
const queryAllFolders = await this.retrieveHelper(additionalFields, true,
|
|
29
|
+
const queryAllFolders = await this.retrieveHelper(additionalFields, true, subTypeArr);
|
|
32
30
|
|
|
33
|
-
if (buObject.eid !== buObject.mid) {
|
|
31
|
+
if (this.buObject.eid !== this.buObject.mid) {
|
|
34
32
|
queryAllFolders.push(
|
|
35
|
-
...(await this.retrieveHelper(additionalFields, false,
|
|
33
|
+
...(await this.retrieveHelper(additionalFields, false, subTypeArr))
|
|
36
34
|
);
|
|
37
35
|
}
|
|
38
36
|
const sortPairs = toposort(queryAllFolders.map((a) => [a.ParentFolder.ID, a.ID]));
|
|
@@ -45,7 +43,7 @@ class Folder extends MetadataType {
|
|
|
45
43
|
}
|
|
46
44
|
// by default folders do not have an external key, we set this to ID plus EID as this will be unique
|
|
47
45
|
else if (!val.CustomerKey) {
|
|
48
|
-
val.CustomerKey = [buObject.eid, val.ID].join('-');
|
|
46
|
+
val.CustomerKey = [this.buObject.eid, val.ID].join('-');
|
|
49
47
|
}
|
|
50
48
|
// ensure name is a string and not a number (SFMC-SDK workaround)
|
|
51
49
|
val.Name = val.Name + '';
|
|
@@ -108,7 +106,7 @@ class Folder extends MetadataType {
|
|
|
108
106
|
// remove keys which are listed in other BUs and skip root
|
|
109
107
|
if (
|
|
110
108
|
idMap[id].Client?.ID &&
|
|
111
|
-
(buObject.mid == idMap[id].Client.ID ||
|
|
109
|
+
(this.buObject.mid == idMap[id].Client.ID ||
|
|
112
110
|
this.definition.folderTypesFromParent.includes(
|
|
113
111
|
idMap[id].ContentType.toLowerCase()
|
|
114
112
|
))
|
|
@@ -141,7 +139,7 @@ class Folder extends MetadataType {
|
|
|
141
139
|
}
|
|
142
140
|
}
|
|
143
141
|
if (retrieveDir) {
|
|
144
|
-
const savedMetadata = await this.saveResults(metadata, retrieveDir, buObject.mid);
|
|
142
|
+
const savedMetadata = await this.saveResults(metadata, retrieveDir, this.buObject.mid);
|
|
145
143
|
Util.logger.info(
|
|
146
144
|
`Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})`
|
|
147
145
|
);
|
|
@@ -152,12 +150,12 @@ class Folder extends MetadataType {
|
|
|
152
150
|
/**
|
|
153
151
|
* Retrieves folder metadata for caching
|
|
154
152
|
*
|
|
155
|
-
* @param {
|
|
156
|
-
* @param {string[]} [
|
|
153
|
+
* @param {void} _ unused
|
|
154
|
+
* @param {string[]} [subTypeArr] content type of folder
|
|
157
155
|
* @returns {Promise} Promise
|
|
158
156
|
*/
|
|
159
|
-
static retrieveForCache(
|
|
160
|
-
return this.retrieve(null, null,
|
|
157
|
+
static retrieveForCache(_, subTypeArr) {
|
|
158
|
+
return this.retrieve(null, null, subTypeArr, null);
|
|
161
159
|
}
|
|
162
160
|
|
|
163
161
|
/**
|
|
@@ -16,11 +16,10 @@ class FtpLocation extends MetadataType {
|
|
|
16
16
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
17
17
|
* @param {void} [_] unused parameter
|
|
18
18
|
* @param {void} [__] unused parameter
|
|
19
|
-
* @param {void} [___] unused parameter
|
|
20
19
|
* @param {string} [key] customer key of single item to retrieve
|
|
21
20
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
22
21
|
*/
|
|
23
|
-
static retrieve(retrieveDir, _, __,
|
|
22
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
24
23
|
return super.retrieveREST(retrieveDir, '/automation/v1/ftplocations/', null, null, key);
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -20,11 +20,10 @@ class ImportFile extends MetadataType {
|
|
|
20
20
|
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
21
21
|
* @param {void} [_] unused parameter
|
|
22
22
|
* @param {void} [__] unused parameter
|
|
23
|
-
* @param {void} [___] unused parameter
|
|
24
23
|
* @param {string} [key] customer key of single item to retrieve
|
|
25
24
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
26
25
|
*/
|
|
27
|
-
static retrieve(retrieveDir, _, __,
|
|
26
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
28
27
|
return super.retrieveREST(retrieveDir, '/automation/v1/imports/', null, null, key);
|
|
29
28
|
}
|
|
30
29
|
|