mcdev 8.2.0 → 8.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/workflows/code-test.yml +1 -1
- package/.github/workflows/coverage-base-update.yml +1 -1
- package/.github/workflows/coverage-develop-branch.yml +1 -1
- package/.github/workflows/coverage-main-branch.yml +1 -1
- package/.github/workflows/coverage.yml +1 -1
- package/.github/workflows/npm-publish.yml +9 -5
- package/@types/lib/MetadataTypeDefinitions.d.ts +4 -0
- package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
- package/@types/lib/MetadataTypeInfo.d.ts +4 -0
- package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/index.d.ts +20 -9
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +3 -3
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +7 -7
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +9 -9
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +7 -0
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataFilter.d.ts +326 -0
- package/@types/lib/metadataTypes/DataFilter.d.ts.map +1 -0
- package/@types/lib/metadataTypes/DataFilterHidden.d.ts +164 -0
- package/@types/lib/metadataTypes/DataFilterHidden.d.ts.map +1 -0
- package/@types/lib/metadataTypes/Filter.d.ts +181 -6
- package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FilterDefinition.d.ts +318 -0
- package/@types/lib/metadataTypes/FilterDefinition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/FilterDefinitionHidden.d.ts +156 -0
- package/@types/lib/metadataTypes/FilterDefinitionHidden.d.ts.map +1 -0
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +18 -0
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +2 -2
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts +1 -1
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/DataFilter.definition.d.ts +230 -0
- package/@types/lib/metadataTypes/definitions/DataFilter.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/DataFilterHidden.definition.d.ts +230 -0
- package/@types/lib/metadataTypes/definitions/DataFilterHidden.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +203 -31
- package/@types/lib/metadataTypes/definitions/FilterDefinition.definition.d.ts +218 -0
- package/@types/lib/metadataTypes/definitions/FilterDefinition.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/FilterDefinitionHidden.definition.d.ts +218 -0
- package/@types/lib/metadataTypes/definitions/FilterDefinitionHidden.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +18 -0
- package/@types/lib/util/devops.d.ts +1 -0
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts +3 -3
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/lib/util/validations.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +296 -0
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/lib/MetadataTypeDefinitions.js +4 -0
- package/lib/MetadataTypeInfo.js +4 -0
- package/lib/Retriever.js +3 -0
- package/lib/index.js +87 -3
- package/lib/metadataTypes/Automation.js +3 -1
- package/lib/metadataTypes/DataExtension.js +19 -12
- package/lib/metadataTypes/DataExtensionField.js +25 -3
- package/lib/metadataTypes/DataFilter.js +653 -0
- package/lib/metadataTypes/DataFilterHidden.js +18 -0
- package/lib/metadataTypes/Filter.js +315 -1
- package/lib/metadataTypes/ImportFile.js +11 -1
- package/lib/metadataTypes/Journey.js +118 -7
- package/lib/metadataTypes/definitions/Automation.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataFilter.definition.js +168 -0
- package/lib/metadataTypes/definitions/DataFilterHidden.definition.js +169 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +136 -22
- package/lib/metadataTypes/definitions/Journey.definition.js +20 -1
- package/lib/util/devops.js +18 -5
- package/lib/util/util.js +7 -2
- package/lib/util/validations.js +7 -1
- package/package.json +10 -10
- package/test/general.test.js +17 -19
- package/test/mockRoot/.mcdevrc.json +4 -1
- package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testExisting_dataFilter.dataFilter-meta.json +19 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testNew_dataFilter.dataFilter-meta.json +19 -0
- package/test/mockRoot/deploy/testInstance/testBU/filter/testExisting_filter.filter-meta.json +10 -0
- package/test/mockRoot/deploy/testInstance/testBU/filter/testNew_filter.filter-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_updatecontact.journey-meta.json +108 -0
- package/test/resources/9999999/automation/v1/filters/a0f1a1bc-4ea1-44b3-8fe1-ce40ef35c1c0/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/delete-response.txt +0 -0
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/get-response.json +15 -0
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/patch-response.json +15 -0
- package/test/resources/9999999/automation/v1/filters/get-response.json +22 -0
- package/test/resources/9999999/dataFilter/build-expected.json +19 -0
- package/test/resources/9999999/dataFilter/get-expected.json +23 -0
- package/test/resources/9999999/dataFilter/patch-expected.json +20 -0
- package/test/resources/9999999/dataFilter/post-expected.json +20 -0
- package/test/resources/9999999/dataFilter/template-expected.json +19 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,filteract,filterdef,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml +765 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilteractivity,hidden-response.xml +139 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilterdefinition,hidden-response.xml +116 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/delete-response.txt +1 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/get-response.json +19 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/patch-response.json +15 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/5318/get-response.json +27 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/8502/get-response.json +7 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/8503/get-response.json +7 -0
- package/test/resources/9999999/email/v1/filters/filterdefinition/post-response.json +15 -0
- package/test/resources/9999999/filter/build-expected.json +10 -0
- package/test/resources/9999999/filter/get-expected.json +11 -0
- package/test/resources/9999999/filter/patch-expected.json +11 -0
- package/test/resources/9999999/filter/post-expected.json +11 -0
- package/test/resources/9999999/filter/template-expected.json +10 -0
- package/test/resources/9999999/filterActivity/create-response.xml +46 -0
- package/test/resources/9999999/filterActivity/retrieve-CustomerKey=testExisting_filter-response.xml +30 -0
- package/test/resources/9999999/filterDefinition/retrieve-CustomerKey=testExisting_dataFilter-response.xml +30 -0
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +45 -3
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/put-response.json +1 -1
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/get-response.json +119 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/put-response.json +106 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +1 -1
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response.json +1 -1
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/put-response.json +1 -1
- package/test/resources/9999999/journey/get-updatecontact-expected.json +108 -0
- package/test/resources/9999999/journey/put-updatecontact-expected.json +108 -0
- package/test/type.automation.test.js +14 -14
- package/test/type.dataFilter.test.js +174 -0
- package/test/type.filter.test.js +170 -0
- package/test/type.journey.test.js +59 -7
- package/test/type.query.test.js +2 -2
- package/test/utils.js +8 -0
- package/types/mcdev.d.js +101 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
bodyIteratorField: 'items',
|
|
3
|
+
dependencies: ['folder-filterdefinition', 'folder-hidden', 'dataExtension'],
|
|
4
|
+
dependencyGraph: {
|
|
5
|
+
dataExtension: ['r__source_dataExtension_key'],
|
|
6
|
+
},
|
|
7
|
+
filter: {},
|
|
8
|
+
hasExtended: false,
|
|
9
|
+
idField: 'id',
|
|
10
|
+
keyIsFixed: false,
|
|
11
|
+
keyField: 'key',
|
|
12
|
+
nameField: 'name',
|
|
13
|
+
folderType: 'filterdefinition',
|
|
14
|
+
folderIdField: 'categoryId',
|
|
15
|
+
createdDateField: 'createdDate',
|
|
16
|
+
createdNameField: 'createdBy',
|
|
17
|
+
lastmodDateField: 'lastUpdated',
|
|
18
|
+
lastmodNameField: 'lastUpdatedBy',
|
|
19
|
+
restPagination: true,
|
|
20
|
+
restPageSize: 100,
|
|
21
|
+
maxKeyLength: 36, // confirmed max length
|
|
22
|
+
type: 'dataFilter',
|
|
23
|
+
soapType: 'FilterDefinition',
|
|
24
|
+
typeDescription: 'Defines an audience based on specified rules. Used by Filter Activities.',
|
|
25
|
+
typeRetrieveByDefault: true,
|
|
26
|
+
typeName: 'Data Filter',
|
|
27
|
+
fields: {
|
|
28
|
+
// the GUI seems to ONLY send fields during update that are actually changed. It has yet to be tested if that also works with sending other fiedls as well
|
|
29
|
+
id: {
|
|
30
|
+
isCreateable: false,
|
|
31
|
+
isUpdateable: false, // included in URL
|
|
32
|
+
retrieving: false,
|
|
33
|
+
template: false,
|
|
34
|
+
},
|
|
35
|
+
key: {
|
|
36
|
+
isCreateable: true,
|
|
37
|
+
isUpdateable: true, // can be updated
|
|
38
|
+
retrieving: true,
|
|
39
|
+
template: true,
|
|
40
|
+
},
|
|
41
|
+
createdDate: {
|
|
42
|
+
isCreateable: false,
|
|
43
|
+
isUpdateable: false,
|
|
44
|
+
retrieving: true,
|
|
45
|
+
template: false,
|
|
46
|
+
},
|
|
47
|
+
createdBy: {
|
|
48
|
+
isCreateable: false,
|
|
49
|
+
isUpdateable: false,
|
|
50
|
+
retrieving: false,
|
|
51
|
+
template: false,
|
|
52
|
+
},
|
|
53
|
+
owner: {
|
|
54
|
+
// equal to createdBy
|
|
55
|
+
isCreateable: false,
|
|
56
|
+
isUpdateable: false,
|
|
57
|
+
retrieving: false,
|
|
58
|
+
template: false,
|
|
59
|
+
},
|
|
60
|
+
createdByName: {
|
|
61
|
+
// actual name of user indicated by id in createdBy
|
|
62
|
+
isCreateable: false,
|
|
63
|
+
isUpdateable: false,
|
|
64
|
+
retrieving: true,
|
|
65
|
+
template: false,
|
|
66
|
+
},
|
|
67
|
+
lastUpdated: {
|
|
68
|
+
isCreateable: false,
|
|
69
|
+
isUpdateable: false,
|
|
70
|
+
retrieving: true,
|
|
71
|
+
template: false,
|
|
72
|
+
},
|
|
73
|
+
lastUpdatedBy: {
|
|
74
|
+
isCreateable: false,
|
|
75
|
+
isUpdateable: false,
|
|
76
|
+
retrieving: false,
|
|
77
|
+
template: false,
|
|
78
|
+
},
|
|
79
|
+
lastUpdatedByName: {
|
|
80
|
+
// actual name of user indicated by id in lastUpdatedBy
|
|
81
|
+
isCreateable: false,
|
|
82
|
+
isUpdateable: false,
|
|
83
|
+
retrieving: true,
|
|
84
|
+
template: false,
|
|
85
|
+
},
|
|
86
|
+
name: {
|
|
87
|
+
isCreateable: true,
|
|
88
|
+
isUpdateable: true, // can be updated
|
|
89
|
+
retrieving: true,
|
|
90
|
+
template: true,
|
|
91
|
+
},
|
|
92
|
+
categoryId: {
|
|
93
|
+
// returned by GET / CREATE / UPDATE; used in CREATE payload
|
|
94
|
+
isCreateable: true,
|
|
95
|
+
isUpdateable: true, // can be updated
|
|
96
|
+
retrieving: true,
|
|
97
|
+
template: true,
|
|
98
|
+
},
|
|
99
|
+
description: {
|
|
100
|
+
isCreateable: true,
|
|
101
|
+
isUpdateable: true, // can be updated
|
|
102
|
+
retrieving: true,
|
|
103
|
+
template: true,
|
|
104
|
+
},
|
|
105
|
+
filterDefinitionXml: {
|
|
106
|
+
isCreateable: true,
|
|
107
|
+
isUpdateable: true, // this is the only field that can be updated
|
|
108
|
+
retrieving: true,
|
|
109
|
+
template: true,
|
|
110
|
+
},
|
|
111
|
+
// DerivedFromType: {
|
|
112
|
+
// // this upper-cased spelling is used by GUI when creating a dataExtension based filterDefintion
|
|
113
|
+
// isCreateable: true,
|
|
114
|
+
// isUpdateable: false, // cannot be updated
|
|
115
|
+
// retrieving: false,
|
|
116
|
+
// template: false,
|
|
117
|
+
// },
|
|
118
|
+
derivedFromType: {
|
|
119
|
+
// 1: SubscriberAttributes, 2: DataExtension, 6: EntryCriteria;
|
|
120
|
+
isCreateable: true,
|
|
121
|
+
isUpdateable: false, // cannot be updated
|
|
122
|
+
retrieving: true,
|
|
123
|
+
template: true,
|
|
124
|
+
},
|
|
125
|
+
derivedFromObjectId: {
|
|
126
|
+
// dataExtension ID or '00000000-0000-0000-0000-000000000000' for lists
|
|
127
|
+
isCreateable: true,
|
|
128
|
+
isUpdateable: false, // cannot be updated
|
|
129
|
+
retrieving: true,
|
|
130
|
+
template: true,
|
|
131
|
+
},
|
|
132
|
+
derivedFromObjectTypeName: {
|
|
133
|
+
// "SubscriberAttributes" | "DataExtension" | "EntryCriteria" ...; only returned by GET API
|
|
134
|
+
isCreateable: false,
|
|
135
|
+
isUpdateable: false, // cannot be updated
|
|
136
|
+
retrieving: true,
|
|
137
|
+
template: true,
|
|
138
|
+
},
|
|
139
|
+
derivedFromObjectName: {
|
|
140
|
+
// dataExtension name; field only returned by GET-API
|
|
141
|
+
isCreateable: false,
|
|
142
|
+
isUpdateable: false, // cannot be updated
|
|
143
|
+
retrieving: true,
|
|
144
|
+
template: true,
|
|
145
|
+
},
|
|
146
|
+
isSendable: {
|
|
147
|
+
isCreateable: false, // automatically set during create
|
|
148
|
+
isUpdateable: false, // cannot be updated
|
|
149
|
+
retrieving: true,
|
|
150
|
+
template: true,
|
|
151
|
+
},
|
|
152
|
+
r__source_dataExtension_key: {
|
|
153
|
+
isCreateable: false,
|
|
154
|
+
isUpdateable: false,
|
|
155
|
+
retrieving: true,
|
|
156
|
+
template: true,
|
|
157
|
+
},
|
|
158
|
+
c__filterDefinition: {
|
|
159
|
+
skipValidation: true,
|
|
160
|
+
},
|
|
161
|
+
r__folder_Path: {
|
|
162
|
+
isCreateable: false,
|
|
163
|
+
isUpdateable: false,
|
|
164
|
+
retrieving: true,
|
|
165
|
+
template: true,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
bodyIteratorField: 'items',
|
|
3
|
+
dependencies: ['folder-filterdefinition', 'folder-hidden', 'dataExtension'],
|
|
4
|
+
dependencyGraph: {
|
|
5
|
+
dataExtension: ['r__source_dataExtension_key'],
|
|
6
|
+
},
|
|
7
|
+
filter: {},
|
|
8
|
+
hasExtended: false,
|
|
9
|
+
idField: 'id',
|
|
10
|
+
keyIsFixed: false,
|
|
11
|
+
keyField: 'key',
|
|
12
|
+
nameField: 'name',
|
|
13
|
+
folderType: 'filterdefinition',
|
|
14
|
+
folderIdField: 'categoryId',
|
|
15
|
+
createdDateField: 'createdDate',
|
|
16
|
+
createdNameField: 'createdBy',
|
|
17
|
+
lastmodDateField: 'lastUpdated',
|
|
18
|
+
lastmodNameField: 'lastUpdatedBy',
|
|
19
|
+
restPagination: true,
|
|
20
|
+
restPageSize: 100,
|
|
21
|
+
maxKeyLength: 36, // confirmed max length
|
|
22
|
+
type: 'dataFilterHidden',
|
|
23
|
+
soapType: 'FilterDefinition',
|
|
24
|
+
typeDescription:
|
|
25
|
+
'Defines an audience based on specified rules. Auto-generated by filtered DEs and filtered Lists.',
|
|
26
|
+
typeRetrieveByDefault: false,
|
|
27
|
+
typeName: 'Data Filter (auto-generated)',
|
|
28
|
+
fields: {
|
|
29
|
+
// the GUI seems to ONLY send fields during update that are actually changed. It has yet to be tested if that also works with sending other fiedls as well
|
|
30
|
+
id: {
|
|
31
|
+
isCreateable: false,
|
|
32
|
+
isUpdateable: false, // included in URL
|
|
33
|
+
retrieving: false,
|
|
34
|
+
template: false,
|
|
35
|
+
},
|
|
36
|
+
key: {
|
|
37
|
+
isCreateable: true,
|
|
38
|
+
isUpdateable: true, // can be updated
|
|
39
|
+
retrieving: true,
|
|
40
|
+
template: true,
|
|
41
|
+
},
|
|
42
|
+
createdDate: {
|
|
43
|
+
isCreateable: false,
|
|
44
|
+
isUpdateable: false,
|
|
45
|
+
retrieving: true,
|
|
46
|
+
template: false,
|
|
47
|
+
},
|
|
48
|
+
createdBy: {
|
|
49
|
+
isCreateable: false,
|
|
50
|
+
isUpdateable: false,
|
|
51
|
+
retrieving: false,
|
|
52
|
+
template: false,
|
|
53
|
+
},
|
|
54
|
+
owner: {
|
|
55
|
+
// equal to createdBy
|
|
56
|
+
isCreateable: false,
|
|
57
|
+
isUpdateable: false,
|
|
58
|
+
retrieving: false,
|
|
59
|
+
template: false,
|
|
60
|
+
},
|
|
61
|
+
createdByName: {
|
|
62
|
+
// actual name of user indicated by id in createdBy
|
|
63
|
+
isCreateable: false,
|
|
64
|
+
isUpdateable: false,
|
|
65
|
+
retrieving: true,
|
|
66
|
+
template: false,
|
|
67
|
+
},
|
|
68
|
+
lastUpdated: {
|
|
69
|
+
isCreateable: false,
|
|
70
|
+
isUpdateable: false,
|
|
71
|
+
retrieving: true,
|
|
72
|
+
template: false,
|
|
73
|
+
},
|
|
74
|
+
lastUpdatedBy: {
|
|
75
|
+
isCreateable: false,
|
|
76
|
+
isUpdateable: false,
|
|
77
|
+
retrieving: false,
|
|
78
|
+
template: false,
|
|
79
|
+
},
|
|
80
|
+
lastUpdatedByName: {
|
|
81
|
+
// actual name of user indicated by id in lastUpdatedBy
|
|
82
|
+
isCreateable: false,
|
|
83
|
+
isUpdateable: false,
|
|
84
|
+
retrieving: true,
|
|
85
|
+
template: false,
|
|
86
|
+
},
|
|
87
|
+
name: {
|
|
88
|
+
isCreateable: true,
|
|
89
|
+
isUpdateable: true, // can be updated
|
|
90
|
+
retrieving: true,
|
|
91
|
+
template: true,
|
|
92
|
+
},
|
|
93
|
+
categoryId: {
|
|
94
|
+
// returned by GET / CREATE / UPDATE; used in CREATE payload
|
|
95
|
+
isCreateable: true,
|
|
96
|
+
isUpdateable: true, // can be updated
|
|
97
|
+
retrieving: true,
|
|
98
|
+
template: true,
|
|
99
|
+
},
|
|
100
|
+
description: {
|
|
101
|
+
isCreateable: true,
|
|
102
|
+
isUpdateable: true, // can be updated
|
|
103
|
+
retrieving: true,
|
|
104
|
+
template: true,
|
|
105
|
+
},
|
|
106
|
+
filterDefinitionXml: {
|
|
107
|
+
isCreateable: true,
|
|
108
|
+
isUpdateable: true, // this is the only field that can be updated
|
|
109
|
+
retrieving: true,
|
|
110
|
+
template: true,
|
|
111
|
+
},
|
|
112
|
+
// DerivedFromType: {
|
|
113
|
+
// // this upper-cased spelling is used by GUI when creating a dataExtension based filterDefintion
|
|
114
|
+
// isCreateable: true,
|
|
115
|
+
// isUpdateable: false, // cannot be updated
|
|
116
|
+
// retrieving: false,
|
|
117
|
+
// template: false,
|
|
118
|
+
// },
|
|
119
|
+
derivedFromType: {
|
|
120
|
+
// 1: SubscriberAttributes, 2: DataExtension, 6: EntryCriteria;
|
|
121
|
+
isCreateable: true,
|
|
122
|
+
isUpdateable: false, // cannot be updated
|
|
123
|
+
retrieving: true,
|
|
124
|
+
template: true,
|
|
125
|
+
},
|
|
126
|
+
derivedFromObjectId: {
|
|
127
|
+
// dataExtension ID or '00000000-0000-0000-0000-000000000000' for lists
|
|
128
|
+
isCreateable: true,
|
|
129
|
+
isUpdateable: false, // cannot be updated
|
|
130
|
+
retrieving: true,
|
|
131
|
+
template: true,
|
|
132
|
+
},
|
|
133
|
+
derivedFromObjectTypeName: {
|
|
134
|
+
// "SubscriberAttributes" | "DataExtension" | "EntryCriteria" ...; only returned by GET API
|
|
135
|
+
isCreateable: false,
|
|
136
|
+
isUpdateable: false, // cannot be updated
|
|
137
|
+
retrieving: true,
|
|
138
|
+
template: true,
|
|
139
|
+
},
|
|
140
|
+
derivedFromObjectName: {
|
|
141
|
+
// dataExtension name; field only returned by GET-API
|
|
142
|
+
isCreateable: false,
|
|
143
|
+
isUpdateable: false, // cannot be updated
|
|
144
|
+
retrieving: true,
|
|
145
|
+
template: true,
|
|
146
|
+
},
|
|
147
|
+
isSendable: {
|
|
148
|
+
isCreateable: false, // automatically set during create
|
|
149
|
+
isUpdateable: false, // cannot be updated
|
|
150
|
+
retrieving: true,
|
|
151
|
+
template: true,
|
|
152
|
+
},
|
|
153
|
+
r__source_dataExtension_key: {
|
|
154
|
+
isCreateable: false,
|
|
155
|
+
isUpdateable: false,
|
|
156
|
+
retrieving: true,
|
|
157
|
+
template: true,
|
|
158
|
+
},
|
|
159
|
+
c__filterDefinition: {
|
|
160
|
+
skipValidation: true,
|
|
161
|
+
},
|
|
162
|
+
r__folder_Path: {
|
|
163
|
+
isCreateable: false,
|
|
164
|
+
isUpdateable: false,
|
|
165
|
+
retrieving: true,
|
|
166
|
+
template: true,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
};
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
bodyIteratorField: 'items',
|
|
3
|
-
dependencies: [
|
|
4
|
-
|
|
3
|
+
dependencies: [
|
|
4
|
+
'dataFilter',
|
|
5
|
+
'dataFilterHidden',
|
|
6
|
+
'list',
|
|
7
|
+
'dataExtension',
|
|
8
|
+
'folder-filteractivity',
|
|
9
|
+
'folder-hidden',
|
|
10
|
+
],
|
|
11
|
+
dependencyGraph: {
|
|
12
|
+
filterDefinition: ['r__dataFilter_key'],
|
|
13
|
+
dataExtension: ['r__source_dataExtension_key', 'r__destination_dataExtension_key'],
|
|
14
|
+
},
|
|
5
15
|
hasExtended: false,
|
|
6
|
-
idField: '
|
|
7
|
-
keyIsFixed:
|
|
16
|
+
idField: 'filterActivityId',
|
|
17
|
+
keyIsFixed: true,
|
|
8
18
|
keyField: 'customerKey',
|
|
9
19
|
nameField: 'name',
|
|
20
|
+
folderType: 'filteractivity',
|
|
21
|
+
folderIdField: 'categoryId',
|
|
22
|
+
filter: {
|
|
23
|
+
statusId: 0, // exclude deleted filters
|
|
24
|
+
},
|
|
10
25
|
createdDateField: 'createdDate',
|
|
11
26
|
createdNameField: null,
|
|
12
27
|
lastmodDateField: 'modifiedDate',
|
|
@@ -14,57 +29,90 @@ export default {
|
|
|
14
29
|
restPagination: true,
|
|
15
30
|
maxKeyLength: 36, // confirmed max length
|
|
16
31
|
type: 'filter',
|
|
32
|
+
soapType: 'FilterActivity',
|
|
17
33
|
typeDescription:
|
|
18
|
-
'
|
|
19
|
-
typeRetrieveByDefault:
|
|
34
|
+
'Used in automations to filter lists and DEs. Depends on type "FilterDefinitions".',
|
|
35
|
+
typeRetrieveByDefault: true,
|
|
20
36
|
typeCdpByDefault: true,
|
|
21
37
|
typeName: 'Automation: Filter Activity',
|
|
22
38
|
fields: {
|
|
39
|
+
// https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/filteractivity.htm
|
|
23
40
|
categoryId: {
|
|
24
41
|
isCreateable: false,
|
|
25
|
-
isUpdateable:
|
|
42
|
+
isUpdateable: true,
|
|
26
43
|
retrieving: true,
|
|
27
|
-
template:
|
|
44
|
+
template: true,
|
|
28
45
|
},
|
|
29
46
|
createdDate: {
|
|
30
47
|
isCreateable: false,
|
|
31
48
|
isUpdateable: false,
|
|
32
|
-
retrieving:
|
|
49
|
+
retrieving: false,
|
|
33
50
|
template: false,
|
|
34
51
|
},
|
|
35
52
|
customerKey: {
|
|
36
|
-
isCreateable:
|
|
37
|
-
isUpdateable:
|
|
53
|
+
isCreateable: false,
|
|
54
|
+
isUpdateable: true,
|
|
38
55
|
retrieving: true,
|
|
56
|
+
template: true,
|
|
57
|
+
},
|
|
58
|
+
CustomerKey: {
|
|
59
|
+
isCreateable: true,
|
|
60
|
+
isUpdateable: false,
|
|
61
|
+
retrieving: false,
|
|
39
62
|
template: false,
|
|
40
63
|
},
|
|
41
64
|
description: {
|
|
42
65
|
isCreateable: false,
|
|
43
|
-
isUpdateable:
|
|
66
|
+
isUpdateable: true,
|
|
44
67
|
retrieving: true,
|
|
68
|
+
template: true,
|
|
69
|
+
},
|
|
70
|
+
Description: {
|
|
71
|
+
isCreateable: true,
|
|
72
|
+
isUpdateable: false,
|
|
73
|
+
retrieving: false,
|
|
45
74
|
template: false,
|
|
46
75
|
},
|
|
47
76
|
destinationObjectId: {
|
|
48
77
|
isCreateable: false,
|
|
49
|
-
isUpdateable:
|
|
78
|
+
isUpdateable: true,
|
|
50
79
|
retrieving: true,
|
|
80
|
+
template: true,
|
|
81
|
+
},
|
|
82
|
+
DestinationObjectID: {
|
|
83
|
+
isCreateable: true,
|
|
84
|
+
isUpdateable: false,
|
|
85
|
+
retrieving: false,
|
|
51
86
|
template: false,
|
|
52
87
|
},
|
|
53
88
|
destinationTypeId: {
|
|
54
89
|
isCreateable: false,
|
|
55
|
-
isUpdateable:
|
|
90
|
+
isUpdateable: true,
|
|
56
91
|
retrieving: true,
|
|
92
|
+
template: true,
|
|
93
|
+
},
|
|
94
|
+
DestinationTypeID: {
|
|
95
|
+
isCreateable: true,
|
|
96
|
+
isUpdateable: false,
|
|
97
|
+
retrieving: false,
|
|
57
98
|
template: false,
|
|
58
99
|
},
|
|
59
100
|
filterActivityId: {
|
|
60
|
-
isCreateable:
|
|
61
|
-
isUpdateable:
|
|
62
|
-
retrieving:
|
|
101
|
+
isCreateable: false,
|
|
102
|
+
isUpdateable: true,
|
|
103
|
+
retrieving: false,
|
|
104
|
+
template: false,
|
|
63
105
|
},
|
|
64
106
|
filterDefinitionId: {
|
|
65
107
|
isCreateable: false,
|
|
66
|
-
isUpdateable:
|
|
108
|
+
isUpdateable: true,
|
|
67
109
|
retrieving: true,
|
|
110
|
+
template: true,
|
|
111
|
+
},
|
|
112
|
+
FilterDefinitionID: {
|
|
113
|
+
isCreateable: true,
|
|
114
|
+
isUpdateable: false,
|
|
115
|
+
retrieving: false,
|
|
68
116
|
template: false,
|
|
69
117
|
},
|
|
70
118
|
modifiedDate: {
|
|
@@ -74,28 +122,94 @@ export default {
|
|
|
74
122
|
template: false,
|
|
75
123
|
},
|
|
76
124
|
name: {
|
|
77
|
-
isCreateable:
|
|
78
|
-
isUpdateable:
|
|
125
|
+
isCreateable: false,
|
|
126
|
+
isUpdateable: true,
|
|
79
127
|
retrieving: true,
|
|
128
|
+
template: true,
|
|
129
|
+
},
|
|
130
|
+
Name: {
|
|
131
|
+
isCreateable: true,
|
|
132
|
+
isUpdateable: false,
|
|
133
|
+
retrieving: false,
|
|
80
134
|
template: false,
|
|
81
135
|
},
|
|
82
136
|
sourceObjectId: {
|
|
83
137
|
isCreateable: false,
|
|
84
|
-
isUpdateable:
|
|
138
|
+
isUpdateable: true,
|
|
85
139
|
retrieving: true,
|
|
140
|
+
template: true,
|
|
141
|
+
},
|
|
142
|
+
SourceObjectID: {
|
|
143
|
+
isCreateable: true,
|
|
144
|
+
isUpdateable: false,
|
|
145
|
+
retrieving: false,
|
|
86
146
|
template: false,
|
|
87
147
|
},
|
|
88
148
|
sourceTypeId: {
|
|
89
149
|
isCreateable: false,
|
|
90
150
|
isUpdateable: false,
|
|
91
151
|
retrieving: true,
|
|
152
|
+
template: true,
|
|
153
|
+
},
|
|
154
|
+
SourceTypeID: {
|
|
155
|
+
isCreateable: true,
|
|
156
|
+
isUpdateable: false,
|
|
157
|
+
retrieving: false,
|
|
158
|
+
template: false,
|
|
159
|
+
},
|
|
160
|
+
filterDefinitionSourceTypeId: {
|
|
161
|
+
isCreateable: false,
|
|
162
|
+
isUpdateable: true,
|
|
163
|
+
retrieving: false,
|
|
92
164
|
template: false,
|
|
93
165
|
},
|
|
94
166
|
statusId: {
|
|
95
167
|
isCreateable: false,
|
|
96
|
-
isUpdateable:
|
|
168
|
+
isUpdateable: true,
|
|
97
169
|
retrieving: true,
|
|
170
|
+
template: true,
|
|
171
|
+
},
|
|
172
|
+
resultDEName: {
|
|
173
|
+
isCreateable: false,
|
|
174
|
+
isUpdateable: true,
|
|
175
|
+
retrieving: false,
|
|
98
176
|
template: false,
|
|
99
177
|
},
|
|
178
|
+
resultDEKey: {
|
|
179
|
+
isCreateable: false,
|
|
180
|
+
isUpdateable: true,
|
|
181
|
+
retrieving: false,
|
|
182
|
+
template: false,
|
|
183
|
+
},
|
|
184
|
+
resultDEDescription: {
|
|
185
|
+
isCreateable: false,
|
|
186
|
+
isUpdateable: true,
|
|
187
|
+
retrieving: false,
|
|
188
|
+
template: false,
|
|
189
|
+
},
|
|
190
|
+
r__folder_Path: {
|
|
191
|
+
isCreateable: false,
|
|
192
|
+
isUpdateable: false,
|
|
193
|
+
retrieving: true,
|
|
194
|
+
template: true,
|
|
195
|
+
},
|
|
196
|
+
r__dataFilter_key: {
|
|
197
|
+
isCreateable: false,
|
|
198
|
+
isUpdateable: false,
|
|
199
|
+
retrieving: true,
|
|
200
|
+
template: true,
|
|
201
|
+
},
|
|
202
|
+
r__source_dataExtension_key: {
|
|
203
|
+
isCreateable: false,
|
|
204
|
+
isUpdateable: false,
|
|
205
|
+
retrieving: true,
|
|
206
|
+
template: true,
|
|
207
|
+
},
|
|
208
|
+
r__destination_dataExtension_key: {
|
|
209
|
+
isCreateable: false,
|
|
210
|
+
isUpdateable: false,
|
|
211
|
+
retrieving: true,
|
|
212
|
+
template: true,
|
|
213
|
+
},
|
|
100
214
|
},
|
|
101
215
|
};
|
|
@@ -8,7 +8,7 @@ export default {
|
|
|
8
8
|
dependencies: [
|
|
9
9
|
'folder-journey',
|
|
10
10
|
'triggeredSend', // for EMAILV2-activity
|
|
11
|
-
'dataExtension', // for transactionalEmails: EMAILV2-activity
|
|
11
|
+
'dataExtension', // for transactionalEmails: EMAILV2-activity and for UPDATECONTACTDATA activity
|
|
12
12
|
'deliveryProfile',
|
|
13
13
|
'event', // for Multistep and Quicksend journeys
|
|
14
14
|
'mobileMessage', // for SMSSYNC-activity
|
|
@@ -27,6 +27,7 @@ export default {
|
|
|
27
27
|
dataExtension: [
|
|
28
28
|
'activities.metaData.highThroughput.r__dataExtension_key',
|
|
29
29
|
'activities.configurationArguments.triggeredSend.r__dataExtension_key.domainExclusions',
|
|
30
|
+
'activities.arguments.activityData.updateContactFields.r__dataExtension_key',
|
|
30
31
|
],
|
|
31
32
|
deliveryProfile: ['activities.configurationArguments.triggeredSend.r__deliveryProfile_key'],
|
|
32
33
|
list: [
|
|
@@ -716,6 +717,24 @@ export default {
|
|
|
716
717
|
'activities[].schema': {
|
|
717
718
|
skipValidation: true,
|
|
718
719
|
},
|
|
720
|
+
'activities[].arguments.activityData.updateContactFields[].r__dataExtension_key': {
|
|
721
|
+
isCreateable: false,
|
|
722
|
+
isUpdateable: false,
|
|
723
|
+
retrieving: true,
|
|
724
|
+
template: true,
|
|
725
|
+
},
|
|
726
|
+
'activities[].arguments.activityData.updateContactFields[].r__dataExtensionField_name': {
|
|
727
|
+
isCreateable: false,
|
|
728
|
+
isUpdateable: false,
|
|
729
|
+
retrieving: true,
|
|
730
|
+
template: true,
|
|
731
|
+
},
|
|
732
|
+
'activities[].arguments.activityData.updateContactFields[].field': {
|
|
733
|
+
isCreateable: true,
|
|
734
|
+
isUpdateable: true,
|
|
735
|
+
retrieving: true,
|
|
736
|
+
template: true,
|
|
737
|
+
},
|
|
719
738
|
categoryId: {
|
|
720
739
|
isCreateable: true,
|
|
721
740
|
isUpdateable: true,
|
package/lib/util/devops.js
CHANGED
|
@@ -30,6 +30,7 @@ import cliProgress from 'cli-progress';
|
|
|
30
30
|
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
31
31
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
32
32
|
* @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
|
|
33
|
+
* @typedef {import('../../types/mcdev.d.js').BuildFilter} BuildFilter
|
|
33
34
|
*/
|
|
34
35
|
|
|
35
36
|
/**
|
|
@@ -193,7 +194,6 @@ const DevOps = {
|
|
|
193
194
|
} else {
|
|
194
195
|
// find the key in paths like:
|
|
195
196
|
// - retrieve/cred/bu/asset/block/016aecc7-7063-4b78-93f4-aa119ea933c7.asset-block-meta.html
|
|
196
|
-
// - retrieve/cred/bu/asset/message/003c1ef5-f538-473a-91da-26942024a64a/blocks/views.html.slots.[bottom-8frq7iw2k99].asset-message-meta.html
|
|
197
197
|
// - retrieve/cred/bu/query/03efd5f1-ba1f-487a-9c9a-36aeb2ae5192.query-meta.sql
|
|
198
198
|
// assets have an additional folder level for their subtype
|
|
199
199
|
// keys could contain dots themselves
|
|
@@ -202,6 +202,10 @@ const DevOps = {
|
|
|
202
202
|
[file.type === 'asset' ? 5 : 4].split('.')
|
|
203
203
|
.slice(0, -2)
|
|
204
204
|
.join('.');
|
|
205
|
+
if (file.type === 'asset' && !file.externalKey) {
|
|
206
|
+
// retrieve/cred/bu/asset/message/emailkey/blocks/views.html.slots.[8maw2k7jnlb-5llcajmxaqa].asset-message-meta.html
|
|
207
|
+
file.externalKey = file.file.split('/')[5];
|
|
208
|
+
}
|
|
205
209
|
file.name = null;
|
|
206
210
|
}
|
|
207
211
|
|
|
@@ -454,7 +458,9 @@ const DevOps = {
|
|
|
454
458
|
// remove potentially existing "description"-entry
|
|
455
459
|
delete properties.marketList[sourceML].description;
|
|
456
460
|
|
|
457
|
-
const sourceMarketBuArr = Object.keys(properties.marketList[sourceML])
|
|
461
|
+
const sourceMarketBuArr = Object.keys(properties.marketList[sourceML]).filter(
|
|
462
|
+
(key) => key !== 'filter'
|
|
463
|
+
);
|
|
458
464
|
if (sourceMarketBuArr.length !== 1) {
|
|
459
465
|
throw new Error('Only 1 BU is allowed per source marketList');
|
|
460
466
|
}
|
|
@@ -494,10 +500,16 @@ const DevOps = {
|
|
|
494
500
|
for (const sourceMlName of sourceMarketListArr) {
|
|
495
501
|
/** @type {string} */
|
|
496
502
|
const targetMlName = sourceTargetMapping[sourceMlName];
|
|
503
|
+
const sourceMarketLists = properties.marketList[sourceMlName];
|
|
497
504
|
/** @type {string} */
|
|
498
|
-
const sourceBU = Object.keys(
|
|
505
|
+
const sourceBU = Object.keys(sourceMarketLists).find((key) => key !== 'filter');
|
|
506
|
+
// accept ["oneMarket"] or "oneMarket" for sourceMarket, but not ["oneMarket","secondMarket"] or []
|
|
499
507
|
/** @type {string} */
|
|
500
|
-
const sourceMarket =
|
|
508
|
+
const sourceMarket =
|
|
509
|
+
Array.isArray(sourceMarketLists[sourceBU]) &&
|
|
510
|
+
sourceMarketLists[sourceBU].length === 1
|
|
511
|
+
? sourceMarketLists[sourceBU][0]
|
|
512
|
+
: sourceMarketLists[sourceBU];
|
|
501
513
|
if ('string' !== typeof sourceMarket) {
|
|
502
514
|
Util.logger.error(
|
|
503
515
|
'Deployment Source market list needs to have a 1:1 BU-Market combo. Your value: ' +
|
|
@@ -564,7 +576,8 @@ const DevOps = {
|
|
|
564
576
|
buTypeDelta[buFrom],
|
|
565
577
|
[sourceMarket],
|
|
566
578
|
[targetMlName],
|
|
567
|
-
true
|
|
579
|
+
true,
|
|
580
|
+
sourceMarketLists.filter
|
|
568
581
|
);
|
|
569
582
|
}
|
|
570
583
|
this._generateDeleteInstructions(delta, sourceMarket, properties, targetMlName);
|