mcdev 5.2.0 → 6.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.
- package/.eslintrc.json +1 -1
- package/.fork/custom-commands.json +12 -0
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +19 -0
- package/.github/workflows/code-test.yml +1 -1
- package/.github/workflows/coverage-base-update.yml +1 -1
- package/.github/workflows/coverage-develop-branch.yml +2 -2
- package/.github/workflows/coverage-main-branch.yml +2 -2
- package/.github/workflows/coverage.yml +2 -2
- package/.github/workflows/npm-publish.yml +2 -2
- package/.prettierrc +7 -0
- package/docs/dist/documentation.md +388 -482
- package/jsconfig.json +5 -1
- package/lib/Builder.js +8 -8
- package/lib/Deployer.js +10 -10
- package/lib/MetadataTypeDefinitions.js +73 -38
- package/lib/MetadataTypeInfo.js +72 -37
- package/lib/Retriever.js +8 -8
- package/lib/cli.js +12 -7
- package/lib/index.js +28 -18
- package/lib/metadataTypes/Asset.js +12 -10
- package/lib/metadataTypes/AttributeGroup.js +7 -6
- package/lib/metadataTypes/AttributeSet.js +126 -18
- package/lib/metadataTypes/Automation.js +107 -78
- package/lib/metadataTypes/Campaign.js +7 -6
- package/lib/metadataTypes/ContentArea.js +7 -6
- package/lib/metadataTypes/DataExtension.js +475 -78
- package/lib/metadataTypes/DataExtensionField.js +36 -18
- package/lib/metadataTypes/DataExtensionTemplate.js +5 -4
- package/lib/metadataTypes/DataExtract.js +8 -7
- package/lib/metadataTypes/DataExtractType.js +5 -4
- package/lib/metadataTypes/Discovery.js +6 -5
- package/lib/metadataTypes/Email.js +6 -5
- package/lib/metadataTypes/EmailSend.js +7 -6
- package/lib/metadataTypes/Event.js +8 -7
- package/lib/metadataTypes/FileLocation.js +5 -4
- package/lib/metadataTypes/FileTransfer.js +8 -7
- package/lib/metadataTypes/Filter.js +5 -4
- package/lib/metadataTypes/Folder.js +9 -8
- package/lib/metadataTypes/ImportFile.js +8 -7
- package/lib/metadataTypes/Journey.js +17 -9
- package/lib/metadataTypes/List.js +9 -8
- package/lib/metadataTypes/MetadataType.js +100 -34
- package/lib/metadataTypes/MobileCode.js +5 -4
- package/lib/metadataTypes/MobileKeyword.js +9 -8
- package/lib/metadataTypes/MobileMessage.js +8 -7
- package/lib/metadataTypes/Query.js +9 -8
- package/lib/metadataTypes/Role.js +8 -7
- package/lib/metadataTypes/Script.js +7 -6
- package/lib/metadataTypes/SendClassification.js +5 -4
- package/lib/metadataTypes/TransactionalEmail.js +101 -23
- package/lib/metadataTypes/TransactionalMessage.js +9 -7
- package/lib/metadataTypes/TransactionalPush.js +7 -6
- package/lib/metadataTypes/TransactionalSMS.js +9 -8
- package/lib/metadataTypes/TriggeredSend.js +15 -12
- package/lib/metadataTypes/User.js +8 -7
- package/lib/metadataTypes/Verification.js +230 -0
- package/lib/metadataTypes/definitions/Asset.definition.js +1 -1
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +3 -3
- package/lib/metadataTypes/definitions/AttributeSet.definition.js +75 -22
- package/lib/metadataTypes/definitions/Automation.definition.js +2 -1
- package/lib/metadataTypes/definitions/Campaign.definition.js +1 -1
- package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -1
- package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -1
- package/lib/metadataTypes/definitions/Discovery.definition.js +1 -1
- package/lib/metadataTypes/definitions/Email.definition.js +1 -1
- package/lib/metadataTypes/definitions/EmailSend.definition.js +1 -1
- package/lib/metadataTypes/definitions/Event.definition.js +1 -1
- package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -1
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +1 -1
- package/lib/metadataTypes/definitions/Filter.definition.js +1 -1
- package/lib/metadataTypes/definitions/Folder.definition.js +1 -1
- package/lib/metadataTypes/definitions/ImportFile.definition.js +1 -1
- package/lib/metadataTypes/definitions/Journey.definition.js +1 -1
- package/lib/metadataTypes/definitions/List.definition.js +1 -1
- package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -1
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +1 -1
- package/lib/metadataTypes/definitions/MobileMessage.definition.js +1 -1
- package/lib/metadataTypes/definitions/Query.definition.js +1 -1
- package/lib/metadataTypes/definitions/Role.definition.js +1 -1
- package/lib/metadataTypes/definitions/Script.definition.js +1 -1
- package/lib/metadataTypes/definitions/SendClassification.definition.js +1 -1
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +20 -2
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -1
- package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +1 -1
- package/lib/metadataTypes/definitions/TriggeredSend.definition.js +1 -1
- package/lib/metadataTypes/definitions/User.definition.js +1 -1
- package/lib/metadataTypes/definitions/Verification.definition.js +88 -0
- package/lib/retrieveChangelog.js +4 -3
- package/lib/util/auth.js +11 -8
- package/lib/util/businessUnit.js +5 -5
- package/lib/util/cache.js +3 -3
- package/lib/util/cli.js +15 -13
- package/lib/util/config.js +10 -7
- package/lib/util/devops.js +12 -11
- package/lib/util/file.js +15 -14
- package/lib/util/init.config.js +11 -9
- package/lib/util/init.git.js +8 -7
- package/lib/util/init.js +12 -12
- package/lib/util/init.npm.js +7 -5
- package/lib/util/util.js +14 -12
- package/package.json +32 -27
- package/test/general.test.js +4 -6
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +59 -0
- package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +23 -0
- package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +3 -4
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -6
- package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
- package/test/resourceFactory.js +52 -26
- package/test/resources/1111111/data/v1/customobjectdata/key/testExisting_dataExtensionShared/rowset/get-response.json +13 -0
- package/test/resources/1111111/dataExtension/create-expected.json +23 -0
- package/test/resources/1111111/dataExtension/create-response.xml +59 -0
- package/test/resources/1111111/dataExtension/retrieve-expected.json +55 -0
- package/test/resources/1111111/dataExtension/retrieve-expected.md +18 -0
- package/test/resources/1111111/dataExtension/retrieve-response.xml +27 -1
- package/test/resources/1111111/dataExtension/update-expected.json +55 -0
- package/test/resources/1111111/dataExtension/update-response.xml +57 -0
- package/test/resources/1111111/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtensionShared].[TriggerUpdate_randomNumber_]-response.xml +45 -0
- package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
- package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionSharedORDataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
- package/test/resources/1111111/dataExtensionField/retrieve-response.xml +98 -0
- package/test/resources/1111111/dataExtensionTemplate/retrieve-response.xml +303 -0
- package/test/resources/1111111/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +387 -0
- package/test/resources/1111111/dataFolder/retrieve-response.xml +353 -9
- package/test/resources/9999999/attributeSet/retrieve-expected.json +89 -694
- package/test/resources/9999999/automation/build-expected.json +4 -0
- package/test/resources/9999999/automation/create-expected.json +4 -0
- package/test/resources/9999999/automation/create-testNew_automation-expected.md +1 -0
- package/test/resources/9999999/automation/retrieve-expected.json +4 -0
- package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +1 -0
- package/test/resources/9999999/automation/template-expected.json +4 -0
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +7 -0
- package/test/resources/9999999/automation/v1/automations/post-response.json +7 -0
- package/test/resources/9999999/automation/v1/dataverifications/post-response.json +12 -0
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/delete-response.json +0 -0
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/get-response.json +12 -0
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/patch-response.json +12 -0
- package/test/resources/9999999/dataExtension/build-expected.json +16 -0
- package/test/resources/9999999/dataExtension/delete-response.xml +42 -0
- package/test/resources/9999999/dataExtension/retrieve-expected.json +16 -0
- package/test/resources/9999999/dataExtension/retrieve-expected.md +3 -1
- package/test/resources/9999999/dataExtension/template-expected.json +16 -0
- package/test/resources/9999999/dataExtension/update-expected.json +17 -1
- package/test/resources/9999999/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtension].[LastName]-response.xml +44 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +36 -1
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +36 -1
- package/test/resources/9999999/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +117 -0
- package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +43 -0
- package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +387 -0
- package/test/resources/9999999/interaction/v1/interactions/233d4413-922c-4568-85a5-e5cc77efc3be/delete-response.json +1 -0
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +1 -1
- package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/delete-response.json +6 -0
- package/test/resources/9999999/transactionalEmail/build-expected.json +3 -7
- package/test/resources/9999999/transactionalEmail/get-expected.json +3 -7
- package/test/resources/9999999/transactionalEmail/patch-expected.json +3 -7
- package/test/resources/9999999/transactionalEmail/post-expected.json +3 -7
- package/test/resources/9999999/transactionalEmail/template-expected.json +3 -7
- package/test/resources/9999999/verification/build-expected.json +11 -0
- package/test/resources/9999999/verification/get-expected.json +11 -0
- package/test/resources/9999999/verification/patch-expected.json +11 -0
- package/test/resources/9999999/verification/post-expected.json +11 -0
- package/test/resources/9999999/verification/template-expected.json +11 -0
- package/test/type.attributeGroup.test.js +9 -12
- package/test/type.attributeSet.test.js +10 -13
- package/test/type.automation.test.js +34 -32
- package/test/type.dataExtension.test.js +210 -54
- package/test/type.dataExtract.test.js +15 -9
- package/test/type.fileTransfer.test.js +15 -9
- package/test/type.importFile.test.js +15 -9
- package/test/type.journey.test.js +43 -17
- package/test/type.mobileKeyword.test.js +11 -11
- package/test/type.mobileMessage.test.js +11 -11
- package/test/type.query.test.js +13 -14
- package/test/type.script.test.js +11 -9
- package/test/type.transactionalEmail.test.js +17 -17
- package/test/type.transactionalPush.test.js +7 -10
- package/test/type.transactionalSMS.test.js +7 -11
- package/test/type.triggeredSend.test.js +11 -10
- package/test/type.user.test.js +6 -8
- package/test/type.verification.test.js +172 -0
- package/test/utils.js +68 -48
- package/types/mcdev.d.js +16 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import TYPE from '../../types/mcdev.d.js';
|
|
4
|
+
import TransactionalMessage from './TransactionalMessage.js';
|
|
5
|
+
import { Util } from '../util/util.js';
|
|
6
|
+
import File from '../util/file.js';
|
|
7
|
+
import beautifier from 'beauty-amp-core';
|
|
8
|
+
import cache from '../util/cache.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* TransactionalSMS MetadataType
|
|
@@ -341,6 +341,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
// Assign definition to static attributes
|
|
344
|
-
|
|
344
|
+
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
345
|
+
TransactionalSMS.definition = MetadataTypeDefinitions.transactionalSMS;
|
|
345
346
|
|
|
346
|
-
|
|
347
|
+
export default TransactionalSMS;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
folder: require('./Folder'),
|
|
11
|
-
list: require('./List'),
|
|
12
|
-
};
|
|
3
|
+
import TYPE from '../../types/mcdev.d.js';
|
|
4
|
+
import MetadataType from './MetadataType.js';
|
|
5
|
+
import { Util } from '../util/util.js';
|
|
6
|
+
import cache from '../util/cache.js';
|
|
7
|
+
import asset from './Asset.js';
|
|
8
|
+
import folder from './Folder.js';
|
|
9
|
+
import list from './List.js';
|
|
13
10
|
|
|
14
11
|
/**
|
|
15
12
|
* MessageSendActivity MetadataType
|
|
@@ -273,6 +270,11 @@ class TriggeredSend extends MetadataType {
|
|
|
273
270
|
asset: ['message'],
|
|
274
271
|
list: null,
|
|
275
272
|
};
|
|
273
|
+
const cacheTypes = {
|
|
274
|
+
asset,
|
|
275
|
+
folder,
|
|
276
|
+
list,
|
|
277
|
+
};
|
|
276
278
|
for (const [type, subTypeArr] of Object.entries(requiredCache)) {
|
|
277
279
|
if (type === 'asset' && assetLoaded) {
|
|
278
280
|
continue;
|
|
@@ -406,6 +408,7 @@ class TriggeredSend extends MetadataType {
|
|
|
406
408
|
}
|
|
407
409
|
|
|
408
410
|
// Assign definition to static attributes
|
|
409
|
-
|
|
411
|
+
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
412
|
+
TriggeredSend.definition = MetadataTypeDefinitions.triggeredSend;
|
|
410
413
|
|
|
411
|
-
|
|
414
|
+
export default TriggeredSend;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import TYPE from '../../types/mcdev.d.js';
|
|
4
|
+
import MetadataType from './MetadataType.js';
|
|
5
|
+
import { Util } from '../util/util.js';
|
|
6
|
+
import File from '../util/file.js';
|
|
7
|
+
import cache from '../util/cache.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* MetadataType
|
|
@@ -1169,6 +1169,7 @@ class User extends MetadataType {
|
|
|
1169
1169
|
}
|
|
1170
1170
|
|
|
1171
1171
|
// Assign definition to static attributes
|
|
1172
|
-
|
|
1172
|
+
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
1173
|
+
User.definition = MetadataTypeDefinitions.user;
|
|
1173
1174
|
|
|
1174
|
-
|
|
1175
|
+
export default User;
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import Automation from './Automation.js';
|
|
4
|
+
import MetadataType from './MetadataType.js';
|
|
5
|
+
import TYPE from '../../types/mcdev.d.js';
|
|
6
|
+
import { Util } from '../util/util.js';
|
|
7
|
+
import cache from '../util/cache.js';
|
|
8
|
+
/**
|
|
9
|
+
* Verification MetadataType
|
|
10
|
+
*
|
|
11
|
+
* @augments MetadataType
|
|
12
|
+
*/
|
|
13
|
+
class Verification extends MetadataType {
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves Metadata of Data Verification Activity.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
|
+
* @param {void} [_] unused parameter
|
|
19
|
+
* @param {void} [__] unused parameter
|
|
20
|
+
* @param {string} key customer key of single item to retrieve
|
|
21
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
22
|
+
*/
|
|
23
|
+
static async retrieve(retrieveDir, _, __, key) {
|
|
24
|
+
let paramArr = [];
|
|
25
|
+
if (key?.startsWith('id:')) {
|
|
26
|
+
paramArr = [key.slice(3)];
|
|
27
|
+
} else if (key) {
|
|
28
|
+
paramArr = [key];
|
|
29
|
+
}
|
|
30
|
+
if (!paramArr.length) {
|
|
31
|
+
// there is no API endpoint to retrieve all dataVerification items, so we need to retrieve all automations and iterate over their activities
|
|
32
|
+
Util.logger.info(` - Caching dependent Metadata: automation`);
|
|
33
|
+
Automation.client = this.client;
|
|
34
|
+
Automation.buObject = this.buObject;
|
|
35
|
+
Automation.properties = this.properties;
|
|
36
|
+
Automation._skipNotificationRetrieve = true;
|
|
37
|
+
delete Automation._cachedMetadataMap;
|
|
38
|
+
const automationsMapObj = await Automation.retrieve();
|
|
39
|
+
delete Automation._skipNotificationRetrieve;
|
|
40
|
+
if (automationsMapObj?.metadata && Object.keys(automationsMapObj?.metadata).length) {
|
|
41
|
+
if (!key) {
|
|
42
|
+
// if we are not retrieving a single item, cache the automations for later use during retrieval of automations
|
|
43
|
+
Automation._cachedMetadataMap = automationsMapObj?.metadata;
|
|
44
|
+
}
|
|
45
|
+
// automations found, lets iterate over their activities to find the dataVerification items
|
|
46
|
+
const dataVerificationIds = [];
|
|
47
|
+
for (const automation of Object.values(automationsMapObj.metadata)) {
|
|
48
|
+
if (automation.steps) {
|
|
49
|
+
for (const step of automation.steps) {
|
|
50
|
+
for (const activity of step.activities) {
|
|
51
|
+
if (
|
|
52
|
+
activity.objectTypeId === 1000 &&
|
|
53
|
+
activity.activityObjectId &&
|
|
54
|
+
activity.activityObjectId !==
|
|
55
|
+
'00000000-0000-0000-0000-000000000000'
|
|
56
|
+
) {
|
|
57
|
+
dataVerificationIds.push(activity.activityObjectId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (dataVerificationIds.length) {
|
|
64
|
+
paramArr.push(...dataVerificationIds);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const results = {};
|
|
69
|
+
if (paramArr.length) {
|
|
70
|
+
const response = await this.retrieveRESTcollection(
|
|
71
|
+
paramArr.map((id) => ({ id, uri: '/automation/v1/dataverifications/' + id })),
|
|
72
|
+
undefined,
|
|
73
|
+
!key
|
|
74
|
+
);
|
|
75
|
+
if (response?.metadata) {
|
|
76
|
+
Object.assign(results, response.metadata);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (retrieveDir) {
|
|
80
|
+
const savedMetadata = await this.saveResults(results, retrieveDir, null, null);
|
|
81
|
+
Util.logger.info(
|
|
82
|
+
`Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})` +
|
|
83
|
+
Util.getKeysString(key)
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
metadata: results,
|
|
89
|
+
type: this.definition.type,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* helper for {@link this.retrieveRESTcollection}
|
|
94
|
+
*
|
|
95
|
+
* @param {Error} ex exception
|
|
96
|
+
* @param {string} id id or key of item
|
|
97
|
+
* @returns {null} -
|
|
98
|
+
*/
|
|
99
|
+
static handleRESTErrors(ex, id) {
|
|
100
|
+
if (ex.message === 'Not Found' || ex.message === 'Request failed with status code 400') {
|
|
101
|
+
// if the ID is too short, the system will throw the 400 error
|
|
102
|
+
Util.logger.debug(
|
|
103
|
+
` ☇ skipping ${this.definition.type} ${id}: ${ex.message} ${ex.code}`
|
|
104
|
+
);
|
|
105
|
+
} else {
|
|
106
|
+
// if we do get here, we should log the error and continue instead of failing to download all automations
|
|
107
|
+
Util.logger.error(
|
|
108
|
+
` ☇ skipping ${this.definition.type} ${id}: ${ex.message} ${ex.code}`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Retrieves Metadata of Data Extract Activity for caching
|
|
116
|
+
*
|
|
117
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
118
|
+
*/
|
|
119
|
+
static async retrieveForCache() {
|
|
120
|
+
return this.retrieve();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Creates a single Data Extract
|
|
125
|
+
*
|
|
126
|
+
* @param {TYPE.VerificationItem} metadata a single Data Extract
|
|
127
|
+
* @returns {Promise} Promise
|
|
128
|
+
*/
|
|
129
|
+
static create(metadata) {
|
|
130
|
+
return super.createREST(metadata, '/automation/v1/dataverifications/');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* helper for {@link MetadataType.createREST}
|
|
135
|
+
*
|
|
136
|
+
* @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry
|
|
137
|
+
* @param {object} apiResponse varies depending on the API call
|
|
138
|
+
* @param {TYPE.MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped
|
|
139
|
+
* @returns {void}
|
|
140
|
+
*/
|
|
141
|
+
static async postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) {
|
|
142
|
+
if (!apiResponse?.[this.definition.idField]) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
Util.logger.warn(
|
|
146
|
+
` - ${this.definition.type} ${
|
|
147
|
+
metadataEntryWithAllFields?.[this.definition.idField]
|
|
148
|
+
}: new key ${
|
|
149
|
+
apiResponse?.[this.definition.idField]
|
|
150
|
+
} automatically assigned during creation`
|
|
151
|
+
);
|
|
152
|
+
metadataEntry[this.definition.idField] = apiResponse?.[this.definition.idField];
|
|
153
|
+
|
|
154
|
+
// map structure: cred/bu --> type --> old key --> new key
|
|
155
|
+
const buName = this.buObject.credential + '/' + this.buObject.businessUnit;
|
|
156
|
+
Automation.createdKeyMap ||= {};
|
|
157
|
+
Automation.createdKeyMap[buName] ||= {};
|
|
158
|
+
Automation.createdKeyMap[buName][this.definition.type] ||= {};
|
|
159
|
+
Automation.createdKeyMap[buName][this.definition.type][
|
|
160
|
+
metadataEntryWithAllFields[this.definition.idField]
|
|
161
|
+
] = metadataEntry[this.definition.idField];
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Updates a single Data Extract
|
|
166
|
+
*
|
|
167
|
+
* @param {TYPE.VerificationItem} metadata a single Data Extract
|
|
168
|
+
* @returns {Promise} Promise
|
|
169
|
+
*/
|
|
170
|
+
static update(metadata) {
|
|
171
|
+
return super.updateREST(
|
|
172
|
+
metadata,
|
|
173
|
+
'/automation/v1/dataverifications/' + metadata.dataVerificationDefinitionId
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* prepares a verification for deployment
|
|
179
|
+
*
|
|
180
|
+
* @param {TYPE.VerificationItem} metadata a single verification activity definition
|
|
181
|
+
* @returns {TYPE.VerificationItem} metadata object
|
|
182
|
+
*/
|
|
183
|
+
static preDeployTasks(metadata) {
|
|
184
|
+
metadata.targetObjectId = cache.searchForField(
|
|
185
|
+
'dataExtension',
|
|
186
|
+
metadata.r__dataExtension_CustomerKey,
|
|
187
|
+
'CustomerKey',
|
|
188
|
+
'ObjectID'
|
|
189
|
+
);
|
|
190
|
+
delete metadata.r__dataExtension_CustomerKey;
|
|
191
|
+
return metadata;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* parses retrieved Metadata before saving
|
|
195
|
+
*
|
|
196
|
+
* @param {TYPE.VerificationItem} metadata a single verification activity definition
|
|
197
|
+
* @returns {TYPE.VerificationItem} Array with one metadata object and one sql string
|
|
198
|
+
*/
|
|
199
|
+
static postRetrieveTasks(metadata) {
|
|
200
|
+
try {
|
|
201
|
+
metadata.r__dataExtension_CustomerKey = cache.searchForField(
|
|
202
|
+
'dataExtension',
|
|
203
|
+
metadata.targetObjectId,
|
|
204
|
+
'ObjectID',
|
|
205
|
+
'CustomerKey'
|
|
206
|
+
);
|
|
207
|
+
delete metadata.targetObjectId;
|
|
208
|
+
} catch (ex) {
|
|
209
|
+
Util.logger.warn(
|
|
210
|
+
` - ${this.definition.type} ${metadata[this.definition.keyField]}: ${ex.message}`
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
return metadata;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Delete a metadata item from the specified business unit
|
|
217
|
+
*
|
|
218
|
+
* @param {string} key Identifier of item
|
|
219
|
+
* @returns {Promise.<boolean>} deletion success status
|
|
220
|
+
*/
|
|
221
|
+
static deleteByKey(key) {
|
|
222
|
+
return super.deleteByKeyREST('/automation/v1/dataverifications/' + key, key);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Assign definition to static attributes
|
|
227
|
+
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
228
|
+
Verification.definition = MetadataTypeDefinitions.verification;
|
|
229
|
+
|
|
230
|
+
export default Verification;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export default {
|
|
2
2
|
bodyIteratorField: 'attributeGroupDefinitions',
|
|
3
3
|
dependencies: ['attributeSet'], // future may have dependency on Data Extensions
|
|
4
4
|
hasExtended: false,
|
|
@@ -8,8 +8,8 @@ module.exports = {
|
|
|
8
8
|
nameField: 'definitionName.value',
|
|
9
9
|
restPagination: false, // Hub API does not support pagination and returns everything instead
|
|
10
10
|
type: 'attributeGroup',
|
|
11
|
-
typeDescription: '
|
|
12
|
-
typeRetrieveByDefault:
|
|
11
|
+
typeDescription: 'Groupings of Attribute Sets (Data Extensions) in Data Designer.',
|
|
12
|
+
typeRetrieveByDefault: true,
|
|
13
13
|
typeName: 'Data Designer Attribute Groups',
|
|
14
14
|
fields: {
|
|
15
15
|
applicationID: {
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
export default {
|
|
2
2
|
bodyIteratorField: 'setDefinition',
|
|
3
|
-
dependencies: [
|
|
3
|
+
dependencies: [
|
|
4
|
+
'folder-hidden',
|
|
5
|
+
'folder-dataextension',
|
|
6
|
+
'folder-salesforcedataextension',
|
|
7
|
+
'folder-shared_data',
|
|
8
|
+
'folder-shared_dataextension',
|
|
9
|
+
'folder-shared_salesforcedataextension',
|
|
10
|
+
'folder-synchronizeddataextension',
|
|
11
|
+
'dataExtension',
|
|
12
|
+
],
|
|
4
13
|
hasExtended: false,
|
|
5
14
|
idField: 'definitionID',
|
|
6
15
|
keyIsFixed: null,
|
|
@@ -13,9 +22,9 @@ module.exports = {
|
|
|
13
22
|
lastmodNameField: null,
|
|
14
23
|
restPagination: false, // Hub API does not support pagination and returns everything instead
|
|
15
24
|
type: 'attributeSet',
|
|
16
|
-
typeDescription: '
|
|
17
|
-
typeRetrieveByDefault:
|
|
18
|
-
typeName: 'Data Designer
|
|
25
|
+
typeDescription: 'Data Extensions linked together in Attribute Groups in Data Designer.',
|
|
26
|
+
typeRetrieveByDefault: true,
|
|
27
|
+
typeName: 'Data Designer Attribute Sets',
|
|
19
28
|
fields: {
|
|
20
29
|
applicationID: {
|
|
21
30
|
isCreateable: null,
|
|
@@ -119,6 +128,12 @@ module.exports = {
|
|
|
119
128
|
retrieving: true,
|
|
120
129
|
template: null,
|
|
121
130
|
},
|
|
131
|
+
'dataRetentionProperties.periodLength': {
|
|
132
|
+
isCreateable: null,
|
|
133
|
+
isUpdateable: null,
|
|
134
|
+
retrieving: true,
|
|
135
|
+
template: null,
|
|
136
|
+
},
|
|
122
137
|
definitionID: {
|
|
123
138
|
isCreateable: null,
|
|
124
139
|
isUpdateable: null,
|
|
@@ -138,14 +153,14 @@ module.exports = {
|
|
|
138
153
|
template: false,
|
|
139
154
|
},
|
|
140
155
|
'definitionName.value': {
|
|
141
|
-
// equal to 'name'
|
|
156
|
+
// equal to 'name'
|
|
142
157
|
isCreateable: true,
|
|
143
158
|
isUpdateable: true,
|
|
144
159
|
retrieving: false,
|
|
145
160
|
template: false,
|
|
146
161
|
},
|
|
147
162
|
fullyQualifiedName: {
|
|
148
|
-
// equal to 'name'
|
|
163
|
+
// equal to 'name'
|
|
149
164
|
isCreateable: true,
|
|
150
165
|
isUpdateable: true,
|
|
151
166
|
retrieving: false,
|
|
@@ -602,9 +617,10 @@ module.exports = {
|
|
|
602
617
|
template: null,
|
|
603
618
|
},
|
|
604
619
|
'valueDefinitions[].baseType': {
|
|
620
|
+
// "Numeric", "Text", ... valueDefinitions[].dataType is more relevant
|
|
605
621
|
isCreateable: null,
|
|
606
622
|
isUpdateable: null,
|
|
607
|
-
retrieving:
|
|
623
|
+
retrieving: false,
|
|
608
624
|
template: null,
|
|
609
625
|
},
|
|
610
626
|
'valueDefinitions[].customerDataID': {
|
|
@@ -613,6 +629,12 @@ module.exports = {
|
|
|
613
629
|
retrieving: true,
|
|
614
630
|
template: null,
|
|
615
631
|
},
|
|
632
|
+
'valueDefinitions[].connectingID': {
|
|
633
|
+
isCreateable: null,
|
|
634
|
+
isUpdateable: null,
|
|
635
|
+
retrieving: false,
|
|
636
|
+
template: null,
|
|
637
|
+
},
|
|
616
638
|
'valueDefinitions[].dataSourceID': {
|
|
617
639
|
isCreateable: null,
|
|
618
640
|
isUpdateable: null,
|
|
@@ -622,7 +644,7 @@ module.exports = {
|
|
|
622
644
|
'valueDefinitions[].dataSourceName': {
|
|
623
645
|
isCreateable: null,
|
|
624
646
|
isUpdateable: null,
|
|
625
|
-
retrieving:
|
|
647
|
+
retrieving: false,
|
|
626
648
|
template: null,
|
|
627
649
|
},
|
|
628
650
|
'valueDefinitions[].dataType': {
|
|
@@ -638,9 +660,10 @@ module.exports = {
|
|
|
638
660
|
template: null,
|
|
639
661
|
},
|
|
640
662
|
'valueDefinitions[].definitionID': {
|
|
663
|
+
// likely the main ID of the value definition. No use for simple checks on git though as long as we cannot update it
|
|
641
664
|
isCreateable: null,
|
|
642
665
|
isUpdateable: null,
|
|
643
|
-
retrieving:
|
|
666
|
+
retrieving: false,
|
|
644
667
|
template: null,
|
|
645
668
|
},
|
|
646
669
|
'valueDefinitions[].definitionKey': {
|
|
@@ -649,10 +672,11 @@ module.exports = {
|
|
|
649
672
|
retrieving: true,
|
|
650
673
|
template: null,
|
|
651
674
|
},
|
|
652
|
-
'valueDefinitions[].definitionName
|
|
675
|
+
'valueDefinitions[].definitionName': {
|
|
676
|
+
// equal to valueDefinitions[].name
|
|
653
677
|
isCreateable: null,
|
|
654
678
|
isUpdateable: null,
|
|
655
|
-
retrieving:
|
|
679
|
+
retrieving: false,
|
|
656
680
|
template: null,
|
|
657
681
|
},
|
|
658
682
|
'valueDefinitions[].description': {
|
|
@@ -662,15 +686,17 @@ module.exports = {
|
|
|
662
686
|
template: null,
|
|
663
687
|
},
|
|
664
688
|
'valueDefinitions[].displayOrder': {
|
|
689
|
+
// merely a numeric counter; equal to valueDefinitions[].ordinal; not given for isHidden:true entries
|
|
665
690
|
isCreateable: null,
|
|
666
691
|
isUpdateable: null,
|
|
667
|
-
retrieving:
|
|
692
|
+
retrieving: false,
|
|
668
693
|
template: null,
|
|
669
694
|
},
|
|
670
695
|
'valueDefinitions[].fullyQualifiedName': {
|
|
696
|
+
// dataExtension name + field name
|
|
671
697
|
isCreateable: null,
|
|
672
698
|
isUpdateable: null,
|
|
673
|
-
retrieving:
|
|
699
|
+
retrieving: false,
|
|
674
700
|
template: null,
|
|
675
701
|
},
|
|
676
702
|
'valueDefinitions[].identifierType': {
|
|
@@ -727,10 +753,11 @@ module.exports = {
|
|
|
727
753
|
retrieving: true,
|
|
728
754
|
template: null,
|
|
729
755
|
},
|
|
730
|
-
'valueDefinitions[].localizedDescription
|
|
756
|
+
'valueDefinitions[].localizedDescription': {
|
|
757
|
+
// always equal to { value: "" }
|
|
731
758
|
isCreateable: null,
|
|
732
759
|
isUpdateable: null,
|
|
733
|
-
retrieving:
|
|
760
|
+
retrieving: false,
|
|
734
761
|
template: null,
|
|
735
762
|
},
|
|
736
763
|
'valueDefinitions[].name': {
|
|
@@ -739,6 +766,13 @@ module.exports = {
|
|
|
739
766
|
retrieving: true,
|
|
740
767
|
template: null,
|
|
741
768
|
},
|
|
769
|
+
'valueDefinitions[].obfuscationProperties': {
|
|
770
|
+
// might become relevant when fields are encrypted but for most cases we should simply skip it
|
|
771
|
+
isCreateable: null,
|
|
772
|
+
isUpdateable: null,
|
|
773
|
+
retrieving: false,
|
|
774
|
+
template: null,
|
|
775
|
+
},
|
|
742
776
|
'valueDefinitions[].obfuscationProperties.maskType': {
|
|
743
777
|
isCreateable: null,
|
|
744
778
|
isUpdateable: null,
|
|
@@ -770,9 +804,10 @@ module.exports = {
|
|
|
770
804
|
template: null,
|
|
771
805
|
},
|
|
772
806
|
'valueDefinitions[].ordinal': {
|
|
807
|
+
// merely a numeric counter; equal to valueDefinitions[].displayOrder; not given for isHidden:true entries
|
|
773
808
|
isCreateable: null,
|
|
774
809
|
isUpdateable: null,
|
|
775
|
-
retrieving:
|
|
810
|
+
retrieving: false,
|
|
776
811
|
template: null,
|
|
777
812
|
},
|
|
778
813
|
'valueDefinitions[].parentDefinition': {
|
|
@@ -788,9 +823,10 @@ module.exports = {
|
|
|
788
823
|
template: null,
|
|
789
824
|
},
|
|
790
825
|
'valueDefinitions[].parentType': {
|
|
826
|
+
// always "Set"
|
|
791
827
|
isCreateable: null,
|
|
792
828
|
isUpdateable: null,
|
|
793
|
-
retrieving:
|
|
829
|
+
retrieving: false,
|
|
794
830
|
template: null,
|
|
795
831
|
},
|
|
796
832
|
'valueDefinitions[].restrictionLookupListID': {
|
|
@@ -817,40 +853,51 @@ module.exports = {
|
|
|
817
853
|
retrieving: false,
|
|
818
854
|
template: null,
|
|
819
855
|
},
|
|
820
|
-
'valueDefinitions[].setDefinitionName
|
|
856
|
+
'valueDefinitions[].setDefinitionName': {
|
|
857
|
+
isCreateable: null,
|
|
858
|
+
isUpdateable: null,
|
|
859
|
+
retrieving: false,
|
|
860
|
+
template: null,
|
|
861
|
+
},
|
|
862
|
+
'valueDefinitions[].storageFieldReferenceID': {
|
|
821
863
|
isCreateable: null,
|
|
822
864
|
isUpdateable: null,
|
|
823
865
|
retrieving: false,
|
|
824
866
|
template: null,
|
|
825
867
|
},
|
|
826
868
|
'valueDefinitions[].storageFieldReferenceID.type': {
|
|
869
|
+
// always "guid"
|
|
827
870
|
isCreateable: null,
|
|
828
871
|
isUpdateable: null,
|
|
829
872
|
retrieving: true,
|
|
830
873
|
template: null,
|
|
831
874
|
},
|
|
832
875
|
'valueDefinitions[].storageFieldReferenceID.value': {
|
|
876
|
+
// unknown GUID
|
|
833
877
|
isCreateable: null,
|
|
834
878
|
isUpdateable: null,
|
|
835
879
|
retrieving: true,
|
|
836
880
|
template: null,
|
|
837
881
|
},
|
|
838
882
|
'valueDefinitions[].storageName': {
|
|
883
|
+
// always equal valueDefinitions[].definitionKey, except for when that is CustomObjectKey - then this will be _CustomObjectKey (with an underscore)
|
|
839
884
|
isCreateable: null,
|
|
840
885
|
isUpdateable: null,
|
|
841
|
-
retrieving:
|
|
886
|
+
retrieving: false,
|
|
842
887
|
template: null,
|
|
843
888
|
},
|
|
844
889
|
'valueDefinitions[].valueDefinitionID': {
|
|
890
|
+
// equal to valueDefinitions[].definitionID
|
|
845
891
|
isCreateable: null,
|
|
846
892
|
isUpdateable: null,
|
|
847
|
-
retrieving:
|
|
893
|
+
retrieving: false,
|
|
848
894
|
template: null,
|
|
849
895
|
},
|
|
850
896
|
'valueDefinitions[].valueDefinitionKey': {
|
|
897
|
+
// equal to valueDefinitions[].definitionKey
|
|
851
898
|
isCreateable: null,
|
|
852
899
|
isUpdateable: null,
|
|
853
|
-
retrieving:
|
|
900
|
+
retrieving: false,
|
|
854
901
|
template: null,
|
|
855
902
|
},
|
|
856
903
|
r__folder_Path: {
|
|
@@ -859,5 +906,11 @@ module.exports = {
|
|
|
859
906
|
retrieving: true,
|
|
860
907
|
template: null,
|
|
861
908
|
},
|
|
909
|
+
r__dataExtension_CustomerKey: {
|
|
910
|
+
isCreateable: null,
|
|
911
|
+
isUpdateable: null,
|
|
912
|
+
retrieving: true,
|
|
913
|
+
template: null,
|
|
914
|
+
},
|
|
862
915
|
},
|
|
863
916
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export default {
|
|
2
2
|
activityTypeMapping: {
|
|
3
3
|
dataExtract: 73,
|
|
4
4
|
dataFactoryUtility: 425,
|
|
@@ -31,6 +31,7 @@ module.exports = {
|
|
|
31
31
|
'importFile',
|
|
32
32
|
'query',
|
|
33
33
|
'script',
|
|
34
|
+
'verification',
|
|
34
35
|
],
|
|
35
36
|
folderType: 'automation',
|
|
36
37
|
hasExtended: false,
|