mcdev 8.1.0 → 8.2.1
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 +2 -2
- package/.github/workflows/coverage-base-update.yml +3 -3
- package/.github/workflows/coverage-develop-branch.yml +3 -3
- package/.github/workflows/coverage-main-branch.yml +3 -3
- package/.github/workflows/coverage.yml +4 -4
- package/.github/workflows/npm-publish.yml +4 -4
- package/@types/lib/MetadataTypeDefinitions.d.ts +2 -0
- package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
- package/@types/lib/MetadataTypeInfo.d.ts +2 -0
- package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts +257 -0
- package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts +208 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts.map +1 -0
- package/@types/lib/util/devops.d.ts +2 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +2 -1
- package/@types/lib/util/util.d.ts.map +1 -1
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/cli.js +5 -0
- package/lib/index.js +26 -4
- package/lib/metadataTypes/Asset.js +30 -7
- package/lib/metadataTypes/Automation.js +4 -2
- package/lib/metadataTypes/DataExtension.js +19 -12
- package/lib/metadataTypes/DataExtensionField.js +4 -3
- package/lib/metadataTypes/Folder.js +1 -1
- package/lib/metadataTypes/Journey.js +12 -2
- package/lib/metadataTypes/MetadataType.js +8 -2
- package/lib/metadataTypes/TriggeredSendSummary.js +102 -0
- package/lib/metadataTypes/definitions/TriggeredSendSummary.definition.js +211 -0
- package/lib/util/devops.js +29 -9
- package/lib/util/util.js +13 -4
- package/package.json +10 -10
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +26 -0
- package/test/resources/9999999/automation/create-testNew_automation-expected.md +1 -1
- package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +1 -1
- package/test/resources/9999999/automation/update-testExisting_automation-expected.md +1 -1
- 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_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/triggeredSendSummary/get-expected.json +24 -0
- package/test/resources/9999999/triggeredSendSummary/retrieve-response.xml +49 -0
- package/test/type.dataExtension.test.js +41 -0
- package/test/type.journey.test.js +37 -2
- package/test/type.triggeredSendSummary.test.js +45 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import MetadataType from './MetadataType.js';
|
|
4
|
+
import cache from '../util/cache.js';
|
|
5
|
+
import { Util } from '../util/util.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
9
|
+
* @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract
|
|
10
|
+
* @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
|
|
11
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
|
|
12
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
|
|
13
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
|
|
14
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
|
|
15
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
|
|
16
|
+
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
17
|
+
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* TriggeredSendSummary MetadataType
|
|
22
|
+
*
|
|
23
|
+
* @augments MetadataType
|
|
24
|
+
*/
|
|
25
|
+
class TriggeredSendSummary extends MetadataType {
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
28
|
+
*
|
|
29
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
30
|
+
* @param {void | string[]} [_] unused parameter
|
|
31
|
+
* @param {void | string[]} [__] unused parameter
|
|
32
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
33
|
+
* @returns {Promise.<MetadataTypeMapObj>} Promise of metadata
|
|
34
|
+
*/
|
|
35
|
+
static retrieve(retrieveDir, _, __, key) {
|
|
36
|
+
/** @type {SoapRequestParams} */
|
|
37
|
+
let requestParams = {};
|
|
38
|
+
if (key) {
|
|
39
|
+
// filter by CustomerKey when a specific key is requested
|
|
40
|
+
requestParams = {
|
|
41
|
+
filter: {
|
|
42
|
+
leftOperand: 'CustomerKey',
|
|
43
|
+
operator: 'equals',
|
|
44
|
+
rightOperand: key,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return super.retrieveSOAP(retrieveDir, requestParams, key);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* parses retrieved Metadata before saving
|
|
53
|
+
*
|
|
54
|
+
* @param {MetadataTypeItem} metadata a single item
|
|
55
|
+
* @returns {MetadataTypeItem | void} Array with one metadata object and one sql string
|
|
56
|
+
*/
|
|
57
|
+
static postRetrieveTasks(metadata) {
|
|
58
|
+
// CustomerKey for this type is the same as the CustomerKey of the TriggeredSend it relates to
|
|
59
|
+
const triggeredSend = cache.getByKey('triggeredSend', metadata.CustomerKey);
|
|
60
|
+
if (!triggeredSend) {
|
|
61
|
+
Util.logger.verbose(
|
|
62
|
+
`Could not find related TriggeredSend with CustomerKey '${metadata.CustomerKey}' for the TriggeredSendSummary.`
|
|
63
|
+
);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
metadata['TriggeredSend.CategoryID'] = triggeredSend.CategoryID;
|
|
67
|
+
// folder path for a TriggeredSendSummary is the same as for the related TriggeredSend. CategoryID is not retrievable for this type, so use the TriggeredSend's field
|
|
68
|
+
this.setFolderPath(metadata);
|
|
69
|
+
delete metadata['TriggeredSend.CategoryID'];
|
|
70
|
+
metadata.r__triggeredSend_name = triggeredSend.Name;
|
|
71
|
+
metadata.r__triggeredSend_key = triggeredSend.CustomerKey;
|
|
72
|
+
return metadata;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* retrieves the folder path from cache and updates the TriggeredSendSummary metadata with it after retrieve
|
|
76
|
+
*
|
|
77
|
+
* @param {MetadataTypeItem} metadata a single item
|
|
78
|
+
*/
|
|
79
|
+
static setFolderPath(metadata) {
|
|
80
|
+
try {
|
|
81
|
+
metadata.r__folder_Path = cache.searchForField(
|
|
82
|
+
'folder',
|
|
83
|
+
metadata[this.definition.folderIdField],
|
|
84
|
+
'ID',
|
|
85
|
+
'Path'
|
|
86
|
+
);
|
|
87
|
+
delete metadata[this.definition.folderIdField];
|
|
88
|
+
} catch {
|
|
89
|
+
Util.logger.verbose(
|
|
90
|
+
` ☇ skipping ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find folder.`
|
|
91
|
+
);
|
|
92
|
+
// do not save this Triggered Send Summary because it would not be visible in the user interface
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Assign definition to static attributes
|
|
99
|
+
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
100
|
+
TriggeredSendSummary.definition = MetadataTypeDefinitions.triggeredSendSummary;
|
|
101
|
+
|
|
102
|
+
export default TriggeredSendSummary;
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
bodyIteratorField: 'Results',
|
|
3
|
+
dependencies: [
|
|
4
|
+
'triggeredSend',
|
|
5
|
+
'folder-hidden',
|
|
6
|
+
'folder-triggered_send',
|
|
7
|
+
'folder-triggered_send_journeybuilder',
|
|
8
|
+
],
|
|
9
|
+
dependencyGraph: {
|
|
10
|
+
triggeredSend: ['r__triggeredSend_key'],
|
|
11
|
+
},
|
|
12
|
+
filter: {},
|
|
13
|
+
hasExtended: false,
|
|
14
|
+
idField: 'ObjectID',
|
|
15
|
+
keepId: false,
|
|
16
|
+
keyIsFixed: true,
|
|
17
|
+
keyField: 'CustomerKey',
|
|
18
|
+
nameField: 'r__triggeredSend_name',
|
|
19
|
+
folderIdField: 'TriggeredSend.CategoryID',
|
|
20
|
+
createdDateField: null,
|
|
21
|
+
createdNameField: null,
|
|
22
|
+
lastmodDateField: null,
|
|
23
|
+
lastmodNameField: null,
|
|
24
|
+
restPagination: null,
|
|
25
|
+
maxKeyLength: 36,
|
|
26
|
+
type: 'triggeredSendSummary',
|
|
27
|
+
soapType: 'triggeredSendSummary',
|
|
28
|
+
typeDescription: 'Summary data for a Triggered Send',
|
|
29
|
+
typeRetrieveByDefault: false,
|
|
30
|
+
typeCdpByDefault: false,
|
|
31
|
+
typeName: 'Triggered Send Summary',
|
|
32
|
+
fields: {
|
|
33
|
+
Bounces: {
|
|
34
|
+
isCreateable: true,
|
|
35
|
+
isUpdateable: false,
|
|
36
|
+
retrieving: true,
|
|
37
|
+
templating: true,
|
|
38
|
+
},
|
|
39
|
+
Clicks: {
|
|
40
|
+
isCreateable: true,
|
|
41
|
+
isUpdateable: false,
|
|
42
|
+
retrieving: true,
|
|
43
|
+
templating: true,
|
|
44
|
+
},
|
|
45
|
+
'Client.ID': {
|
|
46
|
+
isCreateable: false,
|
|
47
|
+
isUpdateable: false,
|
|
48
|
+
retrieving: false,
|
|
49
|
+
templating: false,
|
|
50
|
+
},
|
|
51
|
+
Conversions: {
|
|
52
|
+
isCreateable: true,
|
|
53
|
+
isUpdateable: false,
|
|
54
|
+
retrieving: true,
|
|
55
|
+
templating: true,
|
|
56
|
+
},
|
|
57
|
+
CustomerKey: {
|
|
58
|
+
isCreateable: true,
|
|
59
|
+
isUpdateable: true,
|
|
60
|
+
retrieving: true,
|
|
61
|
+
templating: true,
|
|
62
|
+
},
|
|
63
|
+
FTAFEmailsSent: {
|
|
64
|
+
isCreateable: true,
|
|
65
|
+
isUpdateable: false,
|
|
66
|
+
retrieving: true,
|
|
67
|
+
templating: true,
|
|
68
|
+
},
|
|
69
|
+
FTAFOptIns: {
|
|
70
|
+
isCreateable: true,
|
|
71
|
+
isUpdateable: false,
|
|
72
|
+
retrieving: true,
|
|
73
|
+
templating: true,
|
|
74
|
+
},
|
|
75
|
+
FTAFRequests: {
|
|
76
|
+
isCreateable: true,
|
|
77
|
+
isUpdateable: false,
|
|
78
|
+
retrieving: true,
|
|
79
|
+
templating: true,
|
|
80
|
+
},
|
|
81
|
+
ID: {
|
|
82
|
+
isCreateable: false,
|
|
83
|
+
isUpdateable: false,
|
|
84
|
+
retrieving: false,
|
|
85
|
+
templating: false,
|
|
86
|
+
},
|
|
87
|
+
InProcess: {
|
|
88
|
+
isCreateable: true,
|
|
89
|
+
isUpdateable: false,
|
|
90
|
+
retrieving: true,
|
|
91
|
+
templating: true,
|
|
92
|
+
},
|
|
93
|
+
NotSentDueToError: {
|
|
94
|
+
isCreateable: true,
|
|
95
|
+
isUpdateable: false,
|
|
96
|
+
retrieving: true,
|
|
97
|
+
templating: true,
|
|
98
|
+
},
|
|
99
|
+
NotSentDueToOptOut: {
|
|
100
|
+
isCreateable: true,
|
|
101
|
+
isUpdateable: false,
|
|
102
|
+
retrieving: true,
|
|
103
|
+
templating: true,
|
|
104
|
+
},
|
|
105
|
+
NotSentDueToUndeliverable: {
|
|
106
|
+
isCreateable: true,
|
|
107
|
+
isUpdateable: false,
|
|
108
|
+
retrieving: true,
|
|
109
|
+
templating: true,
|
|
110
|
+
},
|
|
111
|
+
ObjectID: {
|
|
112
|
+
isCreateable: false,
|
|
113
|
+
isUpdateable: false,
|
|
114
|
+
retrieving: false,
|
|
115
|
+
templating: false,
|
|
116
|
+
},
|
|
117
|
+
/* ObjectState: {
|
|
118
|
+
isCreateable: false,
|
|
119
|
+
isUpdateable: false,
|
|
120
|
+
retrieving: false,
|
|
121
|
+
templating: false,
|
|
122
|
+
}, */ // according to the documentation"Reserved for future use"
|
|
123
|
+
Opens: {
|
|
124
|
+
isCreateable: true,
|
|
125
|
+
isUpdateable: false,
|
|
126
|
+
retrieving: true,
|
|
127
|
+
templating: true,
|
|
128
|
+
},
|
|
129
|
+
OptOuts: {
|
|
130
|
+
isCreateable: true,
|
|
131
|
+
isUpdateable: false,
|
|
132
|
+
retrieving: true,
|
|
133
|
+
templating: true,
|
|
134
|
+
},
|
|
135
|
+
Owner: {
|
|
136
|
+
isCreateable: false,
|
|
137
|
+
isUpdateable: false,
|
|
138
|
+
retrieving: false,
|
|
139
|
+
templating: false,
|
|
140
|
+
},
|
|
141
|
+
PartnerKey: {
|
|
142
|
+
isCreateable: false,
|
|
143
|
+
isUpdateable: false,
|
|
144
|
+
retrieving: false,
|
|
145
|
+
templating: false,
|
|
146
|
+
},
|
|
147
|
+
PartnerProperties: {
|
|
148
|
+
isCreateable: false,
|
|
149
|
+
isUpdateable: false,
|
|
150
|
+
retrieving: false,
|
|
151
|
+
templating: false,
|
|
152
|
+
},
|
|
153
|
+
Queued: {
|
|
154
|
+
isCreateable: true,
|
|
155
|
+
isUpdateable: false,
|
|
156
|
+
retrieving: true,
|
|
157
|
+
templating: true,
|
|
158
|
+
},
|
|
159
|
+
Sent: {
|
|
160
|
+
isCreateable: true,
|
|
161
|
+
isUpdateable: false,
|
|
162
|
+
retrieving: true,
|
|
163
|
+
templating: true,
|
|
164
|
+
},
|
|
165
|
+
SurveyResponses: {
|
|
166
|
+
isCreateable: true,
|
|
167
|
+
isUpdateable: false,
|
|
168
|
+
retrieving: true,
|
|
169
|
+
templating: true,
|
|
170
|
+
},
|
|
171
|
+
UniqueClicks: {
|
|
172
|
+
isCreateable: true,
|
|
173
|
+
isUpdateable: false,
|
|
174
|
+
retrieving: true,
|
|
175
|
+
templating: true,
|
|
176
|
+
},
|
|
177
|
+
UniqueConversions: {
|
|
178
|
+
isCreateable: true,
|
|
179
|
+
isUpdateable: false,
|
|
180
|
+
retrieving: true,
|
|
181
|
+
templating: true,
|
|
182
|
+
},
|
|
183
|
+
UniqueOpens: {
|
|
184
|
+
isCreateable: true,
|
|
185
|
+
isUpdateable: false,
|
|
186
|
+
retrieving: true,
|
|
187
|
+
templating: true,
|
|
188
|
+
},
|
|
189
|
+
CorrelationID: {
|
|
190
|
+
isCreateable: false,
|
|
191
|
+
isUpdateable: false,
|
|
192
|
+
retrieving: false,
|
|
193
|
+
templating: false,
|
|
194
|
+
},
|
|
195
|
+
CreatedDate: {
|
|
196
|
+
isCreateable: false,
|
|
197
|
+
isUpdateable: false,
|
|
198
|
+
retrieving: false /** Listed in the type documentation but not retrievable */,
|
|
199
|
+
templating: false,
|
|
200
|
+
},
|
|
201
|
+
ModifiedDate: {
|
|
202
|
+
isCreateable: false,
|
|
203
|
+
isUpdateable: false,
|
|
204
|
+
retrieving: false /** Listed in the type documentation but not retrievable */,
|
|
205
|
+
templating: false,
|
|
206
|
+
},
|
|
207
|
+
r__triggeredSend_name: { skipValidation: true },
|
|
208
|
+
r__triggeredSend_key: { skipValidation: true },
|
|
209
|
+
r__folder_Path: { skipValidation: true },
|
|
210
|
+
},
|
|
211
|
+
};
|
package/lib/util/devops.js
CHANGED
|
@@ -193,12 +193,18 @@ const DevOps = {
|
|
|
193
193
|
} else {
|
|
194
194
|
// find the key in paths like:
|
|
195
195
|
// - 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
196
|
// - retrieve/cred/bu/query/03efd5f1-ba1f-487a-9c9a-36aeb2ae5192.query-meta.sql
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
197
|
+
// assets have an additional folder level for their subtype
|
|
198
|
+
// keys could contain dots themselves
|
|
199
|
+
file.externalKey = file.file
|
|
200
|
+
.split('/')
|
|
201
|
+
[file.type === 'asset' ? 5 : 4].split('.')
|
|
202
|
+
.slice(0, -2)
|
|
203
|
+
.join('.');
|
|
204
|
+
if (file.type === 'asset' && !file.externalKey) {
|
|
205
|
+
// retrieve/cred/bu/asset/message/emailkey/blocks/views.html.slots.[8maw2k7jnlb-5llcajmxaqa].asset-message-meta.html
|
|
206
|
+
file.externalKey = file.file.split('/')[5];
|
|
207
|
+
}
|
|
202
208
|
file.name = null;
|
|
203
209
|
}
|
|
204
210
|
|
|
@@ -267,8 +273,14 @@ const DevOps = {
|
|
|
267
273
|
}
|
|
268
274
|
// Write into delta.json to serve as documentation
|
|
269
275
|
const directoryDeltaPkg = 'logs/';
|
|
270
|
-
await File.writeJSONToFile(
|
|
271
|
-
|
|
276
|
+
await File.writeJSONToFile(
|
|
277
|
+
directoryDeltaPkg,
|
|
278
|
+
Util.logFileName +
|
|
279
|
+
'-delta_package-' +
|
|
280
|
+
filterPathsCSV.replaceAll(',', '-').replaceAll('/', '-'),
|
|
281
|
+
delta
|
|
282
|
+
);
|
|
283
|
+
this.document(directoryDeltaPkg, filterPathsCSV, delta);
|
|
272
284
|
Util.logger.info(
|
|
273
285
|
`- ✔️ Identified changes: Add/Update=${gitActionsCounter['add/update']}, Move=${gitActionsCounter['move']}, Delete=${gitActionsCounter['delete']}`
|
|
274
286
|
);
|
|
@@ -572,10 +584,11 @@ const DevOps = {
|
|
|
572
584
|
* create markdown file for deployment listing
|
|
573
585
|
*
|
|
574
586
|
* @param {string} directory -
|
|
587
|
+
* @param {string} filterPathsCSV -
|
|
575
588
|
* @param {object} jsonReport -
|
|
576
589
|
* @returns {void}
|
|
577
590
|
*/
|
|
578
|
-
document(directory, jsonReport) {
|
|
591
|
+
document(directory, filterPathsCSV, jsonReport) {
|
|
579
592
|
const tabled = jsonToTable(jsonReport);
|
|
580
593
|
let output = `# Deployment Report\n\n`;
|
|
581
594
|
let tableSeparator = '';
|
|
@@ -597,7 +610,14 @@ const DevOps = {
|
|
|
597
610
|
}
|
|
598
611
|
try {
|
|
599
612
|
// write to disk (asynchronously)
|
|
600
|
-
File.writeToFile(
|
|
613
|
+
File.writeToFile(
|
|
614
|
+
directory,
|
|
615
|
+
Util.logFileName +
|
|
616
|
+
'-delta_package-' +
|
|
617
|
+
filterPathsCSV.replaceAll(',', '-').replaceAll('/', '-'),
|
|
618
|
+
'md',
|
|
619
|
+
output
|
|
620
|
+
);
|
|
601
621
|
} catch (ex) {
|
|
602
622
|
Util.logger.error(`DevOps.document():: error | ` + ex.message);
|
|
603
623
|
}
|
package/lib/util/util.js
CHANGED
|
@@ -1143,14 +1143,17 @@ export const Util = {
|
|
|
1143
1143
|
* returns true if no LIKE filter is defined or if all filters match
|
|
1144
1144
|
*
|
|
1145
1145
|
* @param {MetadataTypeItem} metadata a single metadata item
|
|
1146
|
+
* @param {object} definition type definition
|
|
1146
1147
|
* @param {object} [filters] only used in recursive calls
|
|
1147
1148
|
* @returns {boolean} true if no LIKE filter is defined or if all filters match
|
|
1148
1149
|
*/
|
|
1149
|
-
fieldsLike(metadata, filters) {
|
|
1150
|
+
fieldsLike(metadata, definition, filters) {
|
|
1150
1151
|
if (metadata.json && metadata.codeArr) {
|
|
1151
1152
|
// Compensate for CodeExtractItem format
|
|
1152
1153
|
metadata = metadata.json;
|
|
1153
1154
|
}
|
|
1155
|
+
// ensure we only convert "key" and "name" fields on the first call to this method
|
|
1156
|
+
const checkDefaultKeyAndName = filters ? false : true;
|
|
1154
1157
|
filters ||= Util.OPTIONS.like;
|
|
1155
1158
|
if (!filters) {
|
|
1156
1159
|
return true;
|
|
@@ -1163,14 +1166,20 @@ export const Util = {
|
|
|
1163
1166
|
? filters[field].split(',')
|
|
1164
1167
|
: filters[field];
|
|
1165
1168
|
if (Array.isArray(metadata[field])) {
|
|
1166
|
-
return metadata[field].some((f) => Util.fieldsLike(f, filter));
|
|
1169
|
+
return metadata[field].some((f) => Util.fieldsLike(f, definition, filter));
|
|
1167
1170
|
} else {
|
|
1171
|
+
let fieldName;
|
|
1172
|
+
if (field === 'key' && checkDefaultKeyAndName) {
|
|
1173
|
+
fieldName = definition.keyField;
|
|
1174
|
+
} else if (field === 'name' && checkDefaultKeyAndName) {
|
|
1175
|
+
fieldName = definition.nameField;
|
|
1176
|
+
}
|
|
1168
1177
|
if (typeof filter === 'string') {
|
|
1169
|
-
return Util.stringLike(metadata[field], filter);
|
|
1178
|
+
return Util.stringLike(metadata[fieldName || field], filter);
|
|
1170
1179
|
} else if (Array.isArray(filter)) {
|
|
1171
1180
|
return filter.some((f) => Util.stringLike(metadata[field], f));
|
|
1172
1181
|
} else if (typeof filter === 'object') {
|
|
1173
|
-
return Util.fieldsLike(metadata[field], filter);
|
|
1182
|
+
return Util.fieldsLike(metadata[field], definition, filter);
|
|
1174
1183
|
}
|
|
1175
1184
|
}
|
|
1176
1185
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcdev",
|
|
3
|
-
"version": "8.1
|
|
3
|
+
"version": "8.2.1",
|
|
4
4
|
"description": "Accenture Salesforce Marketing Cloud DevTools",
|
|
5
5
|
"author": "Accenture: joern.berkefeld, douglas.midgley, robert.zimmermann, maciej.barnas",
|
|
6
6
|
"license": "MIT",
|
|
@@ -80,21 +80,21 @@
|
|
|
80
80
|
"p-limit": "6.2.0",
|
|
81
81
|
"prettier": "3.5.3",
|
|
82
82
|
"prettier-plugin-sql": "0.19.0",
|
|
83
|
-
"semver": "7.7.
|
|
83
|
+
"semver": "7.7.3",
|
|
84
84
|
"sfmc-sdk": "2.1.2",
|
|
85
|
-
"simple-git": "3.
|
|
85
|
+
"simple-git": "3.29.0",
|
|
86
86
|
"toposort": "2.0.2",
|
|
87
87
|
"update-notifier": "7.3.1",
|
|
88
88
|
"winston": "3.17.0",
|
|
89
89
|
"yargs": "17.7.2",
|
|
90
|
-
"yocto-spinner": "0.
|
|
90
|
+
"yocto-spinner": "1.0.0"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@eslint/js": "9.28.0",
|
|
94
94
|
"@types/fs-extra": "11.0.4",
|
|
95
95
|
"@types/inquirer": "9.0.7",
|
|
96
96
|
"@types/mocha": "10.0.8",
|
|
97
|
-
"@types/node": "
|
|
97
|
+
"@types/node": "24.9.1",
|
|
98
98
|
"@types/yargs": "17.0.33",
|
|
99
99
|
"assert": "2.1.0",
|
|
100
100
|
"axios-mock-adapter": "2.0.0",
|
|
@@ -104,17 +104,17 @@
|
|
|
104
104
|
"eslint": "9.28.0",
|
|
105
105
|
"eslint-config-ssjs": "2.0.0",
|
|
106
106
|
"eslint-plugin-jsdoc": "50.7.1",
|
|
107
|
-
"eslint-plugin-mocha": "11.
|
|
107
|
+
"eslint-plugin-mocha": "11.2.0",
|
|
108
108
|
"eslint-plugin-prettier": "5.4.1",
|
|
109
109
|
"eslint-plugin-unicorn": "59.0.1",
|
|
110
|
-
"fast-xml-parser": "5.
|
|
110
|
+
"fast-xml-parser": "5.3.0",
|
|
111
111
|
"globals": "16.2.0",
|
|
112
112
|
"husky": "9.1.7",
|
|
113
|
-
"lint-staged": "
|
|
114
|
-
"mocha": "11.
|
|
113
|
+
"lint-staged": "16.2.6",
|
|
114
|
+
"mocha": "11.7.4",
|
|
115
115
|
"mock-fs": "5.3.0",
|
|
116
116
|
"npm-run-all": "4.1.5",
|
|
117
|
-
"prettier-eslint": "16.4.
|
|
117
|
+
"prettier-eslint": "16.4.2",
|
|
118
118
|
"typescript": "5.8.3"
|
|
119
119
|
},
|
|
120
120
|
"optionalDependencies": {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
5
|
+
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
|
6
|
+
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
|
7
|
+
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
8
|
+
<soap:Header>
|
|
9
|
+
<wsa:Action>RetrieveResponse</wsa:Action>
|
|
10
|
+
<wsa:MessageID>urn:uuid:998a6923-b781-40be-abad-0506f0f97477</wsa:MessageID>
|
|
11
|
+
<wsa:RelatesTo>urn:uuid:a5d518cc-9bfb-45f1-a4a7-5d11cc1a8d44</wsa:RelatesTo>
|
|
12
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
13
|
+
<wsse:Security>
|
|
14
|
+
<wsu:Timestamp wsu:Id="Timestamp-a6c00a2f-fcfa-4882-a72d-8b8983a8cc7e">
|
|
15
|
+
<wsu:Created>2025-09-05T16:29:03Z</wsu:Created>
|
|
16
|
+
<wsu:Expires>2025-09-05T16:34:03Z</wsu:Expires>
|
|
17
|
+
</wsu:Timestamp>
|
|
18
|
+
</wsse:Security>
|
|
19
|
+
</soap:Header>
|
|
20
|
+
<soap:Body>
|
|
21
|
+
<RetrieveResponseMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
22
|
+
<OverallStatus>OK</OverallStatus>
|
|
23
|
+
<RequestID>ac40bccd-e8cd-4232-b1ee-e3cfbbfd0b89</RequestID>
|
|
24
|
+
</RetrieveResponseMsg>
|
|
25
|
+
</soap:Body>
|
|
26
|
+
</soap:Envelope>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Start: 2020-05-13 18:30:32.11-06:00 +01:00
|
|
14
14
|
* End: 2079-06-06 21:00:00-06:00 +01:00
|
|
15
15
|
* Timezone: W. Europe Standard Time
|
|
16
|
-
*
|
|
16
|
+
* Recurrence: every 5 minutes until end date
|
|
17
17
|
|
|
18
18
|
**Notifications:** _none_
|
|
19
19
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "testExisting_triggeredSend",
|
|
3
|
+
"Sent": 10,
|
|
4
|
+
"NotSentDueToOptOut": 0,
|
|
5
|
+
"NotSentDueToUndeliverable": 0,
|
|
6
|
+
"Bounces": 0,
|
|
7
|
+
"Opens": 0,
|
|
8
|
+
"Clicks": 0,
|
|
9
|
+
"UniqueOpens": 0,
|
|
10
|
+
"UniqueClicks": 0,
|
|
11
|
+
"OptOuts": 0,
|
|
12
|
+
"SurveyResponses": 0,
|
|
13
|
+
"FTAFRequests": 0,
|
|
14
|
+
"FTAFEmailsSent": 0,
|
|
15
|
+
"FTAFOptIns": 0,
|
|
16
|
+
"Conversions": 0,
|
|
17
|
+
"UniqueConversions": 0,
|
|
18
|
+
"InProcess": 0,
|
|
19
|
+
"NotSentDueToError": 0,
|
|
20
|
+
"Queued": 0,
|
|
21
|
+
"r__folder_Path": "Triggered Sends",
|
|
22
|
+
"r__triggeredSend_name": "testExisting_triggeredSend",
|
|
23
|
+
"r__triggeredSend_key": "testExisting_triggeredSend"
|
|
24
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
5
|
+
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
|
6
|
+
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
|
7
|
+
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
8
|
+
<soap:Header>
|
|
9
|
+
<wsa:Action>RetrieveResponse</wsa:Action>
|
|
10
|
+
<wsa:MessageID>urn:uuid:8fe86c01-56d5-4c56-8ac2-991578c79485</wsa:MessageID>
|
|
11
|
+
<wsa:RelatesTo>urn:uuid:592f71ac-78a0-45a2-8cfe-37a91fc6cfd5</wsa:RelatesTo>
|
|
12
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
13
|
+
<wsse:Security>
|
|
14
|
+
<wsu:Timestamp wsu:Id="Timestamp-675af14a-b6a1-44a5-b7e7-4a76c6d18424">
|
|
15
|
+
<wsu:Created>2023-02-01T10:29:21Z</wsu:Created>
|
|
16
|
+
<wsu:Expires>2023-02-01T10:34:21Z</wsu:Expires>
|
|
17
|
+
</wsu:Timestamp>
|
|
18
|
+
</wsse:Security>
|
|
19
|
+
</soap:Header>
|
|
20
|
+
<soap:Body>
|
|
21
|
+
<RetrieveResponseMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
22
|
+
<OverallStatus>OK</OverallStatus>
|
|
23
|
+
<RequestID>a90dda5e-aeba-440a-82ce-74fb2abf5eb2</RequestID>
|
|
24
|
+
<Results xsi:type="TriggeredSendSummary">
|
|
25
|
+
<PartnerKey xsi:nil="true" />
|
|
26
|
+
<ObjectID>b3150cf0-6e78-e811-80d4-1402ec721c9d</ObjectID>
|
|
27
|
+
<CustomerKey>testExisting_triggeredSend</CustomerKey>
|
|
28
|
+
<Sent>10</Sent>
|
|
29
|
+
<NotSentDueToOptOut>0</NotSentDueToOptOut>
|
|
30
|
+
<NotSentDueToUndeliverable>0</NotSentDueToUndeliverable>
|
|
31
|
+
<Bounces>0</Bounces>
|
|
32
|
+
<Opens>0</Opens>
|
|
33
|
+
<Clicks>0</Clicks>
|
|
34
|
+
<UniqueOpens>0</UniqueOpens>
|
|
35
|
+
<UniqueClicks>0</UniqueClicks>
|
|
36
|
+
<OptOuts>0</OptOuts>
|
|
37
|
+
<SurveyResponses>0</SurveyResponses>
|
|
38
|
+
<FTAFRequests>0</FTAFRequests>
|
|
39
|
+
<FTAFEmailsSent>0</FTAFEmailsSent>
|
|
40
|
+
<FTAFOptIns>0</FTAFOptIns>
|
|
41
|
+
<Conversions>0</Conversions>
|
|
42
|
+
<UniqueConversions>0</UniqueConversions>
|
|
43
|
+
<InProcess>0</InProcess>
|
|
44
|
+
<NotSentDueToError>0</NotSentDueToError>
|
|
45
|
+
<Queued>0</Queued>
|
|
46
|
+
</Results>
|
|
47
|
+
</RetrieveResponseMsg>
|
|
48
|
+
</soap:Body>
|
|
49
|
+
</soap:Envelope>
|