mcdev 8.2.1 → 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 +1 -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/DataExtensionField.js +21 -0
- 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 +111 -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 +14 -4
- 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_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/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
|
/**
|
|
@@ -457,7 +458,9 @@ const DevOps = {
|
|
|
457
458
|
// remove potentially existing "description"-entry
|
|
458
459
|
delete properties.marketList[sourceML].description;
|
|
459
460
|
|
|
460
|
-
const sourceMarketBuArr = Object.keys(properties.marketList[sourceML])
|
|
461
|
+
const sourceMarketBuArr = Object.keys(properties.marketList[sourceML]).filter(
|
|
462
|
+
(key) => key !== 'filter'
|
|
463
|
+
);
|
|
461
464
|
if (sourceMarketBuArr.length !== 1) {
|
|
462
465
|
throw new Error('Only 1 BU is allowed per source marketList');
|
|
463
466
|
}
|
|
@@ -497,10 +500,16 @@ const DevOps = {
|
|
|
497
500
|
for (const sourceMlName of sourceMarketListArr) {
|
|
498
501
|
/** @type {string} */
|
|
499
502
|
const targetMlName = sourceTargetMapping[sourceMlName];
|
|
503
|
+
const sourceMarketLists = properties.marketList[sourceMlName];
|
|
500
504
|
/** @type {string} */
|
|
501
|
-
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 []
|
|
502
507
|
/** @type {string} */
|
|
503
|
-
const sourceMarket =
|
|
508
|
+
const sourceMarket =
|
|
509
|
+
Array.isArray(sourceMarketLists[sourceBU]) &&
|
|
510
|
+
sourceMarketLists[sourceBU].length === 1
|
|
511
|
+
? sourceMarketLists[sourceBU][0]
|
|
512
|
+
: sourceMarketLists[sourceBU];
|
|
504
513
|
if ('string' !== typeof sourceMarket) {
|
|
505
514
|
Util.logger.error(
|
|
506
515
|
'Deployment Source market list needs to have a 1:1 BU-Market combo. Your value: ' +
|
|
@@ -567,7 +576,8 @@ const DevOps = {
|
|
|
567
576
|
buTypeDelta[buFrom],
|
|
568
577
|
[sourceMarket],
|
|
569
578
|
[targetMlName],
|
|
570
|
-
true
|
|
579
|
+
true,
|
|
580
|
+
sourceMarketLists.filter
|
|
571
581
|
);
|
|
572
582
|
}
|
|
573
583
|
this._generateDeleteInstructions(delta, sourceMarket, properties, targetMlName);
|
package/lib/util/util.js
CHANGED
|
@@ -146,7 +146,7 @@ export const Util = {
|
|
|
146
146
|
// check if BUs in marketList are valid
|
|
147
147
|
let buCounter = 0;
|
|
148
148
|
for (const businessUnit in properties.marketList[mlName]) {
|
|
149
|
-
if (businessUnit !== 'description') {
|
|
149
|
+
if (businessUnit !== 'description' && businessUnit !== 'filter') {
|
|
150
150
|
buCounter++;
|
|
151
151
|
Util.isValidBU(properties, businessUnit, true);
|
|
152
152
|
if (!Util.isValidBU(properties, businessUnit, true)) {
|
|
@@ -1134,7 +1134,12 @@ export const Util = {
|
|
|
1134
1134
|
String.raw`\$1`
|
|
1135
1135
|
);
|
|
1136
1136
|
// Replace % and _ with equivalent regex
|
|
1137
|
-
|
|
1137
|
+
// Replace % with .*
|
|
1138
|
+
search = search.replaceAll('%', '.*');
|
|
1139
|
+
// Replace _ with . only if not surrounded by [ and ]
|
|
1140
|
+
search = search.replaceAll(/(?<!\[)_+(?!\])/g, (match) => '.'.repeat(match.length));
|
|
1141
|
+
// replace [_] with _
|
|
1142
|
+
search = search.replaceAll(String.raw`\[_\]`, '_');
|
|
1138
1143
|
// Check matches
|
|
1139
1144
|
return new RegExp('^' + search + '$', 'gi').test(testString);
|
|
1140
1145
|
},
|