mcdev 7.2.0 → 7.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.
Files changed (76) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
  2. package/.vscode/settings.json +1 -1
  3. package/@types/lib/Builder.d.ts +4 -4
  4. package/@types/lib/Builder.d.ts.map +1 -1
  5. package/@types/lib/index.d.ts +26 -13
  6. package/@types/lib/index.d.ts.map +1 -1
  7. package/@types/lib/metadataTypes/Event.d.ts +52 -4
  8. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  9. package/@types/lib/metadataTypes/Journey.d.ts +2 -3
  10. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  11. package/@types/lib/metadataTypes/MetadataType.d.ts +7 -0
  12. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  13. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
  14. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
  15. package/@types/types/mcdev.d.d.ts +123 -0
  16. package/@types/types/mcdev.d.d.ts.map +1 -1
  17. package/boilerplate/files/.vscode/settings.json +2 -3
  18. package/boilerplate/forcedUpdates.json +4 -0
  19. package/eslint.config.js +1 -1
  20. package/lib/Builder.js +45 -26
  21. package/lib/cli.js +67 -5
  22. package/lib/index.js +117 -48
  23. package/lib/metadataTypes/Asset.js +1 -1
  24. package/lib/metadataTypes/Automation.js +5 -5
  25. package/lib/metadataTypes/DataExtract.js +1 -1
  26. package/lib/metadataTypes/Event.js +525 -5
  27. package/lib/metadataTypes/FileTransfer.js +1 -1
  28. package/lib/metadataTypes/ImportFile.js +1 -1
  29. package/lib/metadataTypes/Journey.js +144 -33
  30. package/lib/metadataTypes/MetadataType.js +16 -2
  31. package/lib/metadataTypes/MobileKeyword.js +1 -1
  32. package/lib/metadataTypes/Query.js +1 -1
  33. package/lib/metadataTypes/Script.js +1 -1
  34. package/lib/metadataTypes/SendClassification.js +10 -8
  35. package/lib/metadataTypes/TriggeredSend.js +18 -16
  36. package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -4
  37. package/lib/metadataTypes/definitions/EmailSend.definition.js +4 -4
  38. package/lib/metadataTypes/definitions/Event.definition.js +92 -92
  39. package/lib/metadataTypes/definitions/Journey.definition.js +1 -0
  40. package/lib/metadataTypes/definitions/Role.definition.js +4 -4
  41. package/lib/metadataTypes/definitions/SendClassification.definition.js +7 -7
  42. package/lib/metadataTypes/definitions/SenderProfile.definition.js +4 -4
  43. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +11 -11
  44. package/package.json +1 -1
  45. package/test/general.test.js +20 -20
  46. package/test/mockRoot/.mcdevrc.json +1 -1
  47. package/test/resourceFactory.js +5 -1
  48. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -1
  49. package/test/resources/9999999/sendClassification/create-response.xml +1 -1
  50. package/test/resources/9999999/sendClassification/retrieve-response.xml +2 -2
  51. package/test/resources/9999999/sendClassification/update-response.xml +1 -1
  52. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +2 -2
  53. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +4 -4
  54. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +2 -2
  55. package/test/type.asset.test.js +3 -3
  56. package/test/type.automation.test.js +4 -4
  57. package/test/type.dataExtension.test.js +3 -3
  58. package/test/type.dataExtract.test.js +3 -3
  59. package/test/type.emailSend.test.js +2 -2
  60. package/test/type.event.test.js +3 -3
  61. package/test/type.fileTransfer.test.js +3 -3
  62. package/test/type.importFile.test.js +3 -3
  63. package/test/type.journey.test.js +19 -5
  64. package/test/type.mobileKeyword.test.js +2 -2
  65. package/test/type.mobileMessage.test.js +2 -2
  66. package/test/type.query.test.js +3 -3
  67. package/test/type.script.test.js +4 -4
  68. package/test/type.sendClassification.test.js +2 -2
  69. package/test/type.senderProfile.test.js +3 -3
  70. package/test/type.transactionalEmail.test.js +2 -2
  71. package/test/type.transactionalPush.test.js +2 -2
  72. package/test/type.transactionalSMS.test.js +2 -2
  73. package/test/type.triggeredSend.test.js +3 -3
  74. package/test/type.user.test.js +2 -2
  75. package/test/type.verification.test.js +2 -2
  76. package/types/mcdev.d.js +37 -0
