mcdev 5.1.0 → 5.2.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/.eslintrc.json +4 -4
- package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +2 -2
- package/.github/workflows/coverage-develop-branch.yml +0 -2
- package/.github/workflows/coverage-main-branch.yml +0 -2
- package/.github/workflows/coverage.yml +0 -2
- package/.husky/post-checkout +1 -0
- package/.husky/post-merge +1 -0
- package/.vscode/extensions.json +4 -0
- package/docs/dist/documentation.md +633 -286
- package/lib/Deployer.js +25 -25
- package/lib/MetadataTypeDefinitions.js +1 -1
- package/lib/MetadataTypeInfo.js +1 -1
- package/lib/Retriever.js +1 -1
- package/lib/cli.js +159 -9
- package/lib/index.js +395 -95
- package/lib/metadataTypes/Asset.js +10 -11
- package/lib/metadataTypes/AttributeGroup.js +76 -2
- package/lib/metadataTypes/AttributeSet.js +260 -0
- package/lib/metadataTypes/Automation.js +413 -96
- package/lib/metadataTypes/DataExtension.js +2 -2
- package/lib/metadataTypes/DataExtensionField.js +1 -1
- package/lib/metadataTypes/Event.js +2 -3
- package/lib/metadataTypes/Folder.js +1 -1
- package/lib/metadataTypes/Journey.js +5 -6
- package/lib/metadataTypes/MetadataType.js +149 -49
- package/lib/metadataTypes/MobileKeyword.js +8 -8
- package/lib/metadataTypes/MobileMessage.js +5 -5
- package/lib/metadataTypes/Query.js +26 -10
- package/lib/metadataTypes/Script.js +3 -3
- package/lib/metadataTypes/TransactionalSMS.js +5 -5
- package/lib/metadataTypes/TriggeredSend.js +25 -50
- package/lib/metadataTypes/User.js +7 -4
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +117 -106
- package/lib/metadataTypes/definitions/{SetDefinition.definition.js → AttributeSet.definition.js} +54 -27
- package/lib/metadataTypes/definitions/Automation.definition.js +22 -15
- package/lib/metadataTypes/definitions/ImportFile.definition.js +36 -6
- package/lib/metadataTypes/definitions/TriggeredSend.definition.js +1 -0
- package/lib/util/cache.js +9 -4
- package/lib/util/cli.js +40 -0
- package/lib/util/file.js +2 -2
- package/lib/util/init.js +84 -0
- package/lib/util/util.js +121 -13
- package/package.json +11 -11
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +1 -2
- package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +5 -6
- package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +35 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +35 -0
- package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +17 -0
- package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +17 -0
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +29 -0
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +29 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +29 -0
- package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +29 -0
- package/test/resourceFactory.js +77 -12
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml +27 -0
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-response.xml +156 -0
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +87 -0
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-response.xml +156 -0
- package/test/resources/1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +27 -0
- package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +60 -0
- package/test/resources/1111111/user/retrieve-expected.md +4 -2
- package/test/resources/9999999/attributeGroup/retrieve-expected.json +25 -0
- package/test/resources/9999999/attributeSet/retrieve-expected.json +748 -0
- package/test/resources/9999999/automation/build-expected.json +1 -2
- package/test/resources/9999999/automation/create-expected.json +7 -8
- package/test/resources/9999999/automation/create-testNew_automation-expected.md +4 -4
- package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +44 -0
- package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +44 -0
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +42 -0
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +42 -0
- package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
- package/test/resources/9999999/automation/retrieve-expected.json +1 -2
- package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +2 -2
- package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
- package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-pause-response.xml +38 -0
- package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_pause-response.xml +52 -0
- package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +52 -0
- package/test/resources/9999999/automation/schedule-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
- package/test/resources/9999999/automation/template-expected.json +1 -2
- package/test/resources/9999999/automation/update-expected.json +1 -2
- package/test/resources/9999999/automation/update-testExisting_automation-expected.md +2 -2
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +85 -0
- package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +1 -1
- package/test/resources/9999999/automation/v1/automations/post-response.json +20 -19
- package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +38 -0
- package/test/resources/9999999/automation/v1/dataextracts/post-response.json +38 -0
- package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +50 -0
- package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/filetransfers/post-response.json +18 -0
- package/test/resources/9999999/automation/v1/ftplocations/get-response.json +18 -0
- package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +31 -0
- package/test/resources/9999999/automation/v1/imports/get-response.json +1 -1
- package/test/resources/9999999/automation/v1/imports/post-response.json +30 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +1 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +17 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/queries/get-response.json +18 -1
- package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +10 -0
- package/test/resources/9999999/automation/v1/scripts/get-response.json +12 -2
- package/test/resources/9999999/automation/v1/scripts/post-response.json +10 -0
- package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +52 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +98 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +99 -0
- package/test/resources/9999999/dataExtract/build-expected.json +35 -0
- package/test/resources/9999999/dataExtract/get-expected.json +39 -0
- package/test/resources/9999999/dataExtract/patch-expected.json +37 -0
- package/test/resources/9999999/dataExtract/post-expected.json +37 -0
- package/test/resources/9999999/dataExtract/template-expected.json +35 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml +136 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +48 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml +276 -0
- package/test/resources/9999999/dataFolder/retrieve-response.xml +23 -0
- package/test/resources/9999999/email/retrieve-response.xml +203 -0
- package/test/resources/9999999/fileTransfer/build-expected.json +15 -0
- package/test/resources/9999999/fileTransfer/get-expected.json +17 -0
- package/test/resources/9999999/fileTransfer/patch-expected.json +17 -0
- package/test/resources/9999999/fileTransfer/post-expected.json +17 -0
- package/test/resources/9999999/fileTransfer/template-expected.json +15 -0
- package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +585 -0
- package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +19807 -0
- package/test/resources/9999999/importFile/build-expected.json +27 -0
- package/test/resources/9999999/importFile/get-expected.json +29 -0
- package/test/resources/9999999/importFile/patch-expected.json +29 -0
- package/test/resources/9999999/importFile/post-expected.json +29 -0
- package/test/resources/9999999/importFile/template-expected.json +27 -0
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +32 -0
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +32 -0
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +32 -0
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +32 -0
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +30 -0
- package/test/resources/9999999/program/retrieve-response.xml +21 -3
- package/test/resources/9999999/query/patch_fixKeys-expected.json +11 -0
- package/test/resources/9999999/query/patch_fixKeys-expected.sql +6 -0
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +30 -0
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +30 -0
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +30 -0
- package/test/resources/9999999/script/build-expected.json +6 -0
- package/test/resources/9999999/script/build-expected.ssjs +1 -0
- package/test/resources/9999999/script/get-expected.json +8 -0
- package/test/resources/9999999/script/get-expected.ssjs +1 -0
- package/test/resources/9999999/script/get_noScriptTag-expected.html +1 -0
- package/test/resources/9999999/script/get_noScriptTag-expected.json +8 -0
- package/test/resources/9999999/script/patch-expected.json +8 -0
- package/test/resources/9999999/script/patch-expected.ssjs +1 -0
- package/test/resources/9999999/script/post-expected.json +8 -0
- package/test/resources/9999999/script/post-expected.ssjs +1 -0
- package/test/resources/9999999/script/template-expected.json +6 -0
- package/test/resources/9999999/script/template-expected.ssjs +1 -0
- package/test/resources/9999999/triggeredSend/build-expected.json +29 -0
- package/test/resources/9999999/triggeredSend/get-expected.json +29 -0
- package/test/resources/9999999/triggeredSend/patch-expected.json +29 -0
- package/test/resources/9999999/triggeredSend/post-expected.json +29 -0
- package/test/resources/9999999/triggeredSend/template-expected.json +29 -0
- package/test/resources/9999999/triggeredSendDefinition/create-response.xml +75 -0
- package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +36 -0
- package/test/resources/9999999/triggeredSendDefinition/{retrieve-response.xml → retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml} +4 -4
- package/test/resources/9999999/triggeredSendDefinition/update-response.xml +74 -0
- package/test/type.attributeGroup.test.js +55 -0
- package/test/type.attributeSet.test.js +55 -0
- package/test/type.automation.test.js +638 -11
- package/test/type.dataExtension.test.js +0 -1
- package/test/type.dataExtract.test.js +187 -0
- package/test/type.fileTransfer.test.js +185 -0
- package/test/type.importFile.test.js +186 -0
- package/test/type.mobileKeyword.test.js +0 -1
- package/test/type.query.test.js +464 -13
- package/test/type.script.test.js +367 -0
- package/test/type.triggeredSend.test.js +152 -0
- package/test/type.user.test.js +22 -10
- package/test/utils.js +4 -1
- package/lib/metadataTypes/SetDefinition.js +0 -37
- /package/test/resources/1111111/accountUser/{retrieve-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml} +0 -0
- /package/test/resources/1111111/accountUserAccount/{retrieve-response.xml → retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml} +0 -0
- /package/test/resources/1111111/businessUnit/{retrieve-response.xml → retrieve-ID=1111111-response.xml} +0 -0
- /package/test/resources/1111111/list/{retrieve-response.xml → retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml} +0 -0
- /package/test/resources/1111111/role/{retrieve-response.xml → retrieve-IsPrivate=false-response.xml} +0 -0
- /package/test/resources/9999999/emailSendDefinition/{retrieve-response.xml → retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml} +0 -0
- /package/test/resources/9999999/queryDefinition/{retrieve-response.xml → retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml} +0 -0
|
@@ -38,7 +38,9 @@ class Query extends MetadataType {
|
|
|
38
38
|
objectId = await this._getObjectIdForSingleRetrieve(key);
|
|
39
39
|
if (!objectId) {
|
|
40
40
|
// avoid running the rest request below by returning early
|
|
41
|
-
Util.logger.info(
|
|
41
|
+
Util.logger.info(
|
|
42
|
+
`Downloaded: ${this.definition.type} (0)${Util.getKeysString(key)}`
|
|
43
|
+
);
|
|
42
44
|
return { metadata: {}, type: this.definition.type };
|
|
43
45
|
}
|
|
44
46
|
}
|
|
@@ -54,7 +56,7 @@ class Query extends MetadataType {
|
|
|
54
56
|
* a function to start query execution via API
|
|
55
57
|
*
|
|
56
58
|
* @param {string[]} keyArr customerkey of the metadata
|
|
57
|
-
* @returns {Promise.<
|
|
59
|
+
* @returns {Promise.<string[]>} Returns list of keys that were executed successfully
|
|
58
60
|
*/
|
|
59
61
|
static async execute(keyArr) {
|
|
60
62
|
const results = [];
|
|
@@ -65,16 +67,18 @@ class Query extends MetadataType {
|
|
|
65
67
|
objectId = await this._getObjectIdForSingleRetrieve(key);
|
|
66
68
|
if (!objectId) {
|
|
67
69
|
Util.logger.info(`Skipping ${key} - did not find an item with such key`);
|
|
68
|
-
|
|
70
|
+
continue;
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
results.push(
|
|
72
74
|
super.executeREST(`/automation/v1/queries/${objectId}/actions/start/`, key)
|
|
73
75
|
);
|
|
74
76
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
const executedKeyArr = (await Promise.all(results))
|
|
78
|
+
.filter((r) => r.response === 'OK')
|
|
79
|
+
.map((r) => r.key);
|
|
80
|
+
Util.logger.info(`Executed ${executedKeyArr.length} of ${keyArr.length} items`);
|
|
81
|
+
return executedKeyArr;
|
|
78
82
|
}
|
|
79
83
|
/**
|
|
80
84
|
* helper to allow us to select single metadata entries via REST
|
|
@@ -250,7 +254,7 @@ class Query extends MetadataType {
|
|
|
250
254
|
return metadata;
|
|
251
255
|
}
|
|
252
256
|
/**
|
|
253
|
-
* helper for {@link buildDefinitionForNested}
|
|
257
|
+
* helper for {@link Query.buildDefinitionForNested}
|
|
254
258
|
* searches extracted SQL file for template variables and applies the market values
|
|
255
259
|
*
|
|
256
260
|
* @param {string} code code from extracted code
|
|
@@ -328,7 +332,7 @@ class Query extends MetadataType {
|
|
|
328
332
|
);
|
|
329
333
|
}
|
|
330
334
|
/**
|
|
331
|
-
* helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested}
|
|
335
|
+
* helper for {@link Query.buildTemplateForNested} / {@link Query.buildDefinitionForNested}
|
|
332
336
|
* handles extracted code if any are found for complex types
|
|
333
337
|
*
|
|
334
338
|
* @private
|
|
@@ -420,11 +424,12 @@ class Query extends MetadataType {
|
|
|
420
424
|
* @param {object} ex response payload from REST API
|
|
421
425
|
* @returns {string[] | void} formatted Error Message
|
|
422
426
|
*/
|
|
423
|
-
static
|
|
424
|
-
const errors = super.
|
|
427
|
+
static getErrorsREST(ex) {
|
|
428
|
+
const errors = super.getErrorsREST(ex);
|
|
425
429
|
if (errors?.length > 0) {
|
|
426
430
|
return errors.map((msg) => msg.split('Error saving the Query field.').join(''));
|
|
427
431
|
}
|
|
432
|
+
return errors;
|
|
428
433
|
}
|
|
429
434
|
/**
|
|
430
435
|
* Delete a metadata item from the specified business unit
|
|
@@ -452,6 +457,17 @@ class Query extends MetadataType {
|
|
|
452
457
|
// delete local copy: retrieve/cred/bu/.../...-meta.sql
|
|
453
458
|
await super.postDeleteTasks(customerKey, [`${this.definition.type}-meta.sql`]);
|
|
454
459
|
}
|
|
460
|
+
/**
|
|
461
|
+
* Gets executed after deployment of metadata type
|
|
462
|
+
*
|
|
463
|
+
* @param {TYPE.MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create
|
|
464
|
+
*/
|
|
465
|
+
static async postDeployTasks(upsertResults) {
|
|
466
|
+
if (Util.OPTIONS.execute) {
|
|
467
|
+
Util.logger.info(`Executing: ${this.definition.type}`);
|
|
468
|
+
await this.execute(Object.keys(upsertResults));
|
|
469
|
+
}
|
|
470
|
+
}
|
|
455
471
|
}
|
|
456
472
|
|
|
457
473
|
// Assign definition & cache to static attributes
|
|
@@ -82,7 +82,7 @@ class Script extends MetadataType {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
/**
|
|
85
|
-
* helper for {@link preDeployTasks} that loads extracted code content back into JSON
|
|
85
|
+
* helper for {@link Script.preDeployTasks} that loads extracted code content back into JSON
|
|
86
86
|
*
|
|
87
87
|
* @param {TYPE.ScriptItem} metadata a single asset definition
|
|
88
88
|
* @param {string} deployDir directory of deploy files
|
|
@@ -189,7 +189,7 @@ class Script extends MetadataType {
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
/**
|
|
192
|
-
* helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested}
|
|
192
|
+
* helper for {@link Script.buildTemplateForNested} / {@link Script.buildDefinitionForNested}
|
|
193
193
|
* handles extracted code if any are found for complex types
|
|
194
194
|
*
|
|
195
195
|
* @param {string} templateDir Directory where metadata templates are stored
|
|
@@ -279,7 +279,7 @@ class Script extends MetadataType {
|
|
|
279
279
|
return { json: metadata, codeArr: codeArr, subFolder: null };
|
|
280
280
|
}
|
|
281
281
|
/**
|
|
282
|
-
* helper for {@link parseMetadata} and {@link _buildForNested}
|
|
282
|
+
* helper for {@link Script.parseMetadata} and {@link Script._buildForNested}
|
|
283
283
|
*
|
|
284
284
|
* @param {string} metadataScript the code of the file
|
|
285
285
|
* @param {string} metadataName the name of the metadata
|
|
@@ -66,7 +66,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
66
66
|
return metadata;
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
|
-
* helper for {@link preDeployTasks} that loads extracted code content back into JSON
|
|
69
|
+
* helper for {@link TransactionalSMS.preDeployTasks} that loads extracted code content back into JSON
|
|
70
70
|
*
|
|
71
71
|
* @param {TYPE.MetadataTypeItem} metadata a single definition
|
|
72
72
|
* @param {string} deployDir directory of deploy files
|
|
@@ -158,7 +158,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
158
158
|
return { json: metadata, codeArr: codeArr, subFolder: null };
|
|
159
159
|
}
|
|
160
160
|
/**
|
|
161
|
-
* helper for {@link
|
|
161
|
+
* helper for {@link TransactionalSMS.postRetrieveTasks} and {@link TransactionalSMS._buildForNested}
|
|
162
162
|
*
|
|
163
163
|
* @param {string} metadataScript the code of the file
|
|
164
164
|
* @returns {{fileExt:string,code:string}} returns found extension and file content
|
|
@@ -189,7 +189,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
189
189
|
return { fileExt, code };
|
|
190
190
|
}
|
|
191
191
|
/**
|
|
192
|
-
* helper for {@link
|
|
192
|
+
* helper for {@link TransactionalMessage.buildDefinition}
|
|
193
193
|
* handles extracted code if any are found for complex types
|
|
194
194
|
*
|
|
195
195
|
* @param {string} templateDir Directory where metadata templates are stored
|
|
@@ -216,7 +216,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
216
216
|
);
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
|
-
* helper for {@link
|
|
219
|
+
* helper for {@link TransactionalMessage.buildTemplate}
|
|
220
220
|
* handles extracted code if any are found for complex types
|
|
221
221
|
*
|
|
222
222
|
* @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating
|
|
@@ -245,7 +245,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
/**
|
|
248
|
-
* helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested}
|
|
248
|
+
* helper for {@link TransactionalSMS.buildTemplateForNested} / {@link TransactionalSMS.buildDefinitionForNested}
|
|
249
249
|
* handles extracted code if any are found for complex types
|
|
250
250
|
*
|
|
251
251
|
* @param {string} templateDir Directory where metadata templates are stored
|
|
@@ -85,51 +85,19 @@ class TriggeredSend extends MetadataType {
|
|
|
85
85
|
return super.deleteByKeySOAP(customerKey);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
/**
|
|
89
|
-
* manages post retrieve steps
|
|
90
|
-
*
|
|
91
|
-
* @param {TYPE.MetadataTypeItem} metadata a single query
|
|
92
|
-
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
|
|
93
|
-
*/
|
|
94
|
-
static postRetrieveTasks(metadata) {
|
|
95
|
-
return this.parseMetadata(metadata);
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
|
|
99
|
-
*
|
|
100
|
-
* @param {TYPE.MetadataTypeItem} metadata a single script activity definition
|
|
101
|
-
*/
|
|
102
|
-
static setFolderPath(metadata) {
|
|
103
|
-
try {
|
|
104
|
-
metadata.r__folder_Path = cache.searchForField(
|
|
105
|
-
'folder',
|
|
106
|
-
metadata[this.definition.folderIdField],
|
|
107
|
-
'ID',
|
|
108
|
-
'Path'
|
|
109
|
-
);
|
|
110
|
-
delete metadata[this.definition.folderIdField];
|
|
111
|
-
} catch (ex) {
|
|
112
|
-
Util.logger.verbose(
|
|
113
|
-
` - skipping ${this.definition.type} '${metadata[this.definition.nameField]}' (${
|
|
114
|
-
metadata[this.definition.keyField]
|
|
115
|
-
}): Could not find folder (${ex.message})`
|
|
116
|
-
);
|
|
117
|
-
throw ex;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
88
|
/**
|
|
121
89
|
* parses retrieved Metadata before saving
|
|
122
90
|
*
|
|
123
|
-
* @param {TYPE.MetadataTypeItem} metadata a single
|
|
91
|
+
* @param {TYPE.MetadataTypeItem} metadata a single item
|
|
124
92
|
* @returns {TYPE.MetadataTypeItem | void} Array with one metadata object and one sql string
|
|
125
93
|
*/
|
|
126
|
-
static
|
|
94
|
+
static postRetrieveTasks(metadata) {
|
|
127
95
|
// remove IsPlatformObject, always has to be 'false'
|
|
128
96
|
delete metadata.IsPlatformObject;
|
|
97
|
+
|
|
129
98
|
// folder
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
} catch {
|
|
99
|
+
this.setFolderPath(metadata);
|
|
100
|
+
if (!metadata.r__folder_Path) {
|
|
133
101
|
Util.logger.verbose(
|
|
134
102
|
` ☇ skipping ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find folder.`
|
|
135
103
|
);
|
|
@@ -163,7 +131,7 @@ class TriggeredSend extends MetadataType {
|
|
|
163
131
|
delete metadata.Email;
|
|
164
132
|
} catch {
|
|
165
133
|
Util.logger.verbose(
|
|
166
|
-
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder. This TSD cannot be
|
|
134
|
+
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder. This TSD cannot be republished but potentially restarted with its cached version of the email.`
|
|
167
135
|
);
|
|
168
136
|
// save this TSD because it could be fixed by the user or potentially restarted without a fix; also, it might be used by a journey
|
|
169
137
|
}
|
|
@@ -246,7 +214,7 @@ class TriggeredSend extends MetadataType {
|
|
|
246
214
|
* TSD-specific refresh method that finds active TSDs and refreshes them
|
|
247
215
|
*
|
|
248
216
|
* @param {string[]} [keyArr] metadata keys
|
|
249
|
-
* @param {boolean} [checkKey
|
|
217
|
+
* @param {boolean} [checkKey] whether to check if the key is valid
|
|
250
218
|
* @returns {Promise.<void>} -
|
|
251
219
|
*/
|
|
252
220
|
static async refresh(keyArr, checkKey = true) {
|
|
@@ -268,7 +236,7 @@ class TriggeredSend extends MetadataType {
|
|
|
268
236
|
}
|
|
269
237
|
|
|
270
238
|
/**
|
|
271
|
-
* helper for {@link refresh} that extracts the keys from the TSD item map and eli
|
|
239
|
+
* helper for {@link TriggeredSend.refresh} that extracts the keys from the TSD item map and eli
|
|
272
240
|
*
|
|
273
241
|
* @param {TYPE.MetadataTypeMapObj} metadata TSD item map
|
|
274
242
|
* @returns {Promise.<string[]>} keyArr
|
|
@@ -282,11 +250,12 @@ class TriggeredSend extends MetadataType {
|
|
|
282
250
|
return keyArr;
|
|
283
251
|
}
|
|
284
252
|
/**
|
|
285
|
-
* helper for {@link refresh} that finds active TSDs on the server and filters it by the same rules that {@link retrieve} is using to avoid refreshing TSDs with broken dependencies
|
|
253
|
+
* helper for {@link TriggeredSend.refresh} that finds active TSDs on the server and filters it by the same rules that {@link TriggeredSend.retrieve} is using to avoid refreshing TSDs with broken dependencies
|
|
286
254
|
*
|
|
255
|
+
* @param {boolean} [assetLoaded] if run after Asset.deploy via --refresh option this will skip caching assets
|
|
287
256
|
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of TSD item map
|
|
288
257
|
*/
|
|
289
|
-
static async findRefreshableItems() {
|
|
258
|
+
static async findRefreshableItems(assetLoaded = false) {
|
|
290
259
|
Util.logger.info('Finding refreshable items...');
|
|
291
260
|
// cache dependencies to test for broken links
|
|
292
261
|
// skip deprecated classic emails here, assuming they cannot be updated and hence are not relevant for {@link refresh}
|
|
@@ -305,14 +274,20 @@ class TriggeredSend extends MetadataType {
|
|
|
305
274
|
list: null,
|
|
306
275
|
};
|
|
307
276
|
for (const [type, subTypeArr] of Object.entries(requiredCache)) {
|
|
308
|
-
if (
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
277
|
+
if (type === 'asset' && assetLoaded) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
Util.logger.info(` - Caching dependent Metadata: ${type}`);
|
|
281
|
+
Util.logSubtypes(subTypeArr);
|
|
282
|
+
cacheTypes[type].client = this.client;
|
|
283
|
+
cacheTypes[type].buObject = this.buObject;
|
|
284
|
+
cacheTypes[type].properties = this.properties;
|
|
314
285
|
|
|
315
|
-
|
|
286
|
+
const result = await cacheTypes[type].retrieveForCache(null, subTypeArr);
|
|
287
|
+
if (cache.getCache()?.[type]) {
|
|
288
|
+
// re-run caching to merge with existing cache, assuming we might have missed subtypes
|
|
289
|
+
cache.mergeMetadata(type, result.metadata);
|
|
290
|
+
} else {
|
|
316
291
|
cache.setMetadata(type, result.metadata);
|
|
317
292
|
}
|
|
318
293
|
}
|
|
@@ -329,7 +304,7 @@ class TriggeredSend extends MetadataType {
|
|
|
329
304
|
}
|
|
330
305
|
|
|
331
306
|
/**
|
|
332
|
-
* helper for {@link refresh} that pauses, publishes and starts a triggered send
|
|
307
|
+
* helper for {@link TriggeredSend.refresh} that pauses, publishes and starts a triggered send
|
|
333
308
|
*
|
|
334
309
|
* @param {string} key external key of triggered send item
|
|
335
310
|
* @param {boolean} checkKey whether to check if key exists on the server
|
|
@@ -404,8 +404,11 @@ class User extends MetadataType {
|
|
|
404
404
|
if (!metadata.Password) {
|
|
405
405
|
metadata.Password = this._generatePassword();
|
|
406
406
|
Util.logger.info(
|
|
407
|
-
` - Password for ${metadata.UserID} was not given. Generated password
|
|
407
|
+
` - Password for ${metadata.UserID} was not given. Generated password:`
|
|
408
408
|
);
|
|
409
|
+
// use console.log here to print the generated password to bypass the logfile
|
|
410
|
+
// eslint-disable-next-line no-console
|
|
411
|
+
console.log(metadata.Password);
|
|
409
412
|
}
|
|
410
413
|
}
|
|
411
414
|
|
|
@@ -510,7 +513,7 @@ class User extends MetadataType {
|
|
|
510
513
|
* @param {string} roleName role.Name
|
|
511
514
|
* @param {number} userId user.AccountUserID
|
|
512
515
|
* @param {boolean} assignmentOnly if true, only assignment configuration will be returned
|
|
513
|
-
* @param {boolean} [isRoleRemovale
|
|
516
|
+
* @param {boolean} [isRoleRemovale] if true, role will be removed from user; otherwise added
|
|
514
517
|
* @returns {object} format needed by API
|
|
515
518
|
*/
|
|
516
519
|
static _getRoleObjectForDeploy(
|
|
@@ -737,7 +740,7 @@ class User extends MetadataType {
|
|
|
737
740
|
}
|
|
738
741
|
|
|
739
742
|
/**
|
|
740
|
-
* helper for {@link retrieveSOAP}
|
|
743
|
+
* helper for {@link User.retrieveSOAP}
|
|
741
744
|
*
|
|
742
745
|
* @private
|
|
743
746
|
* @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example)
|
|
@@ -897,7 +900,7 @@ class User extends MetadataType {
|
|
|
897
900
|
}
|
|
898
901
|
}
|
|
899
902
|
/**
|
|
900
|
-
* helper for {@link createOrUpdate} to generate a random initial password for new users
|
|
903
|
+
* helper for {@link User.createOrUpdate} to generate a random initial password for new users
|
|
901
904
|
* note: possible minimum length values in SFMC are 6, 8, 10, 15 chars. Therefore we should default here to 15 chars.
|
|
902
905
|
*
|
|
903
906
|
* @private
|