mcdev 3.0.3 → 3.1.3

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 (41) hide show
  1. package/.eslintrc.json +1 -1
  2. package/.github/ISSUE_TEMPLATE/bug.yml +75 -0
  3. package/.github/ISSUE_TEMPLATE/task.md +1 -1
  4. package/.issuetracker +11 -3
  5. package/.vscode/settings.json +3 -3
  6. package/CHANGELOG.md +66 -0
  7. package/README.md +245 -141
  8. package/boilerplate/config.json +3 -2
  9. package/docs/dist/documentation.md +799 -338
  10. package/lib/Deployer.js +4 -1
  11. package/lib/MetadataTypeDefinitions.js +1 -0
  12. package/lib/MetadataTypeInfo.js +1 -0
  13. package/lib/Retriever.js +30 -14
  14. package/lib/cli.js +298 -0
  15. package/lib/index.js +773 -1019
  16. package/lib/metadataTypes/AccountUser.js +389 -0
  17. package/lib/metadataTypes/Asset.js +8 -7
  18. package/lib/metadataTypes/Automation.js +121 -56
  19. package/lib/metadataTypes/DataExtension.js +133 -97
  20. package/lib/metadataTypes/DataExtensionField.js +134 -4
  21. package/lib/metadataTypes/DataExtract.js +9 -5
  22. package/lib/metadataTypes/EventDefinition.js +9 -5
  23. package/lib/metadataTypes/FileTransfer.js +9 -5
  24. package/lib/metadataTypes/ImportFile.js +13 -12
  25. package/lib/metadataTypes/MetadataType.js +41 -33
  26. package/lib/metadataTypes/Query.js +2 -3
  27. package/lib/metadataTypes/Role.js +13 -8
  28. package/lib/metadataTypes/Script.js +2 -2
  29. package/lib/metadataTypes/definitions/AccountUser.definition.js +227 -0
  30. package/lib/metadataTypes/definitions/Asset.definition.js +1 -0
  31. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -1
  32. package/lib/metadataTypes/definitions/ImportFile.definition.js +2 -1
  33. package/lib/metadataTypes/definitions/Script.definition.js +5 -5
  34. package/lib/retrieveChangelog.js +96 -0
  35. package/lib/util/cli.js +4 -6
  36. package/lib/util/init.git.js +2 -1
  37. package/lib/util/util.js +17 -0
  38. package/package.json +18 -22
  39. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -30
  40. package/img/README.md/troubleshoot-nodejs-postinstall.jpg +0 -0
  41. 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,9 +1057,11 @@ 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