@@ -2,11 +2,13 @@
2
2
 
3
3
  import MetadataType from './MetadataType.js';
4
4
  import TransactionalEmail from './TransactionalEmail.js';
5
+ import Event from './Event.js';
5
6
  import { Util } from '../util/util.js';
6
7
  import cache from '../util/cache.js';
7
8
  import File from '../util/file.js';
8
9
  import ReplaceCbReference from '../util/replaceContentBlockReference.js';
9
10
  import Retriever from '../Retriever.js';
11
+ import pLimit from 'p-limit';
10
12
 
11
13
  /**
12
14
  * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
@@ -235,7 +237,7 @@ class Journey extends MetadataType {
235
237
  );
236
238
  const results = this.parseResponseBody(response, key);
237
239
  singleKey = results[key].id;
238
- if (version && version > results[key].version) {
240
+ if (version && version !== '*' && version > results[key].version) {
239
241
  Util.logger.error(
240
242
  `The chosen version (${version}) is higher than the latest known version (${results[key].version}). Please choose a lower version.`
241
243
  );
@@ -243,20 +245,24 @@ class Journey extends MetadataType {
243
245
  }
244
246
  Util.logger.debug(`Deleting interaction ${key} via its ID ${singleKey}`);
245
247
  }
246
- if (!/^\d+$/.test(version)) {
247
- Util.logger.error(
248
- 'Version is required for deleting interactions to avoid accidental deletion of the wrong item. Please append it at the end of the key or id, separated by forward-slash. Example for deleting version 4: ' +
249
- key +
250
- '/4'
248
+ if (version !== '*') {
249
+ if (!/^\d+$/.test(version)) {
250
+ Util.logger.error(
251
+ 'Version is required for deleting interactions to avoid accidental deletion of the wrong item. Please append it at the end of the key or id, separated by forward-slash. Example for deleting version 4: ' +
252
+ key +
253
+ '/4'
254
+ );
255
+ return false;
256
+ }
257
+ Util.logger.warn(
258
+ `Deleting Journeys via this command breaks following retrieve-by-key/id requests until you've deployed/created a new draft version! You can get still get the latest available version of your journey by retrieving all interactions on this BU.`
251
259
  );
252
- return false;
253
260
  }
254
- Util.logger.warn(
255
- `Deleting Journeys via this command breaks following retrieve-by-key/id requests until you've deployed/created a new draft version! You can get still get the latest available version of your journey by retrieving all interactions on this BU.`
256
- );
257
261
 
258
262
  return super.deleteByKeyREST(
259
- '/interaction/v1/interactions/' + singleKey + `?versionNumber=${version}`,
263
+ '/interaction/v1/interactions/' +
264
+ singleKey +
265
+ (version === '*' ? '' : `?versionNumber=${version}`),
260
266
  key,
261
267
  false
262
268
  );
@@ -342,12 +348,11 @@ class Journey extends MetadataType {
342
348
 
343
349
  /**
344
350
  * manages post retrieve steps
345
- * ! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments!
346
351
  *
347
352
  * @param {MetadataTypeItem} metadata a single item
348
- * @returns {MetadataTypeItem} Array with one metadata object
353
+ * @returns {Promise.<MetadataTypeItem>} Array with one metadata object
349
354
  */
350
- static postRetrieveTasks(metadata) {
355
+ static async postRetrieveTasks(metadata) {
351
356
  // folder
352
357
  super.setFolderPath(metadata);
353
358
 
@@ -408,6 +413,18 @@ class Journey extends MetadataType {
408
413
  }
409
414
  }
410
415
  }
