mcdev 3.0.1 → 3.1.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 (42) hide show
  1. package/.eslintrc.json +1 -1
  2. package/.github/ISSUE_TEMPLATE/bug.yml +72 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/ISSUE_TEMPLATE/task.md +10 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +11 -0
  6. package/.issuetracker +11 -3
  7. package/.vscode/settings.json +3 -3
  8. package/CHANGELOG.md +103 -1
  9. package/README.md +245 -141
  10. package/boilerplate/config.json +3 -2
  11. package/docs/dist/documentation.md +803 -337
  12. package/lib/Deployer.js +4 -1
  13. package/lib/MetadataTypeDefinitions.js +1 -0
  14. package/lib/MetadataTypeInfo.js +1 -0
  15. package/lib/Retriever.js +32 -17
  16. package/lib/cli.js +295 -0
  17. package/lib/index.js +774 -1019
  18. package/lib/metadataTypes/AccountUser.js +389 -0
  19. package/lib/metadataTypes/Asset.js +20 -12
  20. package/lib/metadataTypes/Automation.js +115 -52
  21. package/lib/metadataTypes/DataExtension.js +159 -113
  22. package/lib/metadataTypes/DataExtensionField.js +134 -4
  23. package/lib/metadataTypes/Folder.js +66 -69
  24. package/lib/metadataTypes/ImportFile.js +4 -6
  25. package/lib/metadataTypes/MetadataType.js +136 -67
  26. package/lib/metadataTypes/Query.js +2 -3
  27. package/lib/metadataTypes/Role.js +13 -8
  28. package/lib/metadataTypes/definitions/AccountUser.definition.js +227 -0
  29. package/lib/metadataTypes/definitions/Asset.definition.js +1 -0
  30. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -1
  31. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -1
  32. package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -1
  33. package/lib/metadataTypes/definitions/Folder.definition.js +1 -1
  34. package/lib/metadataTypes/definitions/ImportFile.definition.js +2 -1
  35. package/lib/metadataTypes/definitions/Script.definition.js +5 -5
  36. package/lib/retrieveChangelog.js +96 -0
  37. package/lib/util/cli.js +4 -6
  38. package/lib/util/init.git.js +2 -1
  39. package/lib/util/util.js +31 -15
  40. package/package.json +19 -23
  41. package/img/README.md/troubleshoot-nodejs-postinstall.jpg +0 -0
  42. package/postinstall.js +0 -41
@@ -8,6 +8,12 @@
8
8
  <dd><p>Reads metadata from local directory and deploys it to specified target business unit.
9
9
  Source and target business units are also compared before the deployment to apply metadata specific patches.</p>
10
10
  </dd>
11
+ <dt><a href="#Mcdev">Mcdev</a></dt>
12
+ <dd><p>main class</p>
13
+ </dd>
14
+ <dt><a href="#AccountUser">AccountUser</a> ⇐ <code><a href="#MetadataType">MetadataType</a></code></dt>
15
+ <dd><p>MessageSendActivity MetadataType</p>
16
+ </dd>
11
17
  <dt><a href="#Asset">Asset</a> ⇐ <code><a href="#MetadataType">MetadataType</a></code></dt>
12
18
  <dd><p>FileTransfer MetadataType</p>
13
19
  </dd>
@@ -100,12 +106,18 @@ Provides default functionality that can be overwritten by child metadata type cl
100
106
  ## Constants
101
107
 
102
108
  <dl>
109
+ <dt><a href="#Util">Util</a></dt>
110
+ <dd><p>CLI entry for SFMC DevTools</p>
111
+ </dd>
103
112
  <dt><a href="#MetadataTypeDefinitions">MetadataTypeDefinitions</a></dt>
104
113
  <dd><p>Provides access to all metadataType classes</p>
105
114
  </dd>
106
115
  <dt><a href="#MetadataTypeInfo">MetadataTypeInfo</a></dt>
107
116
  <dd><p>Provides access to all metadataType classes</p>
108
117
  </dd>
118
+ <dt><a href="#mcdev">mcdev</a></dt>
119
+ <dd><p>sample file on how to retrieve a simple changelog to use in GUIs or automated processing of any kind</p>
120
+ </dd>
109
121
  <dt><a href="#BusinessUnit">BusinessUnit</a></dt>
110
122
  <dd><p>Helper that handles retrieval of BU info</p>
111
123
  </dd>
@@ -140,57 +152,8 @@ Provides default functionality that can be overwritten by child metadata type cl
140
152
  ## Functions
141
153
 
142
154
  <dl>
143
- <dt><a href="#createDeltaPkg">createDeltaPkg(argv)</a> ⇒ <code>void</code></dt>
144
- <dd><p>handler for &#39;mcdev createDeltaPkg</p>
145
- </dd>
146
- <dt><a href="#_setLoggingLevel">_setLoggingLevel(argv)</a> ⇒ <code>void</code></dt>
147
- <dd><p>configures what is displayed in the console</p>
148
- </dd>
149
- <dt><a href="#selectTypes">selectTypes()</a> ⇒ <code>Promise</code></dt>
150
- <dd></dd>
151
- <dt><a href="#explainTypes">explainTypes()</a> ⇒ <code>Promise</code></dt>
152
- <dd></dd>
153
- <dt><a href="#upgrade">upgrade([skipInteraction])</a> ⇒ <code>Promise</code></dt>
155
+ <dt><a href="#getUserName">getUserName(userList, item, fieldname)</a> ⇒ <code>string</code></dt>
154
156
  <dd></dd>
155
- <dt><a href="#retrieve">retrieve(businessUnit, [selectedType])</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
156
- <dd><p>Retrieve all metadata from the specified business unit into the local file system.</p>
157
- </dd>
158
- <dt><a href="#_retrieveBU">_retrieveBU(cred, bu, [selectedType])</a> ⇒ <code>Promise</code></dt>
159
- <dd><p>helper for retrieve()</p>
160
- </dd>
161
- <dt><a href="#_deployBU">_deployBU(cred, bu, [type])</a> ⇒ <code>Promise</code></dt>
162
- <dd><p>helper for deploy()</p>
163
- </dd>
164
- <dt><a href="#deploy">deploy(businessUnit, [selectedType])</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
165
- <dd><p>Deploys all metadata located in the &#39;deploy&#39; directory to the specified business unit</p>
166
- </dd>
167
- <dt><a href="#initProject">initProject([credentialsName], [skipInteraction])</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
168
- <dd><p>Creates template file for properties.json</p>
169
- </dd>
170
- <dt><a href="#findBUs">findBUs(credentialsName)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
171
- <dd><p>Refreshes BU names and ID&#39;s from MC instance</p>
172
- </dd>
173
- <dt><a href="#document">document(businessUnit, type)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
174
- <dd><p>Creates docs for supported metadata types in Markdown and/or HTML format</p>
175
- </dd>
176
- <dt><a href="#deleteByKey">deleteByKey(businessUnit, type, customerKey)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
177
- <dd><p>Creates docs for supported metadata types in Markdown and/or HTML format</p>
178
- </dd>
179
- <dt><a href="#badKeys">badKeys(businessUnit)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
180
- <dd><p>Converts metadata to legacy format. Output is saved in &#39;converted&#39; directory</p>
181
- </dd>
182
- <dt><a href="#retrieveAsTemplate">retrieveAsTemplate(businessUnit, selectedType, name, market)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
183
- <dd><p>Retrieve a specific metadata file and templatise.</p>
184
- </dd>
185
- <dt><a href="#buildDefinition">buildDefinition(businessUnit, type, name, market)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
186
- <dd><p>Build a specific metadata file based on a template.</p>
187
- </dd>
188
- <dt><a href="#_checkMarket">_checkMarket(market)</a> ⇒ <code>Boolean</code></dt>
189
- <dd><p>check if a market name exists in current mcdev config</p>
190
- </dd>
191
- <dt><a href="#buildDefinitionBulk">buildDefinitionBulk(listName, type, name)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
192
- <dd><p>Build a specific metadata file based on a template using a list of bu-market combos</p>
193
- </dd>
194
157
  <dt><a href="#createNewLoggerTransport">createNewLoggerTransport()</a> ⇒ <code>object</code></dt>
195
158
  <dd><p>wrapper around our standard winston logging to console and logfile</p>
196
159
  </dd>
@@ -373,6 +336,363 @@ parses asset metadata to auto-create folders in target folder
373
336
  | metadata | <code>Object</code> | list of metadata |
374
337
  | metadataTypeArr | <code>String</code> | list of metadata types |
375
338
 