- * [.retrieveAsTemplate(templateDir, name, variables)](#Automation.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
1064
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
743
1065
  * [.postRetrieveTasks(metadata, [_], [isTemplating])](#Automation.postRetrieveTasks) ⇒ <code>AutomationItem</code>
744
1066
  * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ [<code>Promise.&lt;AutomationMap&gt;</code>](#AutomationMap)
745
1067
  * [.create(metadata)](#Automation.create) ⇒ <code>Promise</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>
@@ -772,7 +1105,7 @@ Retrieves automation metadata for caching
772
1105
  **Returns**: <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code> - Promise of metadata
773
1106
  <a name="Automation.retrieveAsTemplate"></a>
774
1107
 
775
- ### Automation.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
1108
+ ### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise.&lt;{metadata:AutomationMap, type:string}&gt;</code>
776
1109
  Retrieve a specific Automation Definition by Name
777
1110
 
778
1111
  **Kind**: static method of [<code>Automation</code>](#Automation)
@@ -782,7 +1115,7 @@ Retrieve a specific Automation Definition by Name
782
1115
  | --- | --- | --- |
783
1116
  | templateDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
784
1117
  | name | <code>string</code> | name of the metadata file |
785
- | variables | <code>Util.TemplateMap</code> | variables to be replaced in the metadata |
1118
+ | templateVariables | <code>Util.TemplateMap</code> | variables to be replaced in the metadata |
786
1119
 
787
1120
  <a name="Automation.postRetrieveTasks"></a>
788
1121
 
@@ -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>
1037
- * [.retrieveAsTemplate(templateDir, name, variables)](#DataExtension.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1371
+ * [.retrieveForCache(buObject, [_], [isDeploy])](#DataExtension.retrieveForCache) ⇒ <code>Promise</code>
1372
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1373
+
1374
+ <a name="DataExtension.client"></a>
1038
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>
@@ -1100,9 +1426,36 @@ Updates a single dataExtension. Also updates their columns in 'dataExtension.col
1100
1426
  | --- | --- | --- |
1101
1427
  | metadata | <code>DataExtensionItem</code> | single metadata entry |
1102
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
+
1103
1440
  <a name="DataExtension.retrieve"></a>
1104
1441
 
1105
- ### DataExtension.retrieve(retrieveDir, [additionalFields], buObject) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
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 |
1455
+
1456
+ <a name="DataExtension.retrieveChangelog"></a>
1457
+
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,10 +1529,12 @@ 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
 
1184
- ### DataExtension.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1537
+ ### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise.&lt;{metadata:DataExtensionMap, type:string}&gt;</code>
1185
1538
  Retrieves dataExtension metadata in template format.
1186
1539
 
1187
1540
  **Kind**: static method of [<code>DataExtension</code>](#DataExtension)
@@ -1191,7 +1544,7 @@ Retrieves dataExtension metadata in template format.
1191
1544
  | --- | --- | --- |
1192
1545
  | templateDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
1193
1546
  | name | <code>string</code> | name of the metadata item |
1194
- | variables | <code>Util.TemplateMap</code> | variables to be replaced in the metadata |
1547
+ | templateVariables | <code>Util.TemplateMap</code> | variables to be replaced in the metadata |
1195
1548
 
1196
1549
  <a name="DataExtensionField"></a>
1197
1550
 
@@ -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)
@@ -1303,7 +1671,7 @@ DataExtract MetadataType
1303
1671
  * [DataExtract](#DataExtract) ⇐ [<code>MetadataType</code>](#MetadataType)
1304
1672
  * [.retrieve(retrieveDir)](#DataExtract.retrieve) ⇒ <code>Promise.&lt;Object&gt;</code>
1305
1673
  * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ <code>Promise.&lt;Object&gt;</code>
1306
- * [.retrieveAsTemplate(templateDir, name, variables)](#DataExtract.retrieveAsTemplate) ⇒ <code>Promise.&lt;Object&gt;</code>
1674
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ <code>Promise.&lt;Object&gt;</code>
1307
1675
  * [.postRetrieveTasks(fileTransfer)](#DataExtract.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
1308
1676
  * [.create(dataExtract)](#DataExtract.create) ⇒ <code>Promise</code>
1309
1677
  * [.update(dataExtract)](#DataExtract.update) ⇒ <code>Promise</code>
@@ -1332,7 +1700,7 @@ Retrieves Metadata of Data Extract Activity for caching
1332
1700
  **Returns**: <code>Promise.&lt;Object&gt;</code> - Promise of metadata
1333
1701
  <a name="DataExtract.retrieveAsTemplate"></a>
1334
1702
 
1335
- ### DataExtract.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise.&lt;Object&gt;</code>
1703
+ ### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise.&lt;Object&gt;</code>
1336
1704
  Retrieve a specific dataExtract Definition by Name
1337
1705
 
1338
1706
  **Kind**: static method of [<code>DataExtract</code>](#DataExtract)
@@ -1342,7 +1710,7 @@ Retrieve a specific dataExtract Definition by Name
1342
1710
  | --- | --- | --- |
1343
1711
  | templateDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
1344
1712
  | name | <code>String</code> | name of the metadata file |
1345
- | variables | <code>Object</code> | variables to be replaced in the metadata |
1713
+ | templateVariables | <code>Object</code> | variables to be replaced in the metadata |
1346
1714
 
1347
1715
  <a name="DataExtract.postRetrieveTasks"></a>
1348
1716
 
@@ -1609,7 +1977,7 @@ EventDefinition MetadataType
1609
1977
  * [EventDefinition](#EventDefinition) ⇐ [<code>MetadataType</code>](#MetadataType)
1610
1978
  * [.retrieve(retrieveDir)](#EventDefinition.retrieve) ⇒ <code>Promise.&lt;Object&gt;</code>
1611
1979
  * [.retrieveForCache()](#EventDefinition.retrieveForCache) ⇒ <code>Promise.&lt;Object&gt;</code>
1612
- * [.retrieveAsTemplate(templateDir, name, variables)](#EventDefinition.retrieveAsTemplate) ⇒ <code>Promise.&lt;Object&gt;</code>
1980
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#EventDefinition.retrieveAsTemplate) ⇒ <code>Promise.&lt;Object&gt;</code>
1613
1981
  * [.postRetrieveTasks(eventDef)](#EventDefinition.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
1614
1982
  * [.create(EventDefinition)](#EventDefinition.create) ⇒ <code>Promise</code>
1615
1983
  * [.update(EventDefinition)](#EventDefinition.update) ⇒ <code>Promise</code>
@@ -1639,7 +2007,7 @@ Retrieves event definition metadata for caching
1639
2007
  **Returns**: <code>Promise.&lt;Object&gt;</code> - Promise of metadata
1640
2008
  <a name="EventDefinition.retrieveAsTemplate"></a>
1641
2009
 
1642
- ### EventDefinition.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise.&lt;Object&gt;</code>
2010
+ ### EventDefinition.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise.&lt;Object&gt;</code>
1643
2011
  Retrieve a specific Event Definition by Name
1644
2012
 
1645
2013
  **Kind**: static method of [<code>EventDefinition</code>](#EventDefinition)
@@ -1649,7 +2017,7 @@ Retrieve a specific Event Definition by Name
1649
2017
  | --- | --- | --- |
1650
2018
  | templateDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
1651
2019
  | name | <code>String</code> | name of the metadata file |
1652
- | variables | <code>Object</code> | variables to be replaced in the metadata |
2020
+ | templateVariables | <code>Object</code> | variables to be replaced in the metadata |
1653
2021
 
1654
2022
  <a name="EventDefinition.postRetrieveTasks"></a>
1655
2023
 
@@ -1722,7 +2090,7 @@ FileTransfer MetadataType
1722
2090
  * [FileTransfer](#FileTransfer) ⇐ [<code>MetadataType</code>](#MetadataType)
1723
2091
  * [.retrieve(retrieveDir)](#FileTransfer.retrieve) ⇒ <code>Promise</code>
1724
2092
  * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ <code>Promise</code>
1725
- * [.retrieveAsTemplate(templateDir, name, variables)](#FileTransfer.retrieveAsTemplate) ⇒ <code>Promise</code>
2093
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ <code>Promise</code>
1726
2094
  * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
1727
2095
  * [.create(fileTransfer)](#FileTransfer.create) ⇒ <code>Promise</code>
1728
2096
  * [.update(fileTransfer)](#FileTransfer.update) ⇒ <code>Promise</code>
@@ -1751,7 +2119,7 @@ Retrieves Metadata of FileTransfer Activity for caching
1751
2119
  **Returns**: <code>Promise</code> - Promise
1752
2120
  <a name="FileTransfer.retrieveAsTemplate"></a>
1753
2121
 
1754
- ### FileTransfer.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise</code>
2122
+ ### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise</code>
1755
2123
  Retrieve a specific File Transfer Definition by Name
1756
2124
 
1757
2125
  **Kind**: static method of [<code>FileTransfer</code>](#FileTransfer)
@@ -1761,7 +2129,7 @@ Retrieve a specific File Transfer Definition by Name
1761
2129
  | --- | --- | --- |
1762
2130
  | templateDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
1763
2131
  | name | <code>String</code> | name of the metadata file |
1764
- | variables | <code>Object</code> | variables to be replaced in the metadata |
2132
+ | templateVariables | <code>Object</code> | variables to be replaced in the metadata |
1765
2133
 
1766
2134
  <a name="FileTransfer.postRetrieveTasks"></a>
1767
2135
 
@@ -2036,7 +2404,7 @@ ImportFile MetadataType
2036
2404
  * [ImportFile](#ImportFile) ⇐ [<code>MetadataType</code>](#MetadataType)
2037
2405
  * [.retrieve(retrieveDir)](#ImportFile.retrieve) ⇒ <code>Promise</code>
2038
2406
  * [.retrieveForCache()](#ImportFile.retrieveForCache) ⇒ <code>Promise</code>
2039
- * [.retrieveAsTemplate(templateDir, name, variables)](#ImportFile.retrieveAsTemplate) ⇒ <code>Promise</code>
2407
+ * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ <code>Promise</code>
2040
2408
  * [.postRetrieveTasks(importDef)](#ImportFile.postRetrieveTasks) ⇒ <code>Array.&lt;Object&gt;</code>
2041
2409
  * [.create(importFile)](#ImportFile.create) ⇒ <code>Promise</code>
2042
2410
  * [.update(importFile)](#ImportFile.update) ⇒ <code>Promise</code>
@@ -2066,7 +2434,7 @@ Retrieves import definition metadata for caching
2066
2434
  **Returns**: <code>Promise</code> - Promise
2067
2435
  <a name="ImportFile.retrieveAsTemplate"></a>
2068
2436
 
2069
- ### ImportFile.retrieveAsTemplate(templateDir, name, variables) ⇒ <code>Promise</code>
2437
+ ### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise</code>
2070
2438
  Retrieve a specific Import Definition by Name
2071
2439
 
2072
2440
  **Kind**: static method of [<code>ImportFile</code>](#ImportFile)
@@ -2076,7 +2444,7 @@ Retrieve a specific Import Definition by Name
2076
2444
  | --- | --- | --- |
2077
2445
  | templateDir | <code>String</code> | Directory where retrieved metadata directory will be saved |
2078
2446
  | name | <code>String</code> | name of the metadata file |
2079
- | variables | <code>Object</code> | variables to be replaced in the metadata |
2447
+ | templateVariables | <code>Object</code> | variables to be replaced in the metadata |
2080
2448
 
2081
2449
  <a name="ImportFile.postRetrieveTasks"></a>
2082
2450
 
@@ -2235,6 +2603,7 @@ Provides default functionality that can be overwritten by child metadata type cl
2235
2603
  * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ <code>MetadataTypeItem</code>
2236
2604
  * [.overrideKeyWithName(metadata, [warningMsg])](#MetadataType.overrideKeyWithName) ⇒ <code>void</code>
2237
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>
@@ -2382,6 +2751,20 @@ Gets metadata from Marketing Cloud
2382
2751
  | buObject | <code>Util.BuObject</code> | properties for auth |
2383
2752
  | [subType] | <code>string</code> | optionally limit to a single subtype |
2384
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 |
2765
+ | buObject | <code>Util.BuObject</code> | properties for auth |
2766
+ | [subType] | <code>string</code> | optionally limit to a single subtype |
2767
+
2385
2768
  <a name="MetadataType.retrieveForCache"></a>
2386
2769
 
2387
2770
  ### MetadataType.retrieveForCache(buObject, [subType]) ⇒ <code>Promise.&lt;{metadata:MetadataTypeMap, type:string}&gt;</code>
@@ -3293,49 +3676,291 @@ prepares a TSD for deployment
3293
3676
  | --- | --- | --- |
3294
3677
  | metadata | <code>Object</code> | of a single TSD |
3295
3678
 
3296
- <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>
3297
3924
 
3298
- ## Retriever
3299
- 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
3300
3928
 
3301
- **Kind**: global class
3929
+ **Kind**: static method of [<code>Util</code>](#Util)
3930
+ **Returns**: <code>String</code> - unique folderPath/ListName combo of list
3302
3931
 
3303
- * [Retriever](#Retriever)
3304
- * [new Retriever(properties, buObject, client)](#new_Retriever_new)
3305
- * [.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 |
3306
3937
 
3307
- <a name="new_Retriever_new"></a>
3938
+ <a name="Util.retryOnError"></a>
3308
3939
 
3309
- ### new Retriever(properties, buObject, client)
3310
- 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
3311
3942
 
3943
+ **Kind**: static method of [<code>Util</code>](#Util)
3944
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
3312
3945
 
3313
- | Param | Type | Description |
3314
- | --- | --- | --- |
3315
- | properties | <code>Object</code> | General configuration to be used in retrieve |
3316
- | properties.directories | <code>Object</code> | Directories to be used when interacting with FS |
3317
- | buObject | <code>Object</code> | properties for auth |
3318
- | buObject.clientId | <code>String</code> | clientId for FuelSDK auth |
3319
- | buObject.clientSecret | <code>String</code> | clientSecret for FuelSDK auth |
3320
- | buObject.credential | <code>Object</code> | clientId for FuelSDK auth |
3321
- | buObject.tenant | <code>String</code> | v2 Auth Tenant Information |
3322
- | [buObject.mid] | <code>String</code> | ID of Business Unit to authenticate with |
3323
- | [buObject.businessUnit] | <code>String</code> | name of Business Unit to authenticate with |
3324
- | 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 |
3325
3952
 
3326
- <a name="Retriever+retrieve"></a>
3953
+ <a name="Util.execSync"></a>
3327
3954
 
3328
- ### retriever.retrieve(metadataTypes, [name], [templateVariables]) ⇒ <code>Promise</code>
3329
- 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
3330
3957
 
3331
- **Kind**: instance method of [<code>Retriever</code>](#Retriever)
3332
- **Returns**: <code>Promise</code> - Promise
3958
+ **Kind**: static method of [<code>Util</code>](#Util)
3333
3959
 
3334
3960
  | Param | Type | Description |
3335
3961
  | --- | --- | --- |
3336
- | metadataTypes | <code>Array.&lt;String&gt;</code> | String list of metadata types to retrieve |
3337
- | [name] | <code>String</code> | name of Metadata to retrieve (in case of templating) |
3338
- | [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 |
3339
3964
 
3340
3965
  <a name="MetadataTypeDefinitions"></a>
3341
3966
 
@@ -3349,6 +3974,24 @@ Provides access to all metadataType classes
3349
3974
  Provides access to all metadataType classes
3350
3975
 
3351
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
+ ```
3352
3995
  <a name="BusinessUnit"></a>
3353
3996
 
3354
3997
  ## BusinessUnit
@@ -4694,6 +5337,8 @@ Util that contains logger and simple util methods
4694
5337
 
4695
5338
  * [Util](#Util)
4696
5339
  * [.logger](#Util.logger)
5340
+ * [.isTrue(attrValue)](#Util.isTrue) ⇒ <code>boolean</code>
5341
+ * [.isFalse(attrValue)](#Util.isFalse) ⇒ <code>boolean</code>
4697
5342
  * [.getDefaultProperties()](#Util.getDefaultProperties) ⇒ <code>object</code>
4698
5343
  * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ <code>Array.&lt;string&gt;</code>
4699
5344
  * [.checkProperties(properties, [silent])](#Util.checkProperties) ⇒ <code>boolean</code> \| <code>Array.&lt;String&gt;</code>
@@ -4716,6 +5361,30 @@ Util that contains logger and simple util methods
4716
5361
  Logger that creates timestamped log file in 'logs/' directory
4717
5362
 
4718
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
+
4719
5388
  <a name="Util.getDefaultProperties"></a>
4720
5389
 
4721
5390
  ### Util.getDefaultProperties() ⇒ <code>object</code>
@@ -4900,227 +5569,17 @@ helper to run other commands as if run manually by user
4900
5569
  | cmd | <code>string</code> | to be executed command |
4901
5570
  | [args] | <code>Array.&lt;string&gt;</code> | list of arguments |
4902
5571
 
4903
- <a name="createDeltaPkg"></a>
4904
-
4905
- ## createDeltaPkg(argv) ⇒ <code>void</code>
4906
- handler for 'mcdev createDeltaPkg
4907
-
4908
- **Kind**: global function
4909
-
4910
- | Param | Type | Description |
4911
- | --- | --- | --- |
4912
- | argv | <code>Object</code> | yargs parameters |
4913
- | [argv.range] | <code>String</code> | git commit range into deploy directory |
4914
- | [argv.filter] | <code>String</code> | filter file paths that start with any |
4915
- | [argv.skipInteraction] | <code>Boolean</code> | allows to skip interactive wizard |
4916
-
4917
- <a name="_setLoggingLevel"></a>
4918
-
4919
- ## \_setLoggingLevel(argv) ⇒ <code>void</code>
4920
- configures what is displayed in the console
4921
-
4922
- **Kind**: global function
4923
-
4924
- | Param | Type | Description |
4925
- | --- | --- | --- |
4926
- | argv | <code>object</code> | list of command line parameters given by user |
4927
- | [argv.silent] | <code>Boolean</code> | only errors printed to CLI |
4928
- | [argv.verbose] | <code>Boolean</code> | chatty user CLI output |
4929
- | [argv.debug] | <code>Boolean</code> | enables developer output & features |
4930
-
4931
- <a name="selectTypes"></a>
4932
-
4933
- ## selectTypes() ⇒ <code>Promise</code>
4934
- **Kind**: global function
4935
- **Returns**: <code>Promise</code> - .
4936
- <a name="explainTypes"></a>
4937
-
4938
- ## explainTypes() ⇒ <code>Promise</code>
4939
- **Kind**: global function
4940
- **Returns**: <code>Promise</code> - .
4941
- <a name="upgrade"></a>
4942
-
4943
- ## upgrade([skipInteraction]) ⇒ <code>Promise</code>
4944
- **Kind**: global function
4945
- **Returns**: <code>Promise</code> - .
4946
-
4947
- | Param | Type | Description |
4948
- | --- | --- | --- |
4949
- | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
4950
-
4951
- <a name="retrieve"></a>
4952
-
4953
- ## retrieve(businessUnit, [selectedType]) ⇒ <code>Promise.&lt;void&gt;</code>
4954
- Retrieve all metadata from the specified business unit into the local file system.
4955
-
4956
- **Kind**: global function
4957
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
4958
-
4959
- | Param | Type | Description |
4960
- | --- | --- | --- |
4961
- | businessUnit | <code>String</code> | references credentials from properties.json |
4962
- | [selectedType] | <code>String</code> | limit retrieval to given metadata type |
4963
-
4964
- <a name="_retrieveBU"></a>
4965
-
4966
- ## \_retrieveBU(cred, bu, [selectedType]) ⇒ <code>Promise</code>
4967
- helper for retrieve()
4968
-
4969
- **Kind**: global function
4970
- **Returns**: <code>Promise</code> - ensure that BUs are worked on sequentially
4971
-
4972
- | Param | Type | Description |
4973
- | --- | --- | --- |
4974
- | cred | <code>String</code> | name of Credential |
4975
- | bu | <code>String</code> | name of BU |
4976
- | [selectedType] | <code>String</code> | limit retrieval to given metadata type/subtype |
4977
-
4978
- <a name="_deployBU"></a>
4979
-
4980
- ## \_deployBU(cred, bu, [type]) ⇒ <code>Promise</code>
4981
- helper for deploy()
4982
-
4983
- **Kind**: global function
4984
- **Returns**: <code>Promise</code> - ensure that BUs are worked on sequentially
4985
-
4986
- | Param | Type | Description |
4987
- | --- | --- | --- |
4988
- | cred | <code>String</code> | name of Credential |
4989
- | bu | <code>String</code> | name of BU |
4990
- | [type] | <code>String</code> | limit deployment to given metadata type |
4991
-
4992
- <a name="deploy"></a>
4993
-
4994
- ## deploy(businessUnit, [selectedType]) ⇒ <code>Promise.&lt;void&gt;</code>
4995
- Deploys all metadata located in the 'deploy' directory to the specified business unit
4996
-
4997
- **Kind**: global function
4998
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
4999
-
5000
- | Param | Type | Description |
5001
- | --- | --- | --- |
5002
- | businessUnit | <code>String</code> | references credentials from properties.json |
5003
- | [selectedType] | <code>String</code> | limit deployment to given metadata type |
5004
-
5005
- <a name="initProject"></a>
5006
-
5007
- ## initProject([credentialsName], [skipInteraction]) ⇒ <code>Promise.&lt;void&gt;</code>
5008
- Creates template file for properties.json
5009
-
5010
- **Kind**: global function
5011
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5012
-
5013
- | Param | Type | Description |
5014
- | --- | --- | --- |
5015
- | [credentialsName] | <code>string</code> | identifying name of the installed package / project |
5016
- | [skipInteraction] | <code>Boolean</code> \| <code>Object</code> | signals what to insert automatically for things usually asked via wizard |
5017
-
5018
- <a name="findBUs"></a>
5019
-
5020
- ## findBUs(credentialsName) ⇒ <code>Promise.&lt;void&gt;</code>
5021
- Refreshes BU names and ID's from MC instance
5022
-
5023
- **Kind**: global function
5024
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5025
-
5026
- | Param | Type | Description |
5027
- | --- | --- | --- |
5028
- | credentialsName | <code>string</code> | identifying name of the installed package / project |
5029
-
5030
- <a name="document"></a>
5031
-
5032
- ## document(businessUnit, type) ⇒ <code>Promise.&lt;void&gt;</code>
5033
- Creates docs for supported metadata types in Markdown and/or HTML format
5034
-
5035
- **Kind**: global function
5036
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5037
-
5038
- | Param | Type | Description |
5039
- | --- | --- | --- |
5040
- | businessUnit | <code>String</code> | references credentials from properties.json |
5041
- | type | <code>String</code> | metadata type |
5042
-
5043
- <a name="deleteByKey"></a>
5044
-
5045
- ## deleteByKey(businessUnit, type, customerKey) ⇒ <code>Promise.&lt;void&gt;</code>
5046
- Creates docs for supported metadata types in Markdown and/or HTML format
5047
-
5048
- **Kind**: global function
5049
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5050
-
5051
- | Param | Type | Description |
5052
- | --- | --- | --- |
5053
- | businessUnit | <code>String</code> | references credentials from properties.json |
5054
- | type | <code>String</code> | supported metadata type |
5055
- | customerKey | <code>String</code> | Identifier of data extension |
5056
-
5057
- <a name="badKeys"></a>
5058
-
5059
- ## badKeys(businessUnit) ⇒ <code>Promise.&lt;void&gt;</code>
5060
- Converts metadata to legacy format. Output is saved in 'converted' directory
5061
-
5062
- **Kind**: global function
5063
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5064
-
5065
- | Param | Type | Description |
5066
- | --- | --- | --- |
5067
- | businessUnit | <code>String</code> | references credentials from properties.json |
5068
-
5069
- <a name="retrieveAsTemplate"></a>
5070
-
5071
- ## retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
5072
- Retrieve a specific metadata file and templatise.
5073
-
5074
- **Kind**: global function
5075
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5076
-
5077
- | Param | Type | Description |
5078
- | --- | --- | --- |
5079
- | businessUnit | <code>String</code> | references credentials from properties.json |
5080
- | selectedType | <code>String</code> | supported metadata type |
5081
- | name | <code>String</code> | name of the metadata |
5082
- | market | <code>String</code> | market which should be used to revert template |
5083
-
5084
- <a name="buildDefinition"></a>
5085
-
5086
- ## buildDefinition(businessUnit, type, name, market) ⇒ <code>Promise.&lt;void&gt;</code>
5087
- Build a specific metadata file based on a template.
5088
-
5089
- **Kind**: global function
5090
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5091
-
5092
- | Param | Type | Description |
5093
- | --- | --- | --- |
5094
- | businessUnit | <code>String</code> | references credentials from properties.json |
5095
- | type | <code>String</code> | supported metadata type |
5096
- | name | <code>String</code> | name of the metadata |
5097
- | market | <code>String</code> | market localizations |
5098
-
5099
- <a name="_checkMarket"></a>
5100
-
5101
- ## \_checkMarket(market) ⇒ <code>Boolean</code>
5102
- check if a market name exists in current mcdev config
5103
-
5104
- **Kind**: global function
5105
- **Returns**: <code>Boolean</code> - found market or not
5106
-
5107
- | Param | Type | Description |
5108
- | --- | --- | --- |
5109
- | market | <code>String</code> | market localizations |
5110
-
5111
- <a name="buildDefinitionBulk"></a>
5112
-
5113
- ## buildDefinitionBulk(listName, type, name) ⇒ <code>Promise.&lt;void&gt;</code>
5114
- Build a specific metadata file based on a template using a list of bu-market combos
5572
+ <a name="getUserName"></a>
5115
5573
 
5574
+ ## getUserName(userList, item, fieldname) ⇒ <code>string</code>
5116
5575
  **Kind**: global function
5117
- **Returns**: <code>Promise.&lt;void&gt;</code> - -
5576
+ **Returns**: <code>string</code> - username or user id or 'n/a'
5118
5577
 
5119
5578
  | Param | Type | Description |
5120
5579
  | --- | --- | --- |
5121
- | listName | <code>String</code> | name of list of BU-market combos |
5122
- | type | <code>String</code> | supported metadata type |
5123
- | 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 |
5124
5583
 
5125
5584
  <a name="createNewLoggerTransport"></a>
5126
5585
 
@@ -5254,15 +5713,17 @@ REST format
5254
5713
  | Name | Type | Description |
5255
5714
  | --- | --- | --- |
5256
5715
  | [ObjectID] | <code>string</code> | id |
5257
- | [CustomerKey] | <code>string</code> | key |
5716
+ | [CustomerKey] | <code>string</code> | key in format [DEkey].[FieldName] |
5258
5717
  | [DataExtension] | <code>Object</code> | - |
5259
5718
  | DataExtension.CustomerKey | <code>string</code> | key of DE |
5260
- | Name | <code>string</code> | name |
5261
- | 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 |
5262
5722
  | IsRequired | <code>&#x27;true&#x27;</code> \| <code>&#x27;false&#x27;</code> | - |
5263
5723
  | IsPrimaryKey | <code>&#x27;true&#x27;</code> \| <code>&#x27;false&#x27;</code> | - |
5264
5724
  | Ordinal | <code>string</code> | 1, 2, 3, ... |
5265
- | 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", ... |
5266
5727
 
5267
5728
  <a name="MultiMetadataTypeMap"></a>
5268
5729