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.
Files changed (56) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/workflows/code-test.yml +2 -2
  3. package/.github/workflows/coverage-base-update.yml +3 -3
  4. package/.github/workflows/coverage-develop-branch.yml +3 -3
  5. package/.github/workflows/coverage-main-branch.yml +3 -3
  6. package/.github/workflows/coverage.yml +4 -4
  7. package/.github/workflows/npm-publish.yml +4 -4
  8. package/@types/lib/MetadataTypeDefinitions.d.ts +2 -0
  9. package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
  10. package/@types/lib/MetadataTypeInfo.d.ts +2 -0
  11. package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
  12. package/@types/lib/index.d.ts.map +1 -1
  13. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  14. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  15. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  16. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  18. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts +257 -0
  20. package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts.map +1 -0
  21. package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts +208 -0
  22. package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts.map +1 -0
  23. package/@types/lib/util/devops.d.ts +2 -1
  24. package/@types/lib/util/devops.d.ts.map +1 -1
  25. package/@types/lib/util/util.d.ts +2 -1
  26. package/@types/lib/util/util.d.ts.map +1 -1
  27. package/lib/MetadataTypeDefinitions.js +2 -0
  28. package/lib/MetadataTypeInfo.js +2 -0
  29. package/lib/cli.js +5 -0
  30. package/lib/index.js +26 -4
  31. package/lib/metadataTypes/Asset.js +30 -7
  32. package/lib/metadataTypes/Automation.js +4 -2
  33. package/lib/metadataTypes/DataExtension.js +19 -12
  34. package/lib/metadataTypes/DataExtensionField.js +4 -3
  35. package/lib/metadataTypes/Folder.js +1 -1
  36. package/lib/metadataTypes/Journey.js +12 -2
  37. package/lib/metadataTypes/MetadataType.js +8 -2
  38. package/lib/metadataTypes/TriggeredSendSummary.js +102 -0
  39. package/lib/metadataTypes/definitions/TriggeredSendSummary.definition.js +211 -0
  40. package/lib/util/devops.js +29 -9
  41. package/lib/util/util.js +13 -4
  42. package/package.json +10 -10
  43. package/test/mockRoot/.mcdevrc.json +1 -1
  44. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +26 -0
  45. package/test/resources/9999999/automation/create-testNew_automation-expected.md +1 -1
  46. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +1 -1
  47. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +1 -1
  48. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/put-response.json +1 -1
  49. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +1 -1
  50. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response.json +1 -1
  51. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/put-response.json +1 -1
  52. package/test/resources/9999999/triggeredSendSummary/get-expected.json +24 -0
  53. package/test/resources/9999999/triggeredSendSummary/retrieve-response.xml +49 -0
  54. package/test/type.dataExtension.test.js +41 -0
  55. package/test/type.journey.test.js +37 -2
  56. 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
+ };
@@ -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
- file.externalKey =
199
- file.type === 'asset'
200
- ? file.file.split('/')[5].split('.')[0] // assets have an additional folder level for their subtype
201
- : file.file.split('/')[4].split('.')[0];
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(directoryDeltaPkg, Util.logFileName + '-delta_package', delta);
271
- this.document(directoryDeltaPkg, delta);
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(directory, Util.logFileName + '-delta_package', 'md', output);
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.0",
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.1",
83
+ "semver": "7.7.3",
84
84
  "sfmc-sdk": "2.1.2",
85
- "simple-git": "3.27.0",
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.2.2"
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": "22.15.29",
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.0.0",
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.2.3",
110
+ "fast-xml-parser": "5.3.0",
111
111
  "globals": "16.2.0",
112
112
  "husky": "9.1.7",
113
- "lint-staged": "15.5.1",
114
- "mocha": "11.5.0",
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.1",
117
+ "prettier-eslint": "16.4.2",
118
118
  "typescript": "5.8.3"
119
119
  },
120
120
  "optionalDependencies": {
@@ -175,5 +175,5 @@
175
175
  "verification"
176
176
  ]
177
177
  },
178
- "version": "8.1.0"
178
+ "version": "8.2.1"
179
179
  }
@@ -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
- * Recurrance: every 5 minutes until end date
16
+ * Recurrence: every 5 minutes until end date
17
17
 
18
18
  **Notifications:** _none_
19
19
 
@@ -13,7 +13,7 @@
13
13
  * Start: 2022-07-30 00:00:00 +01:00
14
14
  * End: 2022-07-30 00:00:00 +01:00
15
15
  * Timezone: W. Europe Standard Time
16
- * Recurrance: run only once
16
+ * Recurrence: run only once
17
17
 
18
18
  **Notifications:**
19
19
 
@@ -13,7 +13,7 @@
13
13
  * Start: 2022-07-30 00:00:00 +01:00
14
14
  * End: 2022-07-30 00:00:00 +01:00
15
15
  * Timezone: W. Europe Standard Time
16
- * Recurrance: run only once
16
+ * Recurrence: run only once
17
17
 
18
18
  **Notifications:**
19
19
 
@@ -6,7 +6,7 @@
6
6
  "description": "",
7
7
  "version": 1,
8
8
  "workflowApiVersion": 1,
9
- "createdDate": "2024-05-04T05:54:48.027",
9
+ "createdDate": "0001-01-01T00:00:00",
10
10
  "modifiedDate": "2024-05-04T17:25:57.9",
11
11
  "activities": [
12
12
  {
@@ -6,7 +6,7 @@
6
6
  "description": "",
7
7
  "version": 1,
8
8
  "workflowApiVersion": 1,
9
- "createdDate": "2022-03-24T02:20:32.74",
9
+ "createdDate": "0001-01-01T00:00:00",
10
10
  "modifiedDate": "2022-03-24T02:20:40.45",
11
11
  "activities": [
12
12
  {
@@ -6,7 +6,7 @@
6
6
  "description": "",
7
7
  "version": 1,
8
8
  "workflowApiVersion": 1,
9
- "createdDate": "2022-03-24T02:20:32.74",
9
+ "createdDate": "0001-01-01T00:00:00",
10
10
  "modifiedDate": "2022-03-24T02:20:40.45",
11
11
  "activities": [
12
12
  {
@@ -6,7 +6,7 @@
6
6
  "description": "",
7
7
  "version": 1,
8
8
  "workflowApiVersion": 1,
9
- "createdDate": "2024-08-23T01:29:33.233",
9
+ "createdDate": "0001-01-01T00:00:00",
10
10
  "modifiedDate": "2024-08-23T02:00:44.57",
11
11
  "activities": [
12
12
  {
@@ -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>