416
+ try {
417
+ await Event.postRetrieveTasks_SalesforceEntryEvents(
418
+ metadata.triggers[0].type,
419
+ metadata.triggers[0].configurationArguments,
420
+ metadata.key,
421
+ this.definition.type
422
+ );
423
+ } catch (ex) {
424
+ Util.logger.warn(
425
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${metadata[this.definition.keyField]}): ${ex.message}`
426
+ );
427
+ }
411
428
  }
412
429
  // ~~~ ACTIVITIES ~~~~
413
430
 
@@ -588,6 +605,15 @@ class Journey extends MetadataType {
588
605
  );
589
606
  }
590
607
  }
608
+ if (
609
+ configurationArguments?.triggeredSend &&
610
+ 'string' === typeof configurationArguments?.triggeredSend
611
+ ) {
612
+ // sometimes, the API returns this object as a string for unknown reasons. Good job, product team!
613
+ configurationArguments.triggeredSend = JSON.parse(
614
+ configurationArguments?.triggeredSend
615
+ );
616
+ }
591
617
  const triggeredSend = configurationArguments?.triggeredSend;
592
618
  if (triggeredSend) {
593
619
  // this section is likely only relevant for QuickSends and not for Multi-Step Journeys
@@ -617,36 +643,34 @@ class Journey extends MetadataType {
617
643
 
618
644
  if (linkedTS.SenderProfile?.CustomerKey) {
619
645
  try {
620
- cache.searchForField(
646
+ const spKey = cache.searchForField(
621
647
  'senderProfile',
622
- linkedTS.SenderProfile.CustomerKey,
623
- 'CustomerKey',
648
+ linkedTS.SenderProfile.ObjectID,
649
+ 'ObjectID',
624
650
  'CustomerKey'
625
651
  );
626
- triggeredSend.r__senderProfile_key =
627
- linkedTS.SenderProfile.CustomerKey;
652
+ triggeredSend.r__senderProfile_key = spKey;
628
653
  delete triggeredSend.senderProfileId;
629
654
  } catch (ex) {
630
655
  Util.logger.warn(
631
- ` - ${this.definition.type} ${linkedTS.CustomerKey}: ${ex.message}`
656
+ ` - triggeredSend ${linkedTS.CustomerKey}: ${ex.message} (senderProfile key ${linkedTS.SenderProfile.CustomerKey})`
632
657
  );
633
658
  }
634
659
  }
635
660
  // send classification
636
661
  if (linkedTS.SendClassification?.CustomerKey) {
637
662
  try {
638
- cache.searchForField(
663
+ const scKey = cache.searchForField(
639
664
  'sendClassification',
640
- linkedTS.SendClassification.CustomerKey,
641
- 'CustomerKey',
665
+ linkedTS.SendClassification.ObjectID,
666
+ 'ObjectID',
642
667
  'CustomerKey'
643
668
  );
644
- triggeredSend.r__sendClassification_key =
645
- linkedTS.SendClassification.CustomerKey;
669
+ triggeredSend.r__sendClassification_key = scKey;
646
670
  delete triggeredSend.sendClassificationId;
647
671
  } catch (ex) {
648
672
  Util.logger.warn(
649
- ` - ${this.definition.type} ${linkedTS.CustomerKey}: ${ex.message}`
673
+ ` - triggeredSend ${linkedTS.CustomerKey}: ${ex.message} (sendClassification key ${linkedTS.SendClassification.CustomerKey})`
650
674
  );
651
675
  }
652
676
  }
@@ -1010,6 +1034,10 @@ class Journey extends MetadataType {
1010
1034
  delete config.r__dataExtension_key;
1011
1035
  }
1012
1036
  }
1037
+ Event.preDeployTasks_SalesforceEntryEvents(
1038
+ metadata.triggers[0].type,
1039
+ metadata.triggers[0].configurationArguments
1040
+ );
1013
1041
  }
1014
1042
 
1015
1043
  // transactionalEmail / definitionType==='Transactional' && channel==='email' && triggers[].type === 'transactional-api'
@@ -1018,13 +1046,6 @@ class Journey extends MetadataType {
1018
1046
 
1019
1047
  this._preDeployTasks_activities(metadata);
1020
1048
 
1021
- // TODO: Filters / activities[].type === 'MULTICRITERIADECISION'
1022
- // - activities[].arguments.filterResult
1023
- // - activities[].arguments.configurationArguments.criteria
1024
-
1025
- // TODO: wait activity / activities[].type === 'WAIT'
1026
-
1027
- // TODO: journey template id? / metaData.templateId
1028
1049
  break;
1029
1050
  }
1030
1051
  case 'Transactional': {
@@ -1837,6 +1858,96 @@ class Journey extends MetadataType {
1837
1858
  Util.logger.warn(' ' + msg);
1838
1859
  }
1839
1860
  }
1861
+ /**
1862
+ * stops latest journey version
1863
+ *
1864
+ * @param {string[]} keyArr customerkey of the metadata
1865
+ * @returns {Promise.<string[]>} Returns list of keys that were paused
1866
+ */
1867
+ static async stop(keyArr) {
1868
+ let version;
1869
+ const endpoint = '/interaction/v1/interactions/stop/';
1870
+ const stoppedKeyArr = [];
1871
+ const apiLimit = pLimit(20);
1872
+ const journeyCache = await this.retrieveForCache();
1873
+
1874
+ await Promise.allSettled(
1875
+ keyArr.map((key) =>
1876
+ apiLimit(async () => {
1877
+ [key, version] = key.split('/');
1878
+ if (journeyCache.metadata[key]) {
1879
+ version ||= journeyCache.metadata[key].version;
1880
+ if (version === '*') {
1881
+ Util.logger.warn(
1882
+ ` ☇ skipping ${this.definition.type} ${key}: Cannot stop all versions at once. The highest version is ${journeyCache.metadata[key].version}`
1883
+ );
1884
+ return;
1885
+ }
1886
+ try {
1887
+ await this.client.rest.post(
1888
+ endpoint +
1889
+ journeyCache.metadata[key].id +
1890
+ `?versionNumber=${version}`,
1891
+ {}
1892
+ );
1893
+ Util.logger.info(
1894
+ ` - Stopped ${this.definition.type} ${key}/${version}`
1895
+ );
1896
+ stoppedKeyArr.push(key);
1897
+ } catch (ex) {
1898
+ Util.logger.error(
1899
+ ` - Stopping ${this.definition.type} ${key} failed: ${ex.message}`
1900
+ );
1901
+ }
1902
+ }
1903
+ })
1904
+ )
1905
+ );
1906
+
1907
+ return stoppedKeyArr;
1908
+ }
1909
+ /**
1910
+ * pauses all journey versions
1911
+ *
1912
+ * @param {string[]} keyArr customerkey of the metadata
1913
+ * @returns {Promise.<string[]>} Returns list of keys that were paused
1914
+ */
1915
+ static async pause(keyArr) {
1916
+ let version;
1917
+ const endpoint = '/interaction/v1/interactions/pause/';
1918
+ const stoppedKeyArr = [];
1919
+ const apiLimit = pLimit(20);
1920
+ const journeyCache = await this.retrieveForCache();
1921
+
1922
+ await Promise.allSettled(
1923
+ keyArr.map((key) =>
1924
+ apiLimit(async () => {
1925
+ [key, version] = key.split('/');
1926
+ if (journeyCache.metadata[key]) {
1927
+ version ||= journeyCache.metadata[key].version;
1928
+ try {
1929
+ await this.client.rest.post(
1930
+ endpoint +
1931
+ journeyCache.metadata[key].id +
1932
+ (version === '*'
1933
+ ? '?allVersions=true'
1934
+ : `?versionNumber=${version}`),
1935
+ {}
1936
+ );
1937
+ Util.logger.info(` - Paused ${this.definition.type} ${key}/${version}`);
1938
+ stoppedKeyArr.push(key);
1939
+ } catch (ex) {
1940
+ Util.logger.error(
1941
+ ` - Pausing ${this.definition.type} ${key} failed: ${ex.message}`
1942
+ );
1943
+ }
1944
+ }
1945
+ })
1946
+ )
1947
+ );
1948
+
1949
+ return stoppedKeyArr;
1950
+ }
1840
1951
  }
1841
1952
 
1842
1953
  // Assign definition to static attributes
@@ -622,6 +622,19 @@ class MetadataType {
622
622
  return [];
623
623
  }
624
624
 
625
+ /**
626
+ * Abstract stop method that needs to be implemented in child metadata type
627
+ *
628
+ * @param {string[]} keyArr customerkey of the metadata
629
+ * @returns {Promise.<string[]>} Returns list of keys that were stopped
630
+ */
631
+ static async stop(keyArr) {
632
+ Util.logger.error(
633
+ ` ☇ skipping ${this.definition.type}: stop is not supported yet for ${this.definition.type}`
634
+ );
635
+ return [];
636
+ }
637
+
625
638
  /**
626
639
  * test if metadata was actually changed or not to potentially skip it during deployment
627
640
  *
@@ -1899,9 +1912,10 @@ class MetadataType {
1899
1912
  templateVariables
1900
1913
  );
1901
1914
  } catch (ex) {
1915
+ Util.logger.debug(JSON.stringify(savedResults[originalKey]));
1902
1916
  Util.logger.errorStack(
1903
1917
  ex,
1904
- ` - Saving ${this.definition.type} ${originalKey} failed`
1918
+ ` - Saving ${this.definition.type} ${originalKey} / ${results[originalKey][this.definition.nameField]} failed`
1905
1919
  );
1906
1920
  }
1907
1921
  }
@@ -2349,7 +2363,7 @@ class MetadataType {
2349
2363
  ? `${ex.results[0].StatusMessage} (Code ${ex.results[0].ErrorCode})`
2350
2364
  : ex.message;
2351
2365
  Util.logger.error(
2352
- `- error deleting ${this.definition.type} '${customerKey}': ${errorMsg}`
2366
+ ` - Deleting ${this.definition.type} '${customerKey}' failed: ${errorMsg}`
2353
2367
  );
2354
2368
  }
2355
2369
 
@@ -537,7 +537,7 @@ class MobileKeyword extends MetadataType {
537
537
  // get id from cache
538
538
  const { metadata } = await this.retrieveForCache(undefined, undefined, key);
539
539
  if (!metadata[key]) {
540
- Util.logger.error(`Could not find ${this.definition.type} with key ${key}.`);
540
+ Util.logger.error(` - mobileKeyword ${key} not found`);
541
541
  return false;
542
542
  }
543
543
  const id = metadata[key][this.definition.idField];
@@ -456,7 +456,7 @@ class Query extends MetadataType {
456
456
  // delete only works with the query's object id
457
457
  const objectId = customerKey ? await this._getObjectIdForSingleRetrieve(customerKey) : null;
458
458
  if (!objectId) {
459
- Util.logger.error(` - query not found`);
459
+ Util.logger.error(` - query ${customerKey} not found`);
460
460
  return false;
461
461
  }
462
462
  return super.deleteByKeyREST('/automation/v1/queries/' + objectId, customerKey);
@@ -379,7 +379,7 @@ class Script extends MetadataType {
379
379
  // delete only works with the query's object id
380
380
  const objectId = customerKey ? await this._getObjectIdForSingleRetrieve(customerKey) : null;
381
381
  if (!objectId) {
382
- Util.logger.error(` - ${this.definition.type} not found`);
382
+ Util.logger.error(` - ${this.definition.type} ${customerKey} not found`);
383
383
  return false;
384
384
  }
385
385
  return super.deleteByKeyREST('/automation/v1/scripts/' + objectId, customerKey);
@@ -88,13 +88,15 @@ class SendClassification extends MetadataType {
88
88
  this.definition.sendClassificationTypeMapping[metadata.c__classification];
89
89
  delete metadata.c__classification;
90
90
 
91
+ const spId = cache.searchForField(
92
+ 'senderProfile',
93
+ metadata.r__senderProfile_key,
94
+ 'CustomerKey',
95
+ 'ObjectID'
96
+ );
91
97
  metadata.SenderProfile = {
92
- CustomerKey: cache.searchForField(
93
- 'senderProfile',
94
- metadata.r__senderProfile_key,
95
- 'CustomerKey',
96
- 'CustomerKey'
97
- ),
98
+ ObjectID: spId,
99
+ CustomerKey: metadata.r__senderProfile_key,
98
100
  };
99
101
  delete metadata.r__senderProfile_key;
100
102
 
@@ -127,8 +129,8 @@ class SendClassification extends MetadataType {
127
129
  try {
128
130
  metadata.r__senderProfile_key = cache.searchForField(
129
131
  'senderProfile',
130
- metadata.SenderProfile.CustomerKey,
131
- 'CustomerKey',
132
+ metadata.SenderProfile.ObjectID,
133
+ 'ObjectID',
132
134
  'CustomerKey'
133
135
  );
134
136
  delete metadata.SenderProfile;
@@ -168,36 +168,36 @@ class TriggeredSend extends MetadataType {
168
168
  }
169
169
 
170
170
  // sender profile
171
- if (metadata.SenderProfile?.CustomerKey) {
171
+ if (metadata.SenderProfile?.ObjectID) {
172
172
  try {
173
- cache.searchForField(
173
+ const spKey = cache.searchForField(
174
174
  'senderProfile',
175
- metadata.SenderProfile.CustomerKey,
176
- 'CustomerKey',
175
+ metadata.SenderProfile.ObjectID,
176
+ 'ObjectID',
177
177
  'CustomerKey'
178
178
  );
179
- metadata.r__senderProfile_key = metadata.SenderProfile.CustomerKey;
179
+ metadata.r__senderProfile_key = spKey;
180
180
  delete metadata.SenderProfile;
181
181
  } catch (ex) {
182
182
  Util.logger.warn(
183
- ` - ${this.definition.type} ${metadata.CustomerKey}: ${ex.message}`
183
+ ` - ${this.definition.type} ${metadata.CustomerKey}: ${ex.message} (senderProfile key ${metadata.SenderProfile.CustomerKey})`
184
184
  );
185
185
  }
186
186
  }
187
187
  // send classification
188
- if (metadata.SendClassification?.CustomerKey) {
188
+ if (metadata.SendClassification?.ObjectID) {
189
189
  try {
190
- cache.searchForField(
190
+ const scKey = cache.searchForField(
191
191
  'sendClassification',
192
- metadata.SendClassification.CustomerKey,
193
- 'CustomerKey',
192
+ metadata.SendClassification.ObjectID,
193
+ 'ObjectID',
194
194
  'CustomerKey'
195
195
  );
196
- metadata.r__sendClassification_key = metadata.SendClassification.CustomerKey;
196
+ metadata.r__sendClassification_key = scKey;
197
197
  delete metadata.SendClassification;
198
198
  } catch (ex) {
199
199
  Util.logger.warn(
200
- ` - ${this.definition.type} ${metadata.CustomerKey}: ${ex.message}`
200
+ ` - ${this.definition.type} ${metadata.CustomerKey}: ${ex.message} (sendClassification key ${metadata.SendClassification.CustomerKey})`
201
201
  );
202
202
  }
203
203
  }
@@ -268,26 +268,28 @@ class TriggeredSend extends MetadataType {
268
268
  }
269
269
  // sender profile
270
270
  if (metadata.r__senderProfile_key) {
271
- cache.searchForField(
271
+ const spId = cache.searchForField(
272
272
  'senderProfile',
273
273
  metadata.r__senderProfile_key,
274
274
  'CustomerKey',
275
- 'CustomerKey'
275
+ 'ObjectID'
276
276
  );
277
277
  metadata.SenderProfile = {
278
+ ObjectID: spId,
278
279
  CustomerKey: metadata.r__senderProfile_key,
279
280
  };
280
281
  delete metadata.r__senderProfile_key;
281
282
  }
282
283
  // send classification
283
284
  if (metadata.r__sendClassification_key) {
284
- cache.searchForField(
285
+ const scId = cache.searchForField(
285
286
  'sendClassification',
286
287
  metadata.r__sendClassification_key,
287
288
  'CustomerKey',
288
- 'CustomerKey'
289
+ 'ObjectID'
289
290
  );
290
291
  metadata.SendClassification = {
292
+ ObjectID: scId,
291
293
  CustomerKey: metadata.r__sendClassification_key,
292
294
  };
293
295
  delete metadata.r__sendClassification_key;
@@ -123,8 +123,8 @@ export default {
123
123
  template: false,
124
124
  },
125
125
  CreatedDate: {
126
- isCreateable: false,
127
- isUpdateable: false,
126
+ isCreateable: true,
127
+ isUpdateable: true,
128
128
  retrieving: true,
129
129
  template: false,
130
130
  },
@@ -189,8 +189,8 @@ export default {
189
189
  template: true,
190
190
  },
191
191
  ModifiedDate: {
192
- isCreateable: false,
193
- isUpdateable: false,
192
+ isCreateable: true,
193
+ isUpdateable: true,
194
194
  retrieving: true,
195
195
  template: false,
196
196
  },
@@ -81,8 +81,8 @@ export default {
81
81
  templating: false,
82
82
  },
83
83
  CreatedDate: {
84
- isCreateable: false,
85
- isUpdateable: false,
84
+ isCreateable: true,
85
+ isUpdateable: true,
86
86
  retrieving: true,
87
87
  templating: false,
88
88
  },
@@ -333,8 +333,8 @@ export default {
333
333
  templating: false,
334
334
  },
335
335
  ModifiedDate: {
336
- isCreateable: false,
337
- isUpdateable: false,
336
+ isCreateable: true,
337
+ isUpdateable: true,
338
338
  retrieving: true,
339
339
  templating: false,
340
340
  },