339
+ <a name="Mcdev"></a>
340
+
341
+ ## Mcdev
342
+ main class
343
+
344
+ **Kind**: global class
345
+
346
+ * [Mcdev](#Mcdev)
347
+ * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ <code>void</code>
348
+ * [._setLoggingLevel(argv)](#Mcdev._setLoggingLevel) ⇒ <code>void</code>
349
+ * [.selectTypes()](#Mcdev.selectTypes) ⇒ <code>Promise</code>
350
+ * [.explainTypes()](#Mcdev.explainTypes) ⇒ <code>Promise</code>
351
+ * [.upgrade([skipInteraction])](#Mcdev.upgrade) ⇒ <code>Promise</code>
352
+ * [.retrieve(businessUnit, [selectedType], [changelogOnly])](#Mcdev.retrieve) ⇒ <code>Promise.&lt;Object&gt;</code>
353
+ * [._retrieveBU(cred, bu, [selectedType], [changelogOnly])](#Mcdev._retrieveBU) ⇒ <code>Promise.&lt;Object&gt;</code>
354
+ * [._deployBU(cred, bu, [type])](#Mcdev._deployBU) ⇒ <code>Promise</code>
355
+ * [.deploy(businessUnit, [selectedType])](#Mcdev.deploy) ⇒ <code>Promise.&lt;void&gt;</code>
356
+ * [.initProject([credentialsName], [skipInteraction])](#Mcdev.initProject) ⇒ <code>Promise.&lt;void&gt;</code>
357
+ * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ <code>Promise.&lt;void&gt;</code>
358
+ * [.document(businessUnit, type)](#Mcdev.document) ⇒ <code>Promise.&lt;void&gt;</code>
359
+ * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ <code>Promise.&lt;void&gt;</code>
360
+ * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ <code>Promise.&lt;void&gt;</code>
361
+ * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ <code>Promise.&lt;void&gt;</code>
362
+ * [.buildDefinition(businessUnit, type, name, market)](#Mcdev.buildDefinition) ⇒ <code>Promise.&lt;void&gt;</code>
363
+ * [._checkMarket(market)](#Mcdev._checkMarket) ⇒ <code>Boolean</code>
364
+ * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ <code>Promise.&lt;void&gt;</code>
365
+
366
+ <a name="Mcdev.createDeltaPkg"></a>
367
+
368
+ ### Mcdev.createDeltaPkg(argv) ⇒ <code>void</code>
369
+ handler for 'mcdev createDeltaPkg
370
+
371
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
372
+
373
+ | Param | Type | Description |
374
+ | --- | --- | --- |
375
+ | argv | <code>Object</code> | yargs parameters |
376
+ | [argv.range] | <code>String</code> | git commit range into deploy directory |
377
+ | [argv.filter] | <code>String</code> | filter file paths that start with any |
378
+ | [argv.skipInteraction] | <code>Boolean</code> | allows to skip interactive wizard |
379
+
380
+ <a name="Mcdev._setLoggingLevel"></a>
381
+
382
+ ### Mcdev.\_setLoggingLevel(argv) ⇒ <code>void</code>
383
+ configures what is displayed in the console
384
+
385
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
386
+
387
+ | Param | Type | Description |
388
+ | --- | --- | --- |
389
+ | argv | <code>object</code> | list of command line parameters given by user |
390
+ | [argv.silent] | <code>Boolean</code> | only errors printed to CLI |
391
+ | [argv.verbose] | <code>Boolean</code> | chatty user CLI output |
392
+ | [argv.debug] | <code>Boolean</code> | enables developer output & features |
393
+
394
+ <a name="Mcdev.selectTypes"></a>
395
+
396
+ ### Mcdev.selectTypes() ⇒ <code>Promise</code>
397
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
398
+ **Returns**: <code>Promise</code> - .
399
+ <a name="Mcdev.explainTypes"></a>
400
+
401
+ ### Mcdev.explainTypes() ⇒ <code>Promise</code>
402
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
403
+ **Returns**: <code>Promise</code> - .
404
+ <a name="Mcdev.upgrade"></a>
405
+
406
+ ### Mcdev.upgrade([skipInteraction]) ⇒ <code>Promise</code>
407
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
408
+ **Returns**: <code>Promise</code> - .
409
+
410
+ | Param | Type | Description |
411
+ | --- | --- | --- |
412
+ | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
413
+
414
+ <a name="Mcdev.retrieve"></a>
415
+
416
+ ### Mcdev.retrieve(businessUnit, [selectedType], [changelogOnly]) ⇒ <code>Promise.&lt;Object&gt;</code>
417
+ Retrieve all metadata from the specified business unit into the local file system.
418
+
419
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
420
+ **Returns**: <code>Promise.&lt;Object&gt;</code> - -
421
+
422
+ | Param | Type | Description |
423
+ | --- | --- | --- |
424
+ | businessUnit | <code>String</code> | references credentials from properties.json |
425
+ | [selectedType] | <code>String</code> | limit retrieval to given metadata type |
426
+ | [changelogOnly] | <code>boolean</code> | skip saving, only create json in memory |
427
+
428
+ <a name="Mcdev._retrieveBU"></a>
429
+
430
+ ### Mcdev.\_retrieveBU(cred, bu, [selectedType], [changelogOnly]) ⇒ <code>Promise.&lt;Object&gt;</code>
431
+ helper for retrieve()
432
+
433
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
434
+ **Returns**: <code>Promise.&lt;Object&gt;</code> - ensure that BUs are worked on sequentially
435
+
436
+ | Param | Type | Description |
437
+ | --- | --- | --- |
438
+ | cred | <code>String</code> | name of Credential |
439
+ | bu | <code>String</code> | name of BU |
440
+ | [selectedType] | <code>String</code> | limit retrieval to given metadata type/subtype |
441
+ | [changelogOnly] | <code>boolean</code> | skip saving, only create json in memory |
442
+
443
+ <a name="Mcdev._deployBU"></a>
444
+
445
+ ### Mcdev.\_deployBU(cred, bu, [type]) ⇒ <code>Promise</code>
446
+ helper for deploy()
447
+
448
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
449
+ **Returns**: <code>Promise</code> - ensure that BUs are worked on sequentially
450
+
451
+ | Param | Type | Description |
452
+ | --- | --- | --- |
453
+ | cred | <code>String</code> | name of Credential |
454
+ | bu | <code>String</code> | name of BU |
455
+ | [type] | <code>String</code> | limit deployment to given metadata type |
456
+
457
+ <a name="Mcdev.deploy"></a>
458
+
459
+ ### Mcdev.deploy(businessUnit, [selectedType]) ⇒ <code>Promise.&lt;void&gt;</code>
460
+ Deploys all metadata located in the 'deploy' directory to the specified business unit
461
+
462
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
463
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
464
+
465
+ | Param | Type | Description |
466
+ | --- | --- | --- |
467
+ | businessUnit | <code>String</code> | references credentials from properties.json |
468
+ | [selectedType] | <code>String</code> | limit deployment to given metadata type |
469
+
470
+ <a name="Mcdev.initProject"></a>
471
+
472
+ ### Mcdev.initProject([credentialsName], [skipInteraction]) ⇒ <code>Promise.&lt;void&gt;</code>
473
+ Creates template file for properties.json
474
+
475
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
476
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
477
+
478
+ | Param | Type | Description |
479
+ | --- | --- | --- |
480
+ | [credentialsName] | <code>string</code> | identifying name of the installed package / project |
481
+ | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
482
+
483
+ <a name="Mcdev.findBUs"></a>
484
+
485
+ ### Mcdev.findBUs(credentialsName) ⇒ <code>Promise.&lt;void&gt;</code>
486
+ Refreshes BU names and ID's from MC instance
487
+
488
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
489
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
490
+
491
+ | Param | Type | Description |
492
+ | --- | --- | --- |
493
+ | credentialsName | <code>string</code> | identifying name of the installed package / project |
494
+
495
+ <a name="Mcdev.document"></a>
496
+
497
+ ### Mcdev.document(businessUnit, type) ⇒ <code>Promise.&lt;void&gt;</code>
498
+ Creates docs for supported metadata types in Markdown and/or HTML format
499
+
500
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
501
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
502
+
503
+ | Param | Type | Description |
504
+ | --- | --- | --- |
505
+ | businessUnit | <code>String</code> | references credentials from properties.json |
506
+ | type | <code>String</code> | metadata type |
507
+
508
+ <a name="Mcdev.deleteByKey"></a>
509
+
510
+ ### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ <code>Promise.&lt;void&gt;</code>
511
+ Creates docs for supported metadata types in Markdown and/or HTML format
512
+
513
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
514
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
515
+
516
+ | Param | Type | Description |
517
+ | --- | --- | --- |
518
+ | businessUnit | <code>String</code> | references credentials from properties.json |
519
+ | type | <code>String</code> | supported metadata type |
520
+ | customerKey | <code>String</code> | Identifier of data extension |
521
+
522
+ <a name="Mcdev.badKeys"></a>
523
+
524
+ ### Mcdev.badKeys(businessUnit) ⇒ <code>Promise.&lt;void&gt;</code>
525
+ Converts metadata to legacy format. Output is saved in 'converted' directory
526
+
527
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
528
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
529
+
530
+ | Param | Type | Description |
531
+ | --- | --- | --- |
532
+ | businessUnit | <code>String</code> | references credentials from properties.json |
533
+
534
+ <a name="Mcdev.retrieveAsTemplate"></a>
535
+
536
+ ### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
537
+ Retrieve a specific metadata file and templatise.
538
+
539
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
540
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
541
+
542
+ | Param | Type | Description |
543
+ | --- | --- | --- |
544
+ | businessUnit | <code>String</code> | references credentials from properties.json |
545
+ | selectedType | <code>String</code> | supported metadata type |
546
+ | name | <code>String</code> | name of the metadata |
547
+ | market | <code>String</code> | market which should be used to revert template |
548
+
549
+ <a name="Mcdev.buildDefinition"></a>
550
+
551
+ ### Mcdev.buildDefinition(businessUnit, type, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
552
+ Build a specific metadata file based on a template.
553
+
554
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
555
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
556
+
557
+ | Param | Type | Description |
558
+ | --- | --- | --- |
559
+ | businessUnit | <code>String</code> | references credentials from properties.json |
560
+ | type | <code>String</code> | supported metadata type |
561
+ | name | <code>String</code> | name of the metadata |
562
+ | market | <code>String</code> | market localizations |
563
+
564
+ <a name="Mcdev._checkMarket"></a>
565
+
566
+ ### Mcdev.\_checkMarket(market) ⇒ <code>Boolean</code>
567
+ check if a market name exists in current mcdev config
568
+
569
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
570
+ **Returns**: <code>Boolean</code> - found market or not
571
+
572
+ | Param | Type | Description |
573
+ | --- | --- | --- |
574
+ | market | <code>String</code> | market localizations |
575
+
576
+ <a name="Mcdev.buildDefinitionBulk"></a>
577
+
578
+ ### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ <code>Promise.&lt;void&gt;</code>
579
+ Build a specific metadata file based on a template using a list of bu-market combos
580
+
581
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
582
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
583
+
584
+ | Param | Type | Description |
585
+ | --- | --- | --- |
586
+ | listName | <code>String</code> | name of list of BU-market combos |
587
+ | type | <code>String</code> | supported metadata type |
588
+ | name | <code>String</code> | name of the metadata |
589
+
590
+ <a name="AccountUser"></a>
591
+
592
+ ## AccountUser ⇐ [<code>MetadataType</code>](#MetadataType)
593
+ MessageSendActivity MetadataType
594
+
595
+ **Kind**: global class
596
+ **Extends**: [<code>MetadataType</code>](#MetadataType)
597
+
598
+ * [AccountUser](#AccountUser) ⇐ [<code>MetadataType</code>](#MetadataType)
599
+ * [.retrieve(retrieveDir, _, buObject)](#AccountUser.retrieve) ⇒ <code>Promise.&lt;Object&gt;</code>
600
+ * [.timeSinceDate(date, date2)](#AccountUser.timeSinceDate) ⇒ <code>number</code>
601
+ * [.getBuName(buObject, id)](#AccountUser.getBuName) ⇒ <code>string</code>
602
+ * [.document(buObject, [metadata])](#AccountUser.document) ⇒ <code>Promise.&lt;void&gt;</code>
603
+ * [._generateDocMd(users, type, columnsToPrint, buObject)](#AccountUser._generateDocMd) ⇒ <code>string</code>
604
+ * [.postRetrieveTasks(metadata)](#AccountUser.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
605
+ * [.parseMetadata(metadata)](#AccountUser.parseMetadata) ⇒ <code>Array</code>
606
+
607
+ <a name="AccountUser.retrieve"></a>
608
+
609
+ ### AccountUser.retrieve(retrieveDir, _, buObject) ⇒ <code>Promise.&lt;Object&gt;</code>
610
+ Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
611
+
612
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
613
+ **Returns**: <code>Promise.&lt;Object&gt;</code> - Promise of metadata
614
+
615
+ | Param | Type | Description |
616
+ | --- | --- | --- |
617
+ | retrieveDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
618
+ | _ | <code>Array.&lt;String&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
619
+ | buObject | <code>Object</code> | properties for auth |
620
+
621
+ <a name="AccountUser.timeSinceDate"></a>
622
+
623
+ ### AccountUser.timeSinceDate(date, date2) ⇒ <code>number</code>
624
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
625
+ **Returns**: <code>number</code> - time difference
626
+
627
+ | Param | Type | Description |
628
+ | --- | --- | --- |
629
+ | date | <code>string</code> | first date |
630
+ | date2 | <code>string</code> | second date |
631
+
632
+ <a name="AccountUser.getBuName"></a>
633
+
634
+ ### AccountUser.getBuName(buObject, id) ⇒ <code>string</code>
635
+ helper to print bu names
636
+
637
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
638
+ **Returns**: <code>string</code> - "bu name (bu id)""
639
+
640
+ | Param | Type | Description |
641
+ | --- | --- | --- |
642
+ | buObject | <code>Util.BuObject</code> | needed for eid |
643
+ | buObject.eid | <code>string</code> | needed to check for parent bu |
644
+ | id | <code>numeric</code> | bu id |
645
+
646
+ <a name="AccountUser.document"></a>
647
+
648
+ ### AccountUser.document(buObject, [metadata]) ⇒ <code>Promise.&lt;void&gt;</code>
649
+ Creates markdown documentation of all roles
650
+
651
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
652
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
653
+
654
+ | Param | Type | Description |
655
+ | --- | --- | --- |
656
+ | buObject | <code>Util.BuObject</code> | properties for auth |
657
+ | [metadata] | <code>Object</code> | user list |
658
+
659
+ <a name="AccountUser._generateDocMd"></a>
660
+
661
+ ### AccountUser.\_generateDocMd(users, type, columnsToPrint, buObject) ⇒ <code>string</code>
662
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
663
+ **Returns**: <code>string</code> - markdown
664
+
665
+ | Param | Type | Description |
666
+ | --- | --- | --- |
667
+ | users | <code>Array.&lt;Object&gt;</code> | list of users and installed package |
668
+ | type | <code>&#x27;Installed Package&#x27;</code> \| <code>&#x27;User&#x27;</code> | choose what sub type to print |
669
+ | columnsToPrint | <code>Array.&lt;Array&gt;</code> | helper array |
670
+ | buObject | <code>Object</code> | properties for auth |
671
+
672
+ <a name="AccountUser.postRetrieveTasks"></a>
673
+
674
+ ### AccountUser.postRetrieveTasks(metadata) ⇒ <code>Array.&lt;Object&gt;</code>
675
+ manages post retrieve steps
676
+
677
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
678
+ **Returns**: <code>Array.&lt;Object&gt;</code> - Array with one metadata object and one query string
679
+
680
+ | Param | Type | Description |
681
+ | --- | --- | --- |
682
+ | metadata | <code>Object</code> | a single query |
683
+
684
+ <a name="AccountUser.parseMetadata"></a>
685
+
686
+ ### AccountUser.parseMetadata(metadata) ⇒ <code>Array</code>
687
+ parses retrieved Metadata before saving
688
+
689
+ **Kind**: static method of [<code>AccountUser</code>](#AccountUser)
690
+ **Returns**: <code>Array</code> - Array with one metadata object and one sql string
691
+
692
+ | Param | Type | Description |
693
+ | --- | --- | --- |
694
+ | metadata | <code>Object</code> | a single query activity definition |
695
+
376
696
  <a name="Asset"></a>
377
697
 
378
698
  ## Asset ⇐ [<code>MetadataType</code>](#MetadataType)
@@ -737,7 +1057,9 @@ Automation MetadataType
737
1057
  **Extends**: [<code>MetadataType</code>](#MetadataType)
738
1058
 
739
1059
  * [Automation](#Automation) ⇐ [<code>MetadataType</code>](#MetadataType)
1060
+ * [.client](#Automation.client) : <code>Util.ET\_Client</code>
740
1061
  * [.retrieve(retrieveDir)](#Automation.retrieve) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
1062
+ * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
741
1063
  * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
742
1064
  * [.retrieveAsTemplate(templateDir, name, variables)](#Automation.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
743
1065
  * [.postRetrieveTasks(metadata, [_], [isTemplating])](#Automation.postRetrieveTasks) ⇒ <code>AutomationItem</code>
@@ -751,6 +1073,10 @@ Automation MetadataType
751
1073
  * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ <code>AutomationScheduleSoap</code>
752
1074
  * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ <code>string</code>
753
1075
 
1076
+ <a name="Automation.client"></a>
1077
+
1078
+ ### Automation.client : <code>Util.ET\_Client</code>
1079
+ **Kind**: static property of [<code>Automation</code>](#Automation)
754
1080
  <a name="Automation.retrieve"></a>
755
1081
 
756
1082
  ### Automation.retrieve(retrieveDir) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
@@ -763,6 +1089,13 @@ Retrieves Metadata of Automation
763
1089
  | --- | --- | --- |
764
1090
  | retrieveDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
765
1091
 
1092
+ <a name="Automation.retrieveChangelog"></a>
1093
+
1094
+ ### Automation.retrieveChangelog() ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
1095
+ Retrieves Metadata of Automation
1096
+
1097
+ **Kind**: static method of [<code>Automation</code>](#Automation)
1098
+ **Returns**: <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code> - Promise of metadata
766
1099
  <a name="Automation.retrieveForCache"></a>
767
1100
 
768
1101
  ### Automation.retrieveForCache() ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
@@ -1023,19 +1356,25 @@ DataExtension MetadataType
1023
1356
  **Extends**: [<code>MetadataType</code>](#MetadataType)
1024
1357
 
1025
1358
  * [DataExtension](#DataExtension) ⇐ [<code>MetadataType</code>](#MetadataType)
1359
+ * [.client](#DataExtension.client) : <code>Util.ET\_Client</code>
1026
1360
  * [.upsert(desToDeploy, _, buObject)](#DataExtension.upsert) ⇒ <code>Promise</code>
1027
1361
  * [._filterUpsertResults(res)](#DataExtension._filterUpsertResults) ⇒ <code>Boolean</code>
1028
- * [.prepareDeployColumnsOnUpdate(deployColumns, targetColumns)](#DataExtension.prepareDeployColumnsOnUpdate) ⇒ <code>void</code>
1029
1362
  * [.create(metadata)](#DataExtension.create) ⇒ <code>Promise</code>
1030
1363
  * [.update(metadata)](#DataExtension.update) ⇒ <code>Promise</code>
1031
- * [.retrieve(retrieveDir, [additionalFields], buObject)](#DataExtension.retrieve) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1364
+ * [.postDeployTasks(upsertedMetadata)](#DataExtension.postDeployTasks) ⇒ <code>void</code>
1365
+ * [.retrieve(retrieveDir, [additionalFields], buObject, [_], [isDeploy])](#DataExtension.retrieve) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1366
+ * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1032
1367
  * [.postRetrieveTasks(metadata, [_], [isTemplating])](#DataExtension.postRetrieveTasks) ⇒ <code>DataExtensionItem</code>
1033
1368
  * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ <code>Promise.&lt;DataExtensionItem&gt;</code>
1034
1369
  * [.document(buObject, [metadata], [isDeploy])](#DataExtension.document) ⇒ <code>Promise.&lt;void&gt;</code>
1035
1370
  * [.deleteByKey(buObject, customerKey)](#DataExtension.deleteByKey) ⇒ <code>Promise.&lt;void&gt;</code>
1036
- * [.retrieveForCache(buObject)](#DataExtension.retrieveForCache) ⇒ <code>Promise</code>
1371
+ * [.retrieveForCache(buObject, [_], [isDeploy])](#DataExtension.retrieveForCache) ⇒ <code>Promise</code>
1037
1372
  * [.retrieveAsTemplate(templateDir, name, variables)](#DataExtension.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1038
1373
 
1374
+ <a name="DataExtension.client"></a>
1375
+
1376
+ ### DataExtension.client : <code>Util.ET\_Client</code>
1377
+ **Kind**: static property of [<code>DataExtension</code>](#DataExtension)
1039
1378
  <a name="DataExtension.upsert"></a>
1040
1379
 
1041
1380
  ### DataExtension.upsert(desToDeploy, _, buObject) ⇒ <code>Promise</code>
@@ -1063,19 +1402,6 @@ helper for upsert()
1063
1402
  | --- | --- | --- |
1064
1403
  | res | <code>Object</code> | - |
1065
1404
 
1066
- <a name="DataExtension.prepareDeployColumnsOnUpdate"></a>
1067
-
1068
- ### DataExtension.prepareDeployColumnsOnUpdate(deployColumns, targetColumns) ⇒ <code>void</code>
1069
- Mofifies passed deployColumns for update by mapping ObjectID to their target column's values.
1070
- Removes FieldType field if its the same in deploy and target column, because it results in an error even if its of the same type
1071
-
1072
- **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
1073
-
1074
- | Param | Type | Description |
1075
- | --- | --- | --- |
1076
- | deployColumns | <code>Array.&lt;DataExtensionField.DataExtensionFieldItem&gt;</code> | Columns of data extension that will be deployed |
1077
- | targetColumns | <code>Array.&lt;DataExtensionField.DataExtensionFieldItem&gt;</code> | Columns of data extension that currently exists in target |
1078
-
1079
1405
  <a name="DataExtension.create"></a>
1080
1406
 
1081
1407
  ### DataExtension.create(metadata) ⇒ <code>Promise</code>
@@ -1098,11 +1424,38 @@ Updates a single dataExtension. Also updates their columns in 'dataExtension.col
1098
1424
 
1099
1425
  | Param | Type | Description |
1100
1426
  | --- | --- | --- |
1101
- | metadata | <code>DataExtensionItem</code> | single metadata entry |
1427
+ | metadata | <code>DataExtensionItem</code> | single metadata entry |
1428
+
1429
+ <a name="DataExtension.postDeployTasks"></a>
1430
+
1431
+ ### DataExtension.postDeployTasks(upsertedMetadata) ⇒ <code>void</code>
1432
+ Gets executed after deployment of metadata type
1433
+
1434
+ **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
1435
+
1436
+ | Param | Type | Description |
1437
+ | --- | --- | --- |
1438
+ | upsertedMetadata | [<code>DataExtensionMap</code>](#DataExtensionMap) | metadata mapped by their keyField |
1439
+
1440
+ <a name="DataExtension.retrieve"></a>
1441
+
1442
+ ### DataExtension.retrieve(retrieveDir, [additionalFields], buObject, [_], [isDeploy]) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1443
+ Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval
1444
+
1445
+ **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
1446
+ **Returns**: <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code> - Promise of item map
1447
+
1448
+ | Param | Type | Description |
1449
+ | --- | --- | --- |
1450
+ | retrieveDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
1451
+ | [additionalFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
1452
+ | buObject | <code>Util.BuObject</code> | properties for auth |
1453
+ | [_] | <code>void</code> | - |
1454
+ | [isDeploy] | <code>boolean</code> | used to signal that fields shall be retrieve in caching mode |
1102
1455
 
1103
- <a name="DataExtension.retrieve"></a>
1456
+ <a name="DataExtension.retrieveChangelog"></a>
1104
1457
 
1105
- ### DataExtension.retrieve(retrieveDir, [additionalFields], buObject) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1458
+ ### DataExtension.retrieveChangelog([additionalFields]) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1106
1459
  Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval
1107
1460
 
1108
1461
  **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
@@ -1110,9 +1463,7 @@ Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionCo
1110
1463
 
1111
1464
  | Param | Type | Description |
1112
1465
  | --- | --- | --- |
1113
- | retrieveDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
1114
1466
  | [additionalFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
1115
- | buObject | <code>Util.BuObject</code> | properties for auth |
1116
1467
 
1117
1468
  <a name="DataExtension.postRetrieveTasks"></a>
1118
1469
 
@@ -1169,7 +1520,7 @@ Delete a data extension from the specified business unit
1169
1520
 
1170
1521
  <a name="DataExtension.retrieveForCache"></a>
1171
1522
 
1172
- ### DataExtension.retrieveForCache(buObject) ⇒ <code>Promise</code>
1523
+ ### DataExtension.retrieveForCache(buObject, [_], [isDeploy]) ⇒ <code>Promise</code>
1173
1524
  Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder.
1174
1525
 
1175
1526
  **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
@@ -1178,6 +1529,8 @@ Retrieves folder metadata into local filesystem. Also creates a uniquePath attri
1178
1529
  | Param | Type | Description |
1179
1530
  | --- | --- | --- |
1180
1531
  | buObject | <code>Object</code> | properties for auth |
1532
+ | [_] | <code>void</code> | - |
1533
+ | [isDeploy] | <code>boolean</code> | used to signal that fields shall be retrieve in caching mode |
1181
1534
 
1182
1535
  <a name="DataExtension.retrieveAsTemplate"></a>
1183
1536
 
@@ -1207,6 +1560,7 @@ DataExtensionField MetadataType
1207
1560
  * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ <code>Array.&lt;DataExtensionFieldItem&gt;</code>
1208
1561
  * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ <code>boolean</code>
1209
1562
  * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ <code>DataExtensionFieldItem</code>
1563
+ * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ <code>Object.&lt;string, DataExtensionFieldItem&gt;</code>
1210
1564
 
1211
1565
  <a name="DataExtensionField.retrieve"></a>
1212
1566
 
@@ -1273,6 +1627,20 @@ manages post retrieve steps
1273
1627
  | metadata | <code>DataExtensionFieldItem</code> | a single item |
1274
1628
  | forDataExtension | <code>boolean</code> | when used by DataExtension class we remove more fields |
1275
1629
 
1630
+ <a name="DataExtensionField.prepareDeployColumnsOnUpdate"></a>
1631
+
1632
+ ### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ <code>Object.&lt;string, DataExtensionFieldItem&gt;</code>
1633
+ Mofifies passed deployColumns for update by mapping ObjectID to their target column's values.
1634
+ Removes FieldType field if its the same in deploy and target column, because it results in an error even if its of the same type
1635
+
1636
+ **Kind**: static method of [<code>DataExtensionField</code>](#DataExtensionField)
1637
+ **Returns**: <code>Object.&lt;string, DataExtensionFieldItem&gt;</code> - existing fields by their original name to allow re-adding FieldType after update
1638
+
1639
+ | Param | Type | Description |
1640
+ | --- | --- | --- |
1641
+ | deployColumns | <code>Array.&lt;DataExtensionFieldItem&gt;</code> | Columns of data extension that will be deployed |
1642
+ | deKey | <code>string</code> | external/customer key of Data Extension |
1643
+
1276
1644
  <a name="DataExtensionTemplate"></a>
1277
1645
 
1278
1646
  ## DataExtensionTemplate ⇐ [<code>MetadataType</code>](#MetadataType)
@@ -1854,20 +2222,20 @@ Folder MetadataType
1854
2222
  **Extends**: [<code>MetadataType</code>](#MetadataType)
1855
2223
 
1856
2224
  * [Folder](#Folder) ⇐ [<code>MetadataType</code>](#MetadataType)
1857
- * [.retrieve(retrieveDir, [overrideFields], buObject)](#Folder.retrieve) ⇒ <code>Promise</code>
2225
+ * [.retrieve(retrieveDir, [additionalFields], buObject)](#Folder.retrieve) ⇒ <code>Promise</code>
1858
2226
  * [.retrieveForCache(buObject)](#Folder.retrieveForCache) ⇒ <code>Promise</code>
1859
2227
  * [.upsert(metadata)](#Folder.upsert) ⇒ <code>Promise.&lt;Object&gt;</code>
1860
2228
  * [.create(metadata)](#Folder.create) ⇒ <code>Promise</code>
1861
2229
  * [.update(metadata)](#Folder.update) ⇒ <code>Promise</code>
1862
2230
  * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ <code>Promise</code>
1863
2231
  * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ <code>Object</code>
1864
- * [.retrieveHelper([overrideFields], [queryAllAccounts])](#Folder.retrieveHelper) ⇒ <code>Promise.&lt;Object&gt;</code>
2232
+ * [.retrieveHelper([additionalFields], [queryAllAccounts])](#Folder.retrieveHelper) ⇒ <code>Promise.&lt;Object&gt;</code>
1865
2233
  * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
1866
2234
  * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ <code>Promise.&lt;Object&gt;</code>
1867
2235
 
1868
2236
  <a name="Folder.retrieve"></a>
1869
2237
 
1870
- ### Folder.retrieve(retrieveDir, [overrideFields], buObject) ⇒ <code>Promise</code>
2238
+ ### Folder.retrieve(retrieveDir, [additionalFields], buObject) ⇒ <code>Promise</code>
1871
2239
  Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata
1872
2240
 
1873
2241
  **Kind**: static method of [<code>Folder</code>](#Folder)
@@ -1876,7 +2244,7 @@ Retrieves metadata of metadata type into local filesystem. executes callback wit
1876
2244
  | Param | Type | Description |
1877
2245
  | --- | --- | --- |
1878
2246
  | retrieveDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
1879
- | [overrideFields] | <code>Array.&lt;String&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2247
+ | [additionalFields] | <code>Array.&lt;String&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
1880
2248
  | buObject | <code>Object</code> | properties for auth |
1881
2249
 
1882
2250
  <a name="Folder.retrieveForCache"></a>
@@ -1956,7 +2324,7 @@ Returns file contents mapped to their filename without '.json' ending
1956
2324
 
1957
2325
  <a name="Folder.retrieveHelper"></a>
1958
2326
 
1959
- ### Folder.retrieveHelper([overrideFields], [queryAllAccounts]) ⇒ <code>Promise.&lt;Object&gt;</code>
2327
+ ### Folder.retrieveHelper([additionalFields], [queryAllAccounts]) ⇒ <code>Promise.&lt;Object&gt;</code>
1960
2328
  Helper to retrieve the folders as promise
1961
2329
 
1962
2330
  **Kind**: static method of [<code>Folder</code>](#Folder)
@@ -1964,7 +2332,7 @@ Helper to retrieve the folders as promise
1964
2332
 
1965
2333
  | Param | Type | Description |
1966
2334
  | --- | --- | --- |
1967
- | [overrideFields] | <code>Array.&lt;String&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2335
+ | [additionalFields] | <code>Array.&lt;String&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
1968
2336
  | [queryAllAccounts] | <code>Boolean</code> | which queryAllAccounts setting to use |
1969
2337
 
1970
2338
  <a name="Folder.postRetrieveTasks"></a>
@@ -2234,7 +2602,8 @@ Provides default functionality that can be overwritten by child metadata type cl
2234
2602
  * [.postDeployTasks(metadata, originalMetadata)](#MetadataType.postDeployTasks) ⇒ <code>void</code>
2235
2603
  * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ <code>MetadataTypeItem</code>
2236
2604
  * [.overrideKeyWithName(metadata, [warningMsg])](#MetadataType.overrideKeyWithName) ⇒ <code>void</code>
2237
- * [.retrieve(retrieveDir, [overrideFields], buObject, [subType])](#MetadataType.retrieve) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2605
+ * [.retrieve(retrieveDir, [additionalFields], buObject, [subType])](#MetadataType.retrieve) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2606
+ * [.retrieveChangelog([additionalFields], buObject, [subType])](#MetadataType.retrieveChangelog) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2238
2607
  * [.retrieveForCache(buObject, [subType])](#MetadataType.retrieveForCache) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2239
2608
  * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2240
2609
  * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ <code>Promise.&lt;MetadataTypeItem&gt;</code>
@@ -2242,10 +2611,10 @@ Provides default functionality that can be overwritten by child metadata type cl
2242
2611
  * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ <code>void</code>
2243
2612
  * [.upsert(metadata, deployDir, [buObject])](#MetadataType.upsert) ⇒ <code>Promise.&lt;MetadataTypeMap&gt;</code>
2244
2613
  * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ <code>Promise</code>
2245
- * [.createSOAP(metadataEntry)](#MetadataType.createSOAP) ⇒ <code>Promise</code>
2614
+ * [.createSOAP(metadataEntry, [overrideType], [handleOutside])](#MetadataType.createSOAP) ⇒ <code>Promise</code>
2246
2615
  * [.updateREST(metadataEntry, uri)](#MetadataType.updateREST) ⇒ <code>Promise</code>
2247
- * [.updateSOAP(metadataEntry)](#MetadataType.updateSOAP) ⇒ <code>Promise</code>
2248
- * [.retrieveSOAPgeneric(retrieveDir, buObject, [options], [additionalFields])](#MetadataType.retrieveSOAPgeneric) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2616
+ * [.updateSOAP(metadataEntry, [overrideType], [handleOutside])](#MetadataType.updateSOAP) ⇒ <code>Promise</code>
2617
+ * [.retrieveSOAPgeneric(retrieveDir, buObject, [options], [additionalFields], [overrideType])](#MetadataType.retrieveSOAPgeneric) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2249
2618
  * [.retrieveSOAPBody(fields, [options], [type])](#MetadataType.retrieveSOAPBody) ⇒ <code>Promise.&lt;MetadataTypeMap&gt;</code>
2250
2619
  * [.retrieveREST(retrieveDir, uri, [overrideType], [templateVariables])](#MetadataType.retrieveREST) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2251
2620
  * [.parseResponseBody(body)](#MetadataType.parseResponseBody) ⇒ <code>Promise.&lt;MetadataTypeMap&gt;</code>
@@ -2369,7 +2738,7 @@ used to synchronize name and external key during retrieveAsTemplate
2369
2738
 
2370
2739
  <a name="MetadataType.retrieve"></a>
2371
2740
 
2372
- ### MetadataType.retrieve(retrieveDir, [overrideFields], buObject, [subType]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2741
+ ### MetadataType.retrieve(retrieveDir, [additionalFields], buObject, [subType]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2373
2742
  Gets metadata from Marketing Cloud
2374
2743
 
2375
2744
  **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
@@ -2378,7 +2747,21 @@ Gets metadata from Marketing Cloud
2378
2747
  | Param | Type | Description |
2379
2748
  | --- | --- | --- |
2380
2749
  | retrieveDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
2381
- | [overrideFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2750
+ | [additionalFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2751
+ | buObject | <code>Util.BuObject</code> | properties for auth |
2752
+ | [subType] | <code>string</code> | optionally limit to a single subtype |
2753
+
2754
+ <a name="MetadataType.retrieveChangelog"></a>
2755
+
2756
+ ### MetadataType.retrieveChangelog([additionalFields], buObject, [subType]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2757
+ Gets metadata from Marketing Cloud
2758
+
2759
+ **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
2760
+ **Returns**: <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code> - metadata
2761
+
2762
+ | Param | Type | Description |
2763
+ | --- | --- | --- |
2764
+ | [additionalFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2382
2765
  | buObject | <code>Util.BuObject</code> | properties for auth |
2383
2766
  | [subType] | <code>string</code> | optionally limit to a single subtype |
2384
2767
 
@@ -2476,7 +2859,7 @@ Creates a single metadata entry via REST
2476
2859
 
2477
2860
  <a name="MetadataType.createSOAP"></a>
2478
2861
 
2479
- ### MetadataType.createSOAP(metadataEntry) ⇒ <code>Promise</code>
2862
+ ### MetadataType.createSOAP(metadataEntry, [overrideType], [handleOutside]) ⇒ <code>Promise</code>
2480
2863
  Creates a single metadata entry via fuel-soap (generic lib not wrapper)
2481
2864
 
2482
2865
  **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
@@ -2485,6 +2868,8 @@ Creates a single metadata entry via fuel-soap (generic lib not wrapper)
2485
2868
  | Param | Type | Description |
2486
2869
  | --- | --- | --- |
2487
2870
  | metadataEntry | <code>MetadataTypeItem</code> | single metadata entry |
2871
+ | [overrideType] | <code>string</code> | can be used if the API type differs from the otherwise used type identifier |
2872
+ | [handleOutside] | <code>boolean</code> | if the API reponse is irregular this allows you to handle it outside of this generic method |
2488
2873
 
2489
2874
  <a name="MetadataType.updateREST"></a>
2490
2875
 
@@ -2501,7 +2886,7 @@ Updates a single metadata entry via REST
2501
2886
 
2502
2887
  <a name="MetadataType.updateSOAP"></a>
2503
2888
 
2504
- ### MetadataType.updateSOAP(metadataEntry) ⇒ <code>Promise</code>
2889
+ ### MetadataType.updateSOAP(metadataEntry, [overrideType], [handleOutside]) ⇒ <code>Promise</code>
2505
2890
  Updates a single metadata entry via fuel-soap (generic lib not wrapper)
2506
2891
 
2507
2892
  **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
@@ -2510,10 +2895,12 @@ Updates a single metadata entry via fuel-soap (generic lib not wrapper)
2510
2895
  | Param | Type | Description |
2511
2896
  | --- | --- | --- |
2512
2897
  | metadataEntry | <code>MetadataTypeItem</code> | single metadata entry |
2898
+ | [overrideType] | <code>string</code> | can be used if the API type differs from the otherwise used type identifier |
2899
+ | [handleOutside] | <code>boolean</code> | if the API reponse is irregular this allows you to handle it outside of this generic method |
2513
2900
 
2514
2901
  <a name="MetadataType.retrieveSOAPgeneric"></a>
2515
2902
 
2516
- ### MetadataType.retrieveSOAPgeneric(retrieveDir, buObject, [options], [additionalFields]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2903
+ ### MetadataType.retrieveSOAPgeneric(retrieveDir, buObject, [options], [additionalFields], [overrideType]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
2517
2904
  Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata
2518
2905
 
2519
2906
  **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
@@ -2525,6 +2912,7 @@ Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type int
2525
2912
  | buObject | <code>Util.BuObject</code> | properties for auth |
2526
2913
  | [options] | <code>Object</code> | required for the specific request (filter for example) |
2527
2914
  | [additionalFields] | <code>Array.&lt;string&gt;</code> | Returns specified fields even if their retrieve definition is not set to true |
2915
+ | [overrideType] | <code>string</code> | can be used if the API type differs from the otherwise used type identifier |
2528
2916
 
2529
2917
  <a name="MetadataType.retrieveSOAPBody"></a>
2530
2918
 
@@ -3288,49 +3676,291 @@ prepares a TSD for deployment
3288
3676
  | --- | --- | --- |
3289
3677
  | metadata | <code>Object</code> | of a single TSD |
3290
3678
 
3291
- <a name="Retriever"></a>
3679
+ <a name="Retriever"></a>
3680
+
3681
+ ## Retriever
3682
+ Retrieves metadata from a business unit and saves it to the local filesystem.
3683
+
3684
+ **Kind**: global class
3685
+
3686
+ * [Retriever](#Retriever)
3687
+ * [new Retriever(properties, buObject, client)](#new_Retriever_new)
3688
+ * [.retrieve(metadataTypes, [name], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ <code>Promise.&lt;Object.&lt;string, Object&gt;&gt;</code>
3689
+
3690
+ <a name="new_Retriever_new"></a>
3691
+
3692
+ ### new Retriever(properties, buObject, client)
3693
+ Creates a Retriever, uses v2 auth if v2AuthOptions are passed.
3694
+
3695
+
3696
+ | Param | Type | Description |
3697
+ | --- | --- | --- |
3698
+ | properties | <code>Object</code> | General configuration to be used in retrieve |
3699
+ | properties.directories | <code>Object</code> | Directories to be used when interacting with FS |
3700
+ | buObject | <code>Object</code> | properties for auth |
3701
+ | buObject.clientId | <code>String</code> | clientId for FuelSDK auth |
3702
+ | buObject.clientSecret | <code>String</code> | clientSecret for FuelSDK auth |
3703
+ | buObject.credential | <code>Object</code> | clientId for FuelSDK auth |
3704
+ | buObject.tenant | <code>String</code> | v2 Auth Tenant Information |
3705
+ | [buObject.mid] | <code>String</code> | ID of Business Unit to authenticate with |
3706
+ | [buObject.businessUnit] | <code>String</code> | name of Business Unit to authenticate with |
3707
+ | client | <code>Util.ET\_Client</code> | fuel client |
3708
+
3709
+ <a name="Retriever+retrieve"></a>
3710
+
3711
+ ### retriever.retrieve(metadataTypes, [name], [templateVariables], [changelogOnly]) ⇒ <code>Promise.&lt;Object.&lt;string, Object&gt;&gt;</code>
3712
+ Retrieve metadata of specified types into local file system and Retriever.metadata
3713
+
3714
+ **Kind**: instance method of [<code>Retriever</code>](#Retriever)
3715
+ **Returns**: <code>Promise.&lt;Object.&lt;string, Object&gt;&gt;</code> - Promise
3716
+
3717
+ | Param | Type | Description |
3718
+ | --- | --- | --- |
3719
+ | metadataTypes | <code>Array.&lt;String&gt;</code> | String list of metadata types to retrieve |
3720
+ | [name] | <code>String</code> | name of Metadata to retrieve (in case of templating) |
3721
+ | [templateVariables] | <code>Object</code> | Object of values which can be replaced (in case of templating) |
3722
+ | [changelogOnly] | <code>boolean</code> | skip saving, only create json in memory |
3723
+
3724
+ <a name="Util"></a>
3725
+
3726
+ ## Util
3727
+ CLI entry for SFMC DevTools
3728
+
3729
+ **Kind**: global constant
3730
+
3731
+ * [Util](#Util)
3732
+ * [.logger](#Util.logger)
3733
+ * [.isTrue(attrValue)](#Util.isTrue) ⇒ <code>boolean</code>
3734
+ * [.isFalse(attrValue)](#Util.isFalse) ⇒ <code>boolean</code>
3735
+ * [.getDefaultProperties()](#Util.getDefaultProperties) ⇒ <code>object</code>
3736
+ * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ <code>Array.&lt;string&gt;</code>
3737
+ * [.checkProperties(properties, [silent])](#Util.checkProperties) ⇒ <code>boolean</code> \| <code>Array.&lt;String&gt;</code>
3738
+ * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ <code>void</code>
3739
+ * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ <code>String</code> \| <code>Object</code>
3740
+ * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ <code>String</code>
3741
+ * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ <code>Array.&lt;String&gt;</code>
3742
+ * [.getETClient(buObject)](#Util.getETClient) ⇒ [<code>Promise.&lt;ET\_Client&gt;</code>](#ET_Client)
3743
+ * [~myClient](#Util.getETClient..myClient) : [<code>ET\_Client</code>](#ET_Client)
3744
+ * [.getFromCache(cache, metadataType, searchValue, searchField, returnField)](#Util.getFromCache) ⇒ <code>String</code>
3745
+ * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ <code>any</code>
3746
+ * [.getListObjectIdFromCache(cache, listPathName, returnField)](#Util.getListObjectIdFromCache) ⇒ <code>String</code>
3747
+ * [.getListPathNameFromCache(cache, searchValue, searchField)](#Util.getListPathNameFromCache) ⇒ <code>String</code>
3748
+ * [.retryOnError(errorMsg, callback, [silentError], [retries])](#Util.retryOnError) ⇒ <code>Promise.&lt;void&gt;</code>
3749
+ * [.execSync(cmd, [args])](#Util.execSync) ⇒ <code>undefined</code>
3750
+
3751
+ <a name="Util.logger"></a>
3752
+
3753
+ ### Util.logger
3754
+ Logger that creates timestamped log file in 'logs/' directory
3755
+
3756
+ **Kind**: static property of [<code>Util</code>](#Util)
3757
+ <a name="Util.isTrue"></a>
3758
+
3759
+ ### Util.isTrue(attrValue) ⇒ <code>boolean</code>
3760
+ SFMC accepts multiple true values for Boolean attributes for which we are checking here
3761
+
3762
+ **Kind**: static method of [<code>Util</code>](#Util)
3763
+ **Returns**: <code>boolean</code> - attribute value == true ? true : false
3764
+
3765
+ | Param | Type | Description |
3766
+ | --- | --- | --- |
3767
+ | attrValue | <code>\*</code> | value |
3768
+
3769
+ <a name="Util.isFalse"></a>
3770
+
3771
+ ### Util.isFalse(attrValue) ⇒ <code>boolean</code>
3772
+ SFMC accepts multiple false values for Boolean attributes for which we are checking here
3773
+
3774
+ **Kind**: static method of [<code>Util</code>](#Util)
3775
+ **Returns**: <code>boolean</code> - attribute value == false ? true : false
3776
+
3777
+ | Param | Type | Description |
3778
+ | --- | --- | --- |
3779
+ | attrValue | <code>\*</code> | value |
3780
+
3781
+ <a name="Util.getDefaultProperties"></a>
3782
+
3783
+ ### Util.getDefaultProperties() ⇒ <code>object</code>
3784
+ defines how the properties.json should look like
3785
+ used for creating a template and for checking if variables are set
3786
+
3787
+ **Kind**: static method of [<code>Util</code>](#Util)
3788
+ **Returns**: <code>object</code> - default properties
3789
+ <a name="Util.getRetrieveTypeChoices"></a>
3790
+
3791
+ ### Util.getRetrieveTypeChoices() ⇒ <code>Array.&lt;string&gt;</code>
3792
+ helper for getDefaultProperties()
3793
+
3794
+ **Kind**: static method of [<code>Util</code>](#Util)
3795
+ **Returns**: <code>Array.&lt;string&gt;</code> - type choices
3796
+ <a name="Util.checkProperties"></a>
3797
+
3798
+ ### Util.checkProperties(properties, [silent]) ⇒ <code>boolean</code> \| <code>Array.&lt;String&gt;</code>
3799
+ check if the config file is correctly formatted and has values
3800
+
3801
+ **Kind**: static method of [<code>Util</code>](#Util)
3802
+ **Returns**: <code>boolean</code> \| <code>Array.&lt;String&gt;</code> - file structure ok OR list of fields to be fixed
3803
+
3804
+ | Param | Type | Description |
3805
+ | --- | --- | --- |
3806
+ | properties | <code>object</code> | javascript object in .mcdevrc.json |
3807
+ | [silent] | <code>boolean</code> | set to true for internal use w/o cli output |
3808
+
3809
+ <a name="Util.metadataLogger"></a>
3810
+
3811
+ ### Util.metadataLogger(level, type, method, payload, [source]) ⇒ <code>void</code>
3812
+ Logger helper for Metadata functions
3813
+
3814
+ **Kind**: static method of [<code>Util</code>](#Util)
3815
+
3816
+ | Param | Type | Description |
3817
+ | --- | --- | --- |
3818
+ | level | <code>String</code> | of log (error, info, warn) |
3819
+ | type | <code>String</code> | of metadata being referenced |
3820
+ | method | <code>String</code> | name which log was called from |
3821
+ | payload | <code>\*</code> | generic object which details the error |
3822
+ | [source] | <code>String</code> | key/id of metadata which relates to error |
3823
+
3824
+ <a name="Util.replaceByObject"></a>
3825
+
3826
+ ### Util.replaceByObject(str, obj) ⇒ <code>String</code> \| <code>Object</code>
3827
+ replaces values in a JSON object string, based on a series of
3828
+ key-value pairs (obj)
3829
+
3830
+ **Kind**: static method of [<code>Util</code>](#Util)
3831
+ **Returns**: <code>String</code> \| <code>Object</code> - replaced version of str
3832
+
3833
+ | Param | Type | Description |
3834
+ | --- | --- | --- |
3835
+ | str | <code>String</code> \| <code>Object</code> | JSON object or its stringified version, which has values to be replaced |
3836
+ | obj | [<code>TemplateMap</code>](#TemplateMap) | key value object which contains keys to be replaced and values to be replaced with |
3837
+
3838
+ <a name="Util.inverseGet"></a>
3839
+
3840
+ ### Util.inverseGet(objs, val) ⇒ <code>String</code>
3841
+ get key of an object based on the first matching value
3842
+
3843
+ **Kind**: static method of [<code>Util</code>](#Util)
3844
+ **Returns**: <code>String</code> - key
3845
+
3846
+ | Param | Type | Description |
3847
+ | --- | --- | --- |
3848
+ | objs | <code>Object</code> | object of objects to be searched |
3849
+ | val | <code>String</code> | value to be searched for |
3850
+
3851
+ <a name="Util.getMetadataHierachy"></a>
3852
+
3853
+ ### Util.getMetadataHierachy(metadataTypes) ⇒ <code>Array.&lt;String&gt;</code>
3854
+ Returns Order in which metadata needs to be retrieved/deployed
3855
+
3856
+ **Kind**: static method of [<code>Util</code>](#Util)
3857
+ **Returns**: <code>Array.&lt;String&gt;</code> - retrieve/deploy order as array
3858
+
3859
+ | Param | Type | Description |
3860
+ | --- | --- | --- |
3861
+ | metadataTypes | <code>Array.&lt;String&gt;</code> | which should be retrieved/deployed |
3862
+
3863
+ <a name="Util.getETClient"></a>
3864
+
3865
+ ### Util.getETClient(buObject) ⇒ [<code>Promise.&lt;ET\_Client&gt;</code>](#ET_Client)
3866
+ signs in with SFMC
3867
+
3868
+ **Kind**: static method of [<code>Util</code>](#Util)
3869
+ **Returns**: [<code>Promise.&lt;ET\_Client&gt;</code>](#ET_Client) - auth object
3870
+
3871
+ | Param | Type | Description |
3872
+ | --- | --- | --- |
3873
+ | buObject | <code>BuObject</code> | properties for auth |
3874
+
3875
+ <a name="Util.getETClient..myClient"></a>
3876
+
3877
+ #### getETClient~myClient : [<code>ET\_Client</code>](#ET_Client)
3878
+ **Kind**: inner constant of [<code>getETClient</code>](#Util.getETClient)
3879
+ <a name="Util.getFromCache"></a>
3880
+
3881
+ ### Util.getFromCache(cache, metadataType, searchValue, searchField, returnField) ⇒ <code>String</code>
3882
+ standardized method for getting data from cache.
3883
+
3884
+ **Kind**: static method of [<code>Util</code>](#Util)
3885
+ **Returns**: <code>String</code> - unique user definable metadata key (usually external/customer key)
3886
+
3887
+ | Param | Type | Description |
3888
+ | --- | --- | --- |
3889
+ | cache | <code>Object</code> | data retrieved from sfmc instance |
3890
+ | metadataType | <code>String</code> | metadata type ie. query |
3891
+ | searchValue | <code>String</code> | unique identifier of metadata being looked for |
3892
+ | searchField | <code>String</code> | field name (key in object) which contains the unique identifer |
3893
+ | returnField | <code>String</code> | field which should be returned |
3894
+
3895
+ <a name="Util.resolveObjPath"></a>
3896
+
3897
+ ### Util.resolveObjPath(path, obj) ⇒ <code>any</code>
3898
+ let's you dynamically walk down an object and get a value
3899
+
3900
+ **Kind**: static method of [<code>Util</code>](#Util)
3901
+ **Returns**: <code>any</code> - value of obj.path
3902
+
3903
+ | Param | Type | Description |
3904
+ | --- | --- | --- |
3905
+ | path | <code>String</code> | 'fieldA.fieldB.fieldC' |
3906
+ | obj | <code>Object</code> | some parent object |
3907
+
3908
+ <a name="Util.getListObjectIdFromCache"></a>
3909
+
3910
+ ### Util.getListObjectIdFromCache(cache, listPathName, returnField) ⇒ <code>String</code>
3911
+ standardized method for getting data from cache - adapted for special case of lists
3912
+ ! keeping this in util/util.js rather than in metadataTypes/List.js to avoid potential circular dependencies
3913
+
3914
+ **Kind**: static method of [<code>Util</code>](#Util)
3915
+ **Returns**: <code>String</code> - unique ObjectId of list
3916
+
3917
+ | Param | Type | Description |
3918
+ | --- | --- | --- |
3919
+ | cache | <code>Object</code> | data retrieved from sfmc instance |
3920
+ | listPathName | <code>String</code> | folderPath/ListName combo of list |
3921
+ | returnField | <code>String</code> | ObjectID or ID |
3922
+
3923
+ <a name="Util.getListPathNameFromCache"></a>
3292
3924
 
3293
- ## Retriever
3294
- Retrieves metadata from a business unit and saves it to the local filesystem.
3925
+ ### Util.getListPathNameFromCache(cache, searchValue, searchField) ⇒ <code>String</code>
3926
+ standardized method for getting data from cache - adapted for special case of lists
3927
+ ! keeping this in util/util.js rather than in metadataTypes/List.js to avoid potential circular dependencies
3295
3928
 
3296
- **Kind**: global class
3929
+ **Kind**: static method of [<code>Util</code>](#Util)
3930
+ **Returns**: <code>String</code> - unique folderPath/ListName combo of list
3297
3931
 
3298
- * [Retriever](#Retriever)
3299
- * [new Retriever(properties, buObject, client)](#new_Retriever_new)
3300
- * [.retrieve(metadataTypes, [name], [templateVariables])](#Retriever+retrieve) ⇒ <code>Promise</code>
3932
+ | Param | Type | Description |
3933
+ | --- | --- | --- |
3934
+ | cache | <code>Object</code> | data retrieved from sfmc instance |
3935
+ | searchValue | <code>String</code> | unique identifier of metadata being looked for |
3936
+ | searchField | <code>String</code> | ObjectID or ID |
3301
3937
 
3302
- <a name="new_Retriever_new"></a>
3938
+ <a name="Util.retryOnError"></a>
3303
3939
 
3304
- ### new Retriever(properties, buObject, client)
3305
- Creates a Retriever, uses v2 auth if v2AuthOptions are passed.
3940
+ ### Util.retryOnError(errorMsg, callback, [silentError], [retries]) ⇒ <code>Promise.&lt;void&gt;</code>
3941
+ retry on network issues
3306
3942
 
3943
+ **Kind**: static method of [<code>Util</code>](#Util)
3944
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
3307
3945
 
3308
- | Param | Type | Description |
3309
- | --- | --- | --- |
3310
- | properties | <code>Object</code> | General configuration to be used in retrieve |
3311
- | properties.directories | <code>Object</code> | Directories to be used when interacting with FS |
3312
- | buObject | <code>Object</code> | properties for auth |
3313
- | buObject.clientId | <code>String</code> | clientId for FuelSDK auth |
3314
- | buObject.clientSecret | <code>String</code> | clientSecret for FuelSDK auth |
3315
- | buObject.credential | <code>Object</code> | clientId for FuelSDK auth |
3316
- | buObject.tenant | <code>String</code> | v2 Auth Tenant Information |
3317
- | [buObject.mid] | <code>String</code> | ID of Business Unit to authenticate with |
3318
- | [buObject.businessUnit] | <code>String</code> | name of Business Unit to authenticate with |
3319
- | client | <code>Util.ET\_Client</code> | fuel client |
3946
+ | Param | Type | Default | Description |
3947
+ | --- | --- | --- | --- |
3948
+ | errorMsg | <code>String</code> | | what to print behind "Connection error. " |
3949
+ | callback | <code>function</code> | | what to try executing |
3950
+ | [silentError] | <code>Boolean</code> | <code>false</code> | prints retry messages to log only; default=false |
3951
+ | [retries] | <code>Number</code> | <code>1</code> | number of retries; default=1 |
3320
3952
 
3321
- <a name="Retriever+retrieve"></a>
3953
+ <a name="Util.execSync"></a>
3322
3954
 
3323
- ### retriever.retrieve(metadataTypes, [name], [templateVariables]) ⇒ <code>Promise</code>
3324
- Retrieve metadata of specified types into local file system and Retriever.metadata
3955
+ ### Util.execSync(cmd, [args]) ⇒ <code>undefined</code>
3956
+ helper to run other commands as if run manually by user
3325
3957
 
3326
- **Kind**: instance method of [<code>Retriever</code>](#Retriever)
3327
- **Returns**: <code>Promise</code> - Promise
3958
+ **Kind**: static method of [<code>Util</code>](#Util)
3328
3959
 
3329
3960
  | Param | Type | Description |
3330
3961
  | --- | --- | --- |
3331
- | metadataTypes | <code>Array.&lt;String&gt;</code> | String list of metadata types to retrieve |
3332
- | [name] | <code>String</code> | name of Metadata to retrieve (in case of templating) |
3333
- | [templateVariables] | <code>Object</code> | Object of values which can be replaced (in case of templating) |
3962
+ | cmd | <code>string</code> | to be executed command |
3963
+ | [args] | <code>Array.&lt;string&gt;</code> | list of arguments |
3334
3964
 
3335
3965
  <a name="MetadataTypeDefinitions"></a>
3336
3966
 
@@ -3344,6 +3974,24 @@ Provides access to all metadataType classes
3344
3974
  Provides access to all metadataType classes
3345
3975
 
3346
3976
  **Kind**: global constant
3977
+ <a name="mcdev"></a>
3978
+
3979
+ ## mcdev
3980
+ sample file on how to retrieve a simple changelog to use in GUIs or automated processing of any kind
3981
+
3982
+ **Kind**: global constant
3983
+ **Example**
3984
+ ```js
3985
+ [{
3986
+ name: 'deName',
3987
+ key: 'deKey',
3988
+ t: 'dataExtension',
3989
+ cd: '2020-05-06T00:16:00.737',
3990
+ cb: 'name of creator',
3991
+ ld: '2020-05-06T00:16:00.737',
3992
+ lb: 'name of lastmodified'
3993
+ }]
3994
+ ```
3347
3995
  <a name="BusinessUnit"></a>
3348
3996
 
3349
3997
  ## BusinessUnit
@@ -4689,6 +5337,8 @@ Util that contains logger and simple util methods
4689
5337
 
4690
5338
  * [Util](#Util)
4691
5339
  * [.logger](#Util.logger)
5340
+ * [.isTrue(attrValue)](#Util.isTrue) ⇒ <code>boolean</code>
5341
+ * [.isFalse(attrValue)](#Util.isFalse) ⇒ <code>boolean</code>
4692
5342
  * [.getDefaultProperties()](#Util.getDefaultProperties) ⇒ <code>object</code>
4693
5343
  * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ <code>Array.&lt;string&gt;</code>
4694
5344
  * [.checkProperties(properties, [silent])](#Util.checkProperties) ⇒ <code>boolean</code> \| <code>Array.&lt;String&gt;</code>
@@ -4711,6 +5361,30 @@ Util that contains logger and simple util methods
4711
5361
  Logger that creates timestamped log file in 'logs/' directory
4712
5362
 
4713
5363
  **Kind**: static property of [<code>Util</code>](#Util)
5364
+ <a name="Util.isTrue"></a>
5365
+
5366
+ ### Util.isTrue(attrValue) ⇒ <code>boolean</code>
5367
+ SFMC accepts multiple true values for Boolean attributes for which we are checking here
5368
+
5369
+ **Kind**: static method of [<code>Util</code>](#Util)
5370
+ **Returns**: <code>boolean</code> - attribute value == true ? true : false
5371
+
5372
+ | Param | Type | Description |
5373
+ | --- | --- | --- |
5374
+ | attrValue | <code>\*</code> | value |
5375
+
5376
+ <a name="Util.isFalse"></a>
5377
+
5378
+ ### Util.isFalse(attrValue) ⇒ <code>boolean</code>
5379
+ SFMC accepts multiple false values for Boolean attributes for which we are checking here
5380
+
5381
+ **Kind**: static method of [<code>Util</code>](#Util)
5382
+ **Returns**: <code>boolean</code> - attribute value == false ? true : false
5383
+
5384
+ | Param | Type | Description |
5385
+ | --- | --- | --- |
5386
+ | attrValue | <code>\*</code> | value |
5387
+
4714
5388
  <a name="Util.getDefaultProperties"></a>
4715
5389
 
4716
5390
  ### Util.getDefaultProperties() ⇒ <code>object</code>
@@ -4895,227 +5569,17 @@ helper to run other commands as if run manually by user
4895
5569
  | cmd | <code>string</code> | to be executed command |
4896
5570
  | [args] | <code>Array.&lt;string&gt;</code> | list of arguments |
4897
5571
 
4898
- <a name="createDeltaPkg"></a>
4899
-
4900
- ## createDeltaPkg(argv) ⇒ <code>void</code>
4901
- handler for 'mcdev createDeltaPkg
4902
-
4903
- **Kind**: global function
4904
-
4905
- | Param | Type | Description |
4906
- | --- | --- | --- |
4907
- | argv | <code>Object</code> | yargs parameters |
4908
- | [argv.range] | <code>String</code> | git commit range into deploy directory |
4909
- | [argv.filter] | <code>String</code> | filter file paths that start with any |
4910
- | [argv.skipInteraction] | <code>Boolean</code> | allows to skip interactive wizard |
4911
-
4912
- <a name="_setLoggingLevel"></a>
4913
-
4914
- ## \_setLoggingLevel(argv) ⇒ <code>void</code>
4915
- configures what is displayed in the console
4916
-
4917
- **Kind**: global function
4918
-
4919
- | Param | Type | Description |
4920
- | --- | --- | --- |
4921
- | argv | <code>object</code> | list of command line parameters given by user |
4922
- | [argv.silent] | <code>Boolean</code> | only errors printed to CLI |
4923
- | [argv.verbose] | <code>Boolean</code> | chatty user CLI output |
4924
- | [argv.debug] | <code>Boolean</code> | enables developer output & features |
4925
-
4926
- <a name="selectTypes"></a>
4927
-
4928
- ## selectTypes() ⇒ <code>Promise</code>
4929
- **Kind**: global function
4930
- **Returns**: <code>Promise</code> - .
4931
- <a name="explainTypes"></a>
4932
-
4933
- ## explainTypes() ⇒ <code>Promise</code>
4934
- **Kind**: global function
4935
- **Returns**: <code>Promise</code> - .
4936
- <a name="upgrade"></a>
4937
-
4938
- ## upgrade([skipInteraction]) ⇒ <code>Promise</code>
4939
- **Kind**: global function
4940
- **Returns**: <code>Promise</code> - .
4941
-
4942
- | Param | Type | Description |
4943
- | --- | --- | --- |
4944
- | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
4945
-
4946
- <a name="retrieve"></a>
4947
-
4948
- ## retrieve(businessUnit, [selectedType]) ⇒ <code>Promise.&lt;void&gt;</code>
4949
- Retrieve all metadata from the specified business unit into the local file system.
4950
-
4951
- **Kind**: global function
4952
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
4953
-
4954
- | Param | Type | Description |
4955
- | --- | --- | --- |
4956
- | businessUnit | <code>String</code> | references credentials from properties.json |
4957
- | [selectedType] | <code>String</code> | limit retrieval to given metadata type |
4958
-
4959
- <a name="_retrieveBU"></a>
4960
-
4961
- ## \_retrieveBU(cred, bu, [selectedType]) ⇒ <code>Promise</code>
4962
- helper for retrieve()
4963
-
4964
- **Kind**: global function
4965
- **Returns**: <code>Promise</code> - ensure that BUs are worked on sequentially
4966
-
4967
- | Param | Type | Description |
4968
- | --- | --- | --- |
4969
- | cred | <code>String</code> | name of Credential |
4970
- | bu | <code>String</code> | name of BU |
4971
- | [selectedType] | <code>String</code> | limit retrieval to given metadata type/subtype |
4972
-
4973
- <a name="_deployBU"></a>
4974
-
4975
- ## \_deployBU(cred, bu, [type]) ⇒ <code>Promise</code>
4976
- helper for deploy()
4977
-
4978
- **Kind**: global function
4979
- **Returns**: <code>Promise</code> - ensure that BUs are worked on sequentially
4980
-
4981
- | Param | Type | Description |
4982
- | --- | --- | --- |
4983
- | cred | <code>String</code> | name of Credential |
4984
- | bu | <code>String</code> | name of BU |
4985
- | [type] | <code>String</code> | limit deployment to given metadata type |
4986
-
4987
- <a name="deploy"></a>
4988
-
4989
- ## deploy(businessUnit, [selectedType]) ⇒ <code>Promise.&lt;void&gt;</code>
4990
- Deploys all metadata located in the 'deploy' directory to the specified business unit
4991
-
4992
- **Kind**: global function
4993
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
4994
-
4995
- | Param | Type | Description |
4996
- | --- | --- | --- |
4997
- | businessUnit | <code>String</code> | references credentials from properties.json |
4998
- | [selectedType] | <code>String</code> | limit deployment to given metadata type |
4999
-
5000
- <a name="initProject"></a>
5001
-
5002
- ## initProject([credentialsName], [skipInteraction]) ⇒ <code>Promise.&lt;void&gt;</code>
5003
- Creates template file for properties.json
5004
-
5005
- **Kind**: global function
5006
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5007
-
5008
- | Param | Type | Description |
5009
- | --- | --- | --- |
5010
- | [credentialsName] | <code>string</code> | identifying name of the installed package / project |
5011
- | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
5012
-
5013
- <a name="findBUs"></a>
5014
-
5015
- ## findBUs(credentialsName) ⇒ <code>Promise.&lt;void&gt;</code>
5016
- Refreshes BU names and ID's from MC instance
5017
-
5018
- **Kind**: global function
5019
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5020
-
5021
- | Param | Type | Description |
5022
- | --- | --- | --- |
5023
- | credentialsName | <code>string</code> | identifying name of the installed package / project |
5024
-
5025
- <a name="document"></a>
5026
-
5027
- ## document(businessUnit, type) ⇒ <code>Promise.&lt;void&gt;</code>
5028
- Creates docs for supported metadata types in Markdown and/or HTML format
5029
-
5030
- **Kind**: global function
5031
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5032
-
5033
- | Param | Type | Description |
5034
- | --- | --- | --- |
5035
- | businessUnit | <code>String</code> | references credentials from properties.json |
5036
- | type | <code>String</code> | metadata type |
5037
-
5038
- <a name="deleteByKey"></a>
5039
-
5040
- ## deleteByKey(businessUnit, type, customerKey) ⇒ <code>Promise.&lt;void&gt;</code>
5041
- Creates docs for supported metadata types in Markdown and/or HTML format
5042
-
5043
- **Kind**: global function
5044
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5045
-
5046
- | Param | Type | Description |
5047
- | --- | --- | --- |
5048
- | businessUnit | <code>String</code> | references credentials from properties.json |
5049
- | type | <code>String</code> | supported metadata type |
5050
- | customerKey | <code>String</code> | Identifier of data extension |
5051
-
5052
- <a name="badKeys"></a>
5053
-
5054
- ## badKeys(businessUnit) ⇒ <code>Promise.&lt;void&gt;</code>
5055
- Converts metadata to legacy format. Output is saved in 'converted' directory
5056
-
5057
- **Kind**: global function
5058
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5059
-
5060
- | Param | Type | Description |
5061
- | --- | --- | --- |
5062
- | businessUnit | <code>String</code> | references credentials from properties.json |
5063
-
5064
- <a name="retrieveAsTemplate"></a>
5065
-
5066
- ## retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
5067
- Retrieve a specific metadata file and templatise.
5068
-
5069
- **Kind**: global function
5070
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5071
-
5072
- | Param | Type | Description |
5073
- | --- | --- | --- |
5074
- | businessUnit | <code>String</code> | references credentials from properties.json |
5075
- | selectedType | <code>String</code> | supported metadata type |
5076
- | name | <code>String</code> | name of the metadata |
5077
- | market | <code>String</code> | market which should be used to revert template |
5078
-
5079
- <a name="buildDefinition"></a>
5080
-
5081
- ## buildDefinition(businessUnit, type, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
5082
- Build a specific metadata file based on a template.
5083
-
5084
- **Kind**: global function
5085
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5086
-
5087
- | Param | Type | Description |
5088
- | --- | --- | --- |
5089
- | businessUnit | <code>String</code> | references credentials from properties.json |
5090
- | type | <code>String</code> | supported metadata type |
5091
- | name | <code>String</code> | name of the metadata |
5092
- | market | <code>String</code> | market localizations |
5093
-
5094
- <a name="_checkMarket"></a>
5095
-
5096
- ## \_checkMarket(market) ⇒ <code>Boolean</code>
5097
- check if a market name exists in current mcdev config
5098
-
5099
- **Kind**: global function
5100
- **Returns**: <code>Boolean</code> - found market or not
5101
-
5102
- | Param | Type | Description |
5103
- | --- | --- | --- |
5104
- | market | <code>String</code> | market localizations |
5105
-
5106
- <a name="buildDefinitionBulk"></a>
5107
-
5108
- ## buildDefinitionBulk(listName, type, name) ⇒ <code>Promise.&lt;void&gt;</code>
5109
- Build a specific metadata file based on a template using a list of bu-market combos
5572
+ <a name="getUserName"></a>
5110
5573
 
5574
+ ## getUserName(userList, item, fieldname) ⇒ <code>string</code>
5111
5575
  **Kind**: global function
5112
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5576
+ **Returns**: <code>string</code> - username or user id or 'n/a'
5113
5577
 
5114
5578
  | Param | Type | Description |
5115
5579
  | --- | --- | --- |
5116
- | listName | <code>String</code> | name of list of BU-market combos |
5117
- | type | <code>String</code> | supported metadata type |
5118
- | name | <code>String</code> | name of the metadata |
5580
+ | userList | <code>object.&lt;string, string&gt;</code> | user-id > user-name map |
5581
+ | item | <code>object.&lt;string, string&gt;</code> | single metadata item |
5582
+ | fieldname | <code>string</code> | name of field containing the info |
5119
5583
 
5120
5584
  <a name="createNewLoggerTransport"></a>
5121
5585
 
@@ -5249,15 +5713,17 @@ REST format
5249
5713
  | Name | Type | Description |
5250
5714
  | --- | --- | --- |
5251
5715
  | [ObjectID] | <code>string</code> | id |
5252
- | [CustomerKey] | <code>string</code> | key |
5716
+ | [CustomerKey] | <code>string</code> | key in format [DEkey].[FieldName] |
5253
5717
  | [DataExtension] | <code>Object</code> | - |
5254
5718
  | DataExtension.CustomerKey | <code>string</code> | key of DE |
5255
- | Name | <code>string</code> | name |
5256
- | DefaultValue | <code>string</code> | - |
5719
+ | Name | <code>string</code> | name of field |
5720
+ | [Name_new] | <code>string</code> | custom attribute that is only used when trying to rename a field from Name to Name_new |
5721
+ | DefaultValue | <code>string</code> | empty string for not set |
5257
5722
  | IsRequired | <code>&#x27;true&#x27;</code> \| <code>&#x27;false&#x27;</code> | - |
5258
5723
  | IsPrimaryKey | <code>&#x27;true&#x27;</code> \| <code>&#x27;false&#x27;</code> | - |
5259
5724
  | Ordinal | <code>string</code> | 1, 2, 3, ... |
5260
- | FieldType | <code>&#x27;Text&#x27;</code> \| <code>&#x27;Date&#x27;</code> \| <code>&#x27;Number&#x27;</code> \| <code>&#x27;Decimal&#x27;</code> \| <code>&#x27;Email&#x27;</code> | - |
5725
+ | FieldType | <code>&#x27;Text&#x27;</code> \| <code>&#x27;Number&#x27;</code> \| <code>&#x27;Date&#x27;</code> \| <code>&#x27;Boolean&#x27;</code> \| <code>&#x27;Decimal&#x27;</code> \| <code>&#x27;EmailAddress&#x27;</code> \| <code>&#x27;Phone&#x27;</code> \| <code>&#x27;Locale&#x27;</code> | can only be set on create |
5726
+ | Scale | <code>string</code> | the number of places after the decimal that the field can hold; example: "0","1", ... |
5261
5727
 
5262
5728
  <a name="MultiMetadataTypeMap"></a>
5263
5729