From ca0f3f7017f680fb456beacce9670abd22f3eda0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Mon, 25 Mar 2024 11:13:27 +0100 Subject: [PATCH 1/5] #1238: find contentblock by id --- docs/dist/documentation.md | 11894 ++++++++++++++++++++-------- lib/cli.js | 32 +- lib/index.js | 43 + lib/metadataTypes/Asset.js | 54 + lib/metadataTypes/MetadataType.js | 11 + 5 files changed, 8755 insertions(+), 3279 deletions(-) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 656712476..7ca0015c9 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -132,6 +132,16 @@ Provides default functionality that can be overwritten by child metadata type cl
Retriever

Retrieves metadata from a business unit and saves it to the local filesystem.

+
Mcdev
+

main class

+
+
AssetMetadataType
+

FileTransfer MetadataType

+
+
MetadataType
+

MetadataType class that gets extended by their specific metadata type class. +Provides default functionality that can be overwritten by child metadata type classes

+
## Constants @@ -242,6 +252,21 @@ helper for DataExtension.#fixShared_item
setupSDK(sessionKey, authObject)SDK

Returns an SDK instance to be used for API calls

+
csvToArray(csv)Array.<string>
+

helper to convert CSVs into an array. if only one value was given, it's also returned as an array

+
+
Mcdev.(methodName, businessUnit, [selectedType], [keys])Promise.<Object.<string, Array.<string>>>
+

run a method across BUs

+
+
Mcdev.(methodName, cred, bu, [type], keyArr)Promise.<Array.<string>>
+

helper for Mcdev.#runMethod

+
+
Mcdev.(selectedType, buObject)Array.<string>
+

helper for Mcdev.#runOnBU

+
+
Mcdev.(cred, bu, type, [keyArr])Promise.<Array.<string>>
+

Updates the key to match the name field

+
## Typedefs @@ -533,6 +558,34 @@ main class * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> + * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> + * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> + * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> + * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> + * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> + * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> + * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> + * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> + * [.version()](#Mcdev.version) ⇒ string + * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void + * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void + * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void + * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> + * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise + * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> + * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> + * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> + * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> + * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> + * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> + * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> + * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> + * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> + * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> @@ -703,6 +756,20 @@ deletes metadata from MC instance by key | type | string | supported metadata type | | customerKey | string | Identifier of metadata | + + +### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| id | string | Identifier of metadata | + ### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> @@ -856,1630 +923,1681 @@ Updates the key to match the name field | selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | | [keys] | Array.<string> | customerkey of the metadata | - + -## Asset ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +### Mcdev.version() ⇒ string +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: string - current version of mcdev + -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void +helper method to use unattended mode when including mcdev as a package -* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void +**Kind**: static method of [Mcdev](#Mcdev) - +| Param | Type | Description | +| --- | --- | --- | +| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset + -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +### Mcdev.setLoggingLevel(argv) ⇒ void +configures what is displayed in the console + +**Kind**: static method of [Mcdev](#Mcdev) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | +| argv | object | list of command line parameters given by user | +| [argv.silent] | boolean | only errors printed to CLI | +| [argv.verbose] | boolean | chatty user CLI output | +| [argv.debug] | boolean | enables developer output & features | - + -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching +### Mcdev.setOptions(argv) ⇒ void +allows setting system wide / command related options -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [Mcdev](#Mcdev) | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| argv | object | list of command line parameters given by user | - + -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating +### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> +handler for 'mcdev createDeltaPkg -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | +| argv | object | yargs parameters | +| [argv.range] | string | git commit range into deploy directory | +| [argv.filter] | string | filter file paths that start with any | +| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | - + -### Asset.create(metadata) ⇒ Promise -Creates a single asset +### Mcdev.selectTypes() ⇒ Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise - . + -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +### Mcdev.explainTypes() ⇒ Array.<object> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Array.<object> - list of supported types with their apiNames + + +### Mcdev.upgrade() ⇒ Promise.<boolean> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - success flag + + +### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> +Retrieve all metadata from the specified business unit into the local file system. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<object> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | +| [keys] | Array.<string> | limit retrieval to given metadata key | +| [changelogOnly] | boolean | skip saving, only create json in memory | - + -### Asset.update(metadata) ⇒ Promise -Updates a single asset +### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> +Deploys all metadata located in the 'deploy' directory to the specified business unit -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | +| [keyArr] | Array.<string> | limit deployment to given metadata keys | - + -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type +### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> +Creates template file for properties.json -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | +| [credentialsName] | string | identifying name of the installed package / project | - + -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset +### Mcdev.joinProject() ⇒ Promise.<void> +Clones an existing project from git repository and installs it -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + + +### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> +Refreshes BU names and ID's from MC instance + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| credentialsName | string | identifying name of the installed package / project | - + -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json +### Mcdev.document(businessUnit, type) ⇒ Promise.<void> +Creates docs for supported metadata types in Markdown and/or HTML format -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Mcdev](#Mcdev) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | - - +| businessUnit | string | references credentials from properties.json | +| type | string | metadata type | -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it + -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - - - -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> +deletes metadata from MC instance by key -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - true if successful, false otherwise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| customerKey | string | Identifier of metadata | - + -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| id | string | Identifier of metadata | - + -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment +### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> +ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | +| businessUnit | string | references credentials from properties.json | +| type | string | references credentials from properties.json | +| [keyArr] | Array.<string> | metadata keys | - + -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType +### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> +Converts metadata to legacy format. Output is saved in 'converted' directory -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | +| businessUnit | string | references credentials from properties.json | - + -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve a specific metadata file and templatise. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | Array.<string> | name of the metadata | +| market | string | market which should be used to revert template | - + -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Build a template based on a list of metadata files in the retrieve folder. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | +| market | string | market localizations | -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - + -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> +Build a specific metadata file based on a template. -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Mcdev](#Mcdev) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | string | name of the metadata | +| market | string | market localizations | - + -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> +Build a specific metadata file based on a template using a list of bu-market combos -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - +| listName | string | name of list of BU-market combos | +| type | string | supported metadata type | +| name | string | name of the metadata | -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy + -**Kind**: static method of [Asset](#Asset) +### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted +### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Schedule an item (shortcut for execute --schedule) -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | - + -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) +### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Start/execute an item + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys | Param | Type | Description | | --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | - + -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending +### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +pause an item -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | - + -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes +### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Updates the key to match the name field -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| businessUnit | string | name of BU | +| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | - + -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure +## Asset ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | +* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - + -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset **Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching **Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating **Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - + -## AttributeGroup ⇐ [MetadataType](#MetadataType) -AttributeGroup MetadataType +### Asset.create(metadata) ⇒ Promise +Creates a single asset -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise -* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | - + -### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups. +### Asset.update(metadata) ⇒ Promise +Updates a single asset -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups for caching. +| metadata | TYPE.AssetItem | a single asset | -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | - + -## AttributeSet ⇐ [MetadataType](#MetadataType) -AttributeSet MetadataType +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise -* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> - * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> +| Param | Type | Description | +| --- | --- | --- | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set Definitions. +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set definitions for caching. +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> -used to identify updated shared data extensions that are used in attributeSets. -helper for DataExtension.#fixShared_onBU +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file -| Param | Type | Description | -| --- | --- | --- | -| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | -| fixShared_fields | object | DataExtensionField.fixShared_fields | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - + -### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| metadata | TYPE.AssetItem | a single asset | - + -### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - - -### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> -helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Array.<object> - all system value definitions - + -## Automation ⇐ [MetadataType](#MetadataType) -Automation MetadataType +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise -* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> - * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null - * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> - * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void - * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> - * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void - * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> - * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> - * [.create(metadata)](#Automation.create) ⇒ Promise - * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> - * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean - * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Automation.setFolderPath) - * [.setFolderId(metadata)](#Automation.setFolderId) - * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap - * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string - * [.document([metadata])](#Automation.document) ⇒ Promise.<void> - * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| extendedSubType | string | webpage, htmlblock, etc | - + -### Automation.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [Automation](#Automation) -**Returns**: null - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - -### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves automation metadata for caching +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> -Retrieve a specific Automation Definition by Name +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void -manages post retrieve steps +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationItem \| void - parsed item +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | a single automation | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> -Deploys automation - the saved file is the original one due to large differences required for deployment +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMap> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationMap | metadata mapped by their keyField | -| targetBU | string | name/shorthand of target businessUnit for mapping | -| retrieveDir | string | directory where metadata after deploy should be saved | - - +| metadata | TYPE.AssetItem | a single asset definition | -### Automation.create(metadata) ⇒ Promise -Creates a single automation + -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### Automation.update(metadata, metadataBefore) ⇒ Promise -Updates a single automation +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | -| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> -Gets executed before deploying metadata +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItem> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | metadata mapped by their keyField | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### Automation.validateDeployMetadata(metadata) ⇒ boolean -Validates the automation to be sure it can be deployed. -Whitelisted Activites are deployed but require configuration +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - result if automation can be deployed based on steps +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single automation record | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | - + -### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Automation.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| customerKey | string | Identifier of data extension | - + -### Automation.setFolderId(metadata) -automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| customerKey | string | Identifier of metadata item | - + -### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap -Builds a schedule object to be used for scheduling an automation -based on combination of ical string and start/end dates. +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found | Param | Type | Description | | --- | --- | --- | -| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | +| id | string | Identifier of metadata | - + -### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string -used to convert dates to the system timezone required for startDate +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset -**Kind**: static method of [Automation](#Automation) -**Returns**: string - date in server +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | -| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | -| [offsetInput] | string | timzone difference (+02:00) | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### Automation.document([metadata]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - + -### Automation.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### Asset.create(metadata) ⇒ Promise +Creates a single asset -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - deletion success status +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.AssetItem | a single asset | - + -### Automation.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### Asset.update(metadata) ⇒ Promise +Updates a single asset -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadata | TYPE.AssetItem | a single asset | - + -## Campaign ⇐ [MetadataType](#MetadataType) -Campaign MetadataType +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise -* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | - + -### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Parses campaign asset response body and returns metadata entries mapped to their id +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | folder where to save | -| campaignId | string | of camapaign to retrieve | -| name | string | of camapaign for saving | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | - + -## ContentArea ⇐ [MetadataType](#MetadataType) -ContentArea MetadataType +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file -* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.setFolderPath(metadata)](#ContentArea.setFolderPath) - * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - + -### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.AssetItem | a single asset | - + -### ContentArea.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [ContentArea](#ContentArea) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: TYPE.MetadataTypeItem - parsed item +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -## DataExtension ⇐ [MetadataType](#MetadataType) -DataExtension MetadataType +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc -* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) - * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.create(metadata)](#DataExtension.create) ⇒ Promise - * [.update(metadata)](#DataExtension.update) ⇒ Promise - * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void - * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> - * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem - * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> - * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> - * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> - * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.setFolderPath(metadata)](#DataExtension.setFolderPath) - * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> +| Param | Type | Description | +| --- | --- | --- | +| extendedSubType | string | webpage, htmlblock, etc | - + -### DataExtension.upsert(metadataMap) ⇒ Promise -Upserts dataExtensions after retrieving them from source and target to compare -if create or update operation is needed. +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### DataExtension.create(metadata) ⇒ Promise -Create a single dataExtension. Also creates their columns in 'dataExtension.columns' +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### DataExtension.update(metadata) ⇒ Promise -Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | -| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [_] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - +| metadata | TYPE.AssetItem | a single asset definition | -### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> -get shared dataExtensions from parent BU and merge them into the cache -helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve + -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem -manages post retrieve steps +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: TYPE.DataExtensionItem - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single dataExtension | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> -prepares a DataExtension for deployment +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single data Extension | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | - + -### DataExtension.document([metadataMap]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | +| keyArr | Array.<string> | customerkey of the metadata | - + -### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> +### Asset.postDeleteTasks(customerKey) ⇒ void clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - promise +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of metadata item | - - -### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise - + -### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata in template format. +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata item | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| id | string | Identifier of metadata | - + -### DataExtension.setFolderPath(metadata) -dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve -it also sets the content type which is basically the subtype +## AttributeGroup ⇐ [MetadataType](#MetadataType) +AttributeGroup MetadataType -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + + + +### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups. + +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups for caching. -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -## DataExtensionField ⇐ [MetadataType](#MetadataType) -DataExtensionField MetadataType +## AttributeSet ⇐ [MetadataType](#MetadataType) +AttributeSet MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> - * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean - * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem - * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> - * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean - * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void +* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> + * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> - + -### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records and saves it to disk +### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set Definitions. -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records for caching +### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set definitions for caching. -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> +used to identify updated shared data extensions that are used in attributeSets. +helper for DataExtension.#fixShared_onBU + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs | Param | Type | Description | | --- | --- | --- | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | +| fixShared_fields | object | DataExtensionField.fixShared_fields | - + -### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> -helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array +### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### DataExtensionField.sortDeFields(a, b) ⇒ boolean -sorting method to ensure `Ordinal` is respected +### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - sorting based on Ordinal +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| a | TYPE.DataExtensionFieldItem | - | -| b | TYPE.DataExtensionFieldItem | - | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem -manages post retrieve steps +### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> +helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: TYPE.DataExtensionFieldItem - metadata +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Array.<object> - all system value definitions + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionFieldItem | a single item | -| forDataExtension | boolean | when used by DataExtension class we remove more fields | +## Automation ⇐ [MetadataType](#MetadataType) +Automation MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> -Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. -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 +* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> + * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null + * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> + * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void + * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> + * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void + * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> + * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> + * [.create(metadata)](#Automation.create) ⇒ Promise + * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> + * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean + * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Automation.setFolderPath) + * [.setFolderId(metadata)](#Automation.setFolderId) + * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap + * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string + * [.document([metadata])](#Automation.document) ⇒ Promise.<void> + * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update + + +### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | -| deKey | string | external/customer key of Data Extension | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Automation.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Automation](#Automation) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| ex | Error | exception | +| id | string | id or key of item | - + -### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean -Delete a data extension from the specified business unit +### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - deletion success flag +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | +### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves automation metadata for caching - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + -### DataExtensionField.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> +Retrieve a specific Automation Definition by Name -**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) -DataExtensionTemplate MetadataType +### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void +manages post retrieve steps -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationItem \| void - parsed item -### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | a single automation | -**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| keyArr | Array.<string> | customerkey of the metadata | - + -## DataExtract ⇐ [MetadataType](#MetadataType) -DataExtract MetadataType +### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> \| void - formatted Error Message -* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(dataExtract)](#DataExtract.create) ⇒ Promise - * [.update(dataExtract)](#DataExtract.update) ⇒ Promise - * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| ex | object | response payload from REST API | - + -### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity. -Endpoint /automation/v1/dataextracts/ returns all Data Extracts +### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching +| keyArr | Array.<string> | customerkey of the metadata | -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific dataExtract Definition by Name +### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> +Deploys automation - the saved file is the original one due to large differences required for deployment -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMap> - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.AutomationMap | metadata mapped by their keyField | +| targetBU | string | name/shorthand of target businessUnit for mapping | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### DataExtract.create(dataExtract) ⇒ Promise -Creates a single Data Extract +### Automation.create(metadata) ⇒ Promise +Creates a single automation -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Automation](#Automation) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| metadata | TYPE.AutomationItem | single metadata entry | - + -### DataExtract.update(dataExtract) ⇒ Promise -Updates a single Data Extract +### Automation.update(metadata, metadataBefore) ⇒ Promise +Updates a single automation -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Automation](#Automation) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| metadata | TYPE.AutomationItem | single metadata entry | +| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | - + -### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a dataExtract for deployment +### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> +Gets executed before deploying metadata -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | +| metadata | TYPE.AutomationItem | metadata mapped by their keyField | - + -### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Automation.validateDeployMetadata(metadata) ⇒ boolean +Validates the automation to be sure it can be deployed. +Whitelisted Activites are deployed but require configuration -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - result if automation can be deployed based on steps | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.AutomationItem | single automation record | - + -### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | +| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | - + -## DataExtractType ⇐ [MetadataType](#MetadataType) -DataExtractType MetadataType -Only for Caching No retrieve/upsert is required -as this is a configuration in the EID +### Automation.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Automation](#Automation) -* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type. +### Automation.setFolderId(metadata) +automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type for caching. +### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap +Builds a schedule object to be used for scheduling an automation +based on combination of ical string and start/end dates. -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) -## Discovery ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +| Param | Type | Description | +| --- | --- | --- | +| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - + -### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves API endpoint -documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm +### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string +used to convert dates to the system timezone required for startDate -**Kind**: static method of [Discovery](#Discovery) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Automation](#Automation) +**Returns**: string - date in server | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | not used | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | +| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | +| [offsetInput] | string | timzone difference (+02:00) | - + -## Email ⇐ [MetadataType](#MetadataType) -Email MetadataType +### Automation.document([metadata]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - -* [Email](#Email) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | - + -### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### Automation.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| customerKey | string | Identifier of data extension | - + -### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Automation.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [Email](#Email) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| customerKey | string | Identifier of metadata item | - + -## EmailSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType +## Campaign ⇐ [MetadataType](#MetadataType) +Campaign MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadataItem)](#EmailSend.update) ⇒ Promise - * [.create(metadataItem)](#EmailSend.create) ⇒ Promise - * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> - * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -2488,564 +2606,498 @@ Retrieves SOAP based metadata of metadata type into local filesystem. executes c | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### EmailSend.update(metadataItem) ⇒ Promise -Updates a single item +### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Parses campaign asset response body and returns metadata entries mapped to their id + +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object | Param | Type | Description | | --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | +| retrieveDir | string | folder where to save | +| campaignId | string | of camapaign to retrieve | +| name | string | of camapaign for saving | - + -### EmailSend.create(metadataItem) ⇒ Promise -Creates a single item +## ContentArea ⇐ [MetadataType](#MetadataType) +ContentArea MetadataType -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | +* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.setFolderPath(metadata)](#ContentArea.setFolderPath) + * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a single item for deployment +### ContentArea.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +**Kind**: static method of [ContentArea](#ContentArea) | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: TYPE.MetadataTypeItem - parsed item | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| metadata | TYPE.MetadataTypeItem | a single item | - + -## Event ⇐ [MetadataType](#MetadataType) -Event MetadataType +## DataExtension ⇐ [MetadataType](#MetadataType) +DataExtension MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Event](#Event) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.create(metadata)](#Event.create) ⇒ Promise - * [.update(metadataEntry)](#Event.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem +* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) + * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.create(metadata)](#DataExtension.create) ⇒ Promise + * [.update(metadata)](#DataExtension.update) ⇒ Promise + * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void + * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> + * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem + * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> + * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> + * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> + * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.setFolderPath(metadata)](#DataExtension.setFolderPath) + * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> - + -### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Event Definition. -Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. -Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} +### DataExtension.upsert(metadataMap) ⇒ Promise +Upserts dataExtensions after retrieving them from source and target to compare +if create or update operation is needed. -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Event Definition by Name +### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### DataExtension.create(metadata) ⇒ Promise +Create a single dataExtension. Also creates their columns in 'dataExtension.columns' -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | +| metadata | TYPE.DataExtensionItem | single metadata entry | - + -### Event.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### DataExtension.update(metadata) ⇒ Promise +Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| metadata | TYPE.DataExtensionItem | single metadata entry | - + -### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy +### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | +| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### Event.create(metadata) ⇒ Promise -Creates a single Event Definition +### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single Event Definition | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Event.update(metadataEntry) ⇒ Promise -Updates a single Event Definition (using PUT method since PATCH isn't supported) +### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> +get shared dataExtensions from parent BU and merge them into the cache +helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | - - +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment + -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed version +### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval + +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single eventDefinition | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem +manages post retrieve steps -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: TYPE.DataExtensionItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single event definition | +| metadata | TYPE.DataExtensionItem | a single dataExtension | - + -## FtpLocation ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> +prepares a DataExtension for deployment -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE -* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.DataExtensionItem | a single data Extension | - + -### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FtpLocation -Endpoint /automation/v1/ftplocations/ return all FtpLocations +### DataExtension.document([metadataMap]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. +| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -## FileTransfer ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<boolean> - deletion success status -* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise - * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise - * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | - + -### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity. -Endpoint /automation/v1/filetransfers/ returns all File Transfers +### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> +clean up after deleting a metadata item -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| customerKey | string | Identifier of metadata item | - + -### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity for caching +### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise + -### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific File Transfer Definition by Name +### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata in template format. -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | +| name | string | name of the metadata item | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### FileTransfer.create(fileTransfer) ⇒ Promise -Creates a single File Transfer +### DataExtension.setFolderPath(metadata) +dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve +it also sets the content type which is basically the subtype -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### FileTransfer.update(fileTransfer) ⇒ Promise -Updates a single File Transfer +### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| keyArr | Array.<string> | customerkey of the metadata | - + -### FileTransfer.preDeployTasks(metadata) ⇒ Promise -prepares a fileTransfer for deployment +## DataExtensionField ⇐ [MetadataType](#MetadataType) +DataExtensionField MetadataType -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> + * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean + * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem + * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> + * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> + * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean + * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void - + -### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records and saves it to disk -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records for caching -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## Filter ⇐ [MetadataType](#MetadataType) -Filter MetadataType +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - + -### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Filter. -Endpoint /automation/v1/filters/ returns all Filters, -but only with some of the fields. So it is needed to loop over -Filters with the endpoint /automation/v1/filters/{id} +### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> +helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array -**Kind**: static method of [Filter](#Filter) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | - + -## Folder ⇐ [MetadataType](#MetadataType) -Folder MetadataType +### DataExtensionField.sortDeFields(a, b) ⇒ boolean +sorting method to ensure `Ordinal` is respected -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - sorting based on Ordinal -* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise - * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise - * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> - * [.create(metadataEntry)](#Folder.create) ⇒ Promise - * [.update(metadataEntry)](#Folder.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> - * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> +| Param | Type | Description | +| --- | --- | --- | +| a | TYPE.DataExtensionFieldItem | - | +| b | TYPE.DataExtensionFieldItem | - | - + -### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise -Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata +### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem +manages post retrieve steps -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: TYPE.DataExtensionFieldItem - metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | content type of folder | -| [key] | string | customer key of single item to retrieve | - - - -### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise -Retrieves folder metadata for caching - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | content type of folder | - - - -### Folder.upsert(metadata) ⇒ Promise.<object> -Folder upsert (copied from Metadata Upsert), after retrieving from target -and comparing to check if create or update operation is needed. -Copied due to having a dependency on itself, meaning the created need to be serial - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | - - - -### Folder.create(metadataEntry) ⇒ Promise -creates a folder based on metatadata - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | +| metadata | TYPE.DataExtensionFieldItem | a single item | +| forDataExtension | boolean | when used by DataExtension class we remove more fields | - + -### Folder.update(metadataEntry) ⇒ Promise -Updates a single Folder. +### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> +Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. +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 -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | +| deKey | string | external/customer key of Data Extension | - + -### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a folder for deployment +### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single folder definition | +| customerKey | string | Identifier of data extension | - + -### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean +Delete a data extension from the specified business unit -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - deletion success flag | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| customerKey | string | Identifier of metadata | +| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | - + -### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> -Helper to retrieve the folders as promise +### DataExtensionField.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - soap object +**Kind**: static method of [DataExtensionField](#DataExtensionField) | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | -| [contentTypeList] | Array.<string> | content type of folder | - - - -### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +| customerKey | string | Identifier of metadata item | -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeItem - cloned metadata + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | +## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) +DataExtensionTemplate MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> -Helper for writing Metadata to disk, used for Retrieve and deploy +### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata +**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| results | object | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| mid | number | current mid for this credential / business unit | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -## ImportFile ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## DataExtract ⇐ [MetadataType](#MetadataType) +DataExtract MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(importFile)](#ImportFile.create) ⇒ Promise - * [.update(importFile)](#ImportFile.update) ⇒ Promise - * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> +* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(dataExtract)](#DataExtract.create) ⇒ Promise + * [.update(dataExtract)](#DataExtract.update) ⇒ Promise + * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> - + -### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Import File. -Endpoint /automation/v1/imports/ return all Import Files with all details. -Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} +### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity. +Endpoint /automation/v1/dataextracts/ returns all Data Extracts -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -3054,27 +3106,20 @@ Currently it is not needed to loop over Imports with endpoint /automation/v1/imp | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching - +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Import Definition by Name +### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific dataExtract Definition by Name -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -3082,111 +3127,87 @@ Retrieve a specific Import Definition by Name | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### ImportFile.create(importFile) ⇒ Promise -Creates a single Import File +### DataExtract.create(dataExtract) ⇒ Promise +Creates a single Data Extract -**Kind**: static method of [ImportFile](#ImportFile) +**Kind**: static method of [DataExtract](#DataExtract) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -### ImportFile.update(importFile) ⇒ Promise -Updates a single Import File +### DataExtract.update(dataExtract) ⇒ Promise +Updates a single Data Extract -**Kind**: static method of [ImportFile](#ImportFile) +**Kind**: static method of [DataExtract](#DataExtract) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | - - - -### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -### ImportFile.preDeployTasks(metadata) ⇒ Promise -prepares a import definition for deployment +### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a dataExtract for deployment -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single importDef | +| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | - + -### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem manages post retrieve steps -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> +### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [ImportFile](#ImportFile) +**Kind**: static method of [DataExtract](#DataExtract) **Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -## Journey ⇐ [MetadataType](#MetadataType) -Journey MetadataType -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -id: A unique id of the journey assigned by the journey’s API during its creation -key: A unique id of the journey within the MID. Can be generated by the developer -definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId +## DataExtractType ⇐ [MetadataType](#MetadataType) +DataExtractType MetadataType +Only for Caching No retrieve/upsert is required +as this is a configuration in the EID **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.update(metadata)](#Journey.update) ⇒ Promise - * [.create(metadata)](#Journey.create) ⇒ Promise - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) - * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' +* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Journey +### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type. -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -3195,62 +3216,70 @@ Retrieves Metadata of Journey | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### Journey.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type for caching. -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | +## Discovery ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy +### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves API endpoint +documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [Discovery](#Discovery) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | not used | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Journey.update(metadata) ⇒ Promise -Updates a single item +## Email ⇐ [MetadataType](#MetadataType) +Email MetadataType -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +* [Email](#Email) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Journey.create(metadata) ⇒ Promise -Creates a single item +### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise +**Kind**: static method of [Email](#Email) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [Journey](#Journey) +**Kind**: static method of [Email](#Email) **Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | @@ -3260,3056 +3289,8294 @@ Helper for writing Metadata to disk, used for Retrieve and deploy | [overrideType] | string | for use when there is a subtype (such as folder-queries) | | [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Journey.\_postRetrieveTasksBulk(metadataMap) -helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and +### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Journey](#Journey) +**Kind**: static method of [Email](#Email) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | +| metadata | TYPE.MetadataTypeItem | a single query | - + -### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +## EmailSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadataItem)](#EmailSend.update) ⇒ Promise + * [.create(metadataItem)](#EmailSend.create) ⇒ Promise + * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> + * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### EmailSend.update(metadataItem) ⇒ Promise +Updates a single item -**Kind**: static method of [Journey](#Journey) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -## List ⇐ [MetadataType](#MetadataType) -List MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [List](#List) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem +| metadataItem | TYPE.MetadataTypeItem | a single item | - + -### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Lists +### EmailSend.create(metadataItem) ⇒ Promise +Creates a single item -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +| metadataItem | TYPE.MetadataTypeItem | a single item | -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### List.deleteByKey(customerKey) ⇒ Promise.<boolean> +### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [List](#List) +**Kind**: static method of [EmailSend](#EmailSend) **Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a single item for deployment -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| list | TYPE.MetadataTypeItem | a single list | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single list definition | -| [parseForCache] | boolean | if set to true, the Category ID is kept | +| metadata | TYPE.MetadataTypeItem | a single query | - + -## MetadataType -MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes +## Event ⇐ [MetadataType](#MetadataType) +Event MetadataType **Kind**: global class +**Extends**: [MetadataType](#MetadataType) -* [MetadataType](#MetadataType) - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - - - -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - +* [Event](#Event) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.create(metadata)](#Event.create) ⇒ Promise + * [.update(metadataEntry)](#Event.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - + -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Event Definition. +Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. +Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. +### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Event Definition by Name + +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | - + -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### Event.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| key | string | Identifier of item | - + -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### Event.create(metadata) ⇒ Promise +Creates a single Event Definition -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Event](#Event) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| metadata | TYPE.MetadataTypeItem | a single Event Definition | - + -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id +### Event.update(metadataEntry) ⇒ Promise +Updates a single Event Definition (using PUT method since PATCH isn't supported) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [Event](#Event) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | - + -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed version | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | +| metadata | TYPE.MetadataTypeItem | a single eventDefinition | - + -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single event definition | - + -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy +## FtpLocation ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FtpLocation +Endpoint /automation/v1/ftplocations/ return all FtpLocations -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +## FileTransfer ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise + * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise + * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + + +### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity. +Endpoint /automation/v1/filetransfers/ returns all File Transfers + +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific File Transfer Definition by Name + +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where retrieved metadata directory will be saved | | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | - + -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name +### FileTransfer.create(fileTransfer) ⇒ Promise +Creates a single File Transfer -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### FileTransfer.update(fileTransfer) ⇒ Promise +Updates a single File Transfer -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata +### FileTransfer.preDeployTasks(metadata) ⇒ Promise +prepares a fileTransfer for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type +### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type +### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | +| customerKey | string | Identifier of data extension | - + -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type +## Filter ⇐ [MetadataType](#MetadataType) +Filter MetadataType -**Kind**: static method of [MetadataType](#MetadataType) - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type +### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Filter. +Endpoint /automation/v1/filters/ returns all Filters, +but only with some of the fields. So it is needed to loop over +Filters with the endpoint /automation/v1/filters/{id} -**Kind**: static method of [MetadataType](#MetadataType) - +**Kind**: static method of [Filter](#Filter) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +## Folder ⇐ [MetadataType](#MetadataType) +Folder MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | +* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise + * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise + * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> + * [.create(metadataEntry)](#Folder.create) ⇒ Promise + * [.update(metadataEntry)](#Folder.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> + * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> - + -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise +Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | content type of folder | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. +### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise +Retrieves folder metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | content type of folder | - + -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### Folder.upsert(metadata) ⇒ Promise.<object> +Folder upsert (copied from Metadata Upsert), after retrieving from target +and comparing to check if create or update operation is needed. +Copied due to having a dependency on itself, meaning the created need to be serial -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | - + -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST +### Folder.create(metadataEntry) ⇒ Promise +creates a folder based on metatadata -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | +| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | - + -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) +### Folder.update(metadataEntry) ⇒ Promise +Updates a single Folder. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | | metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - - + -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) +### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a folder for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.MetadataTypeItem | a single folder definition | - + -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) +### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending + +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) +### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> +Helper to retrieve the folders as promise -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - soap object | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | +| [contentTypeList] | Array.<string> | content type of folder | - + -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | - + -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types +### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | +| results | object | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| mid | number | current mid for this credential / business unit | - + -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +## ImportFile ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) - +* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(importFile)](#ImportFile.create) ⇒ Promise + * [.update(importFile)](#ImportFile.update) ⇒ Promise + * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - +### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Import File. +Endpoint /automation/v1/imports/ return all Import Files with all details. +Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} + +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. +### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. +### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Import Definition by Name -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | | --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) +### ImportFile.create(importFile) ⇒ Promise +Creates a single Import File -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### ImportFile.update(importFile) ⇒ Promise +Updates a single Import File -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. +### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - + -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable +### ImportFile.preDeployTasks(metadata) ⇒ Promise +prepares a import definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.MetadataTypeItem | a single importDef | - + -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable +### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template +### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - +| customerKey | string | Identifier of data extension | -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata + -**Kind**: static method of [MetadataType](#MetadataType) +## Journey ⇐ [MetadataType](#MetadataType) +Journey MetadataType +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +id: A unique id of the journey assigned by the journey’s API during its creation +key: A unique id of the journey within the MID. Can be generated by the developer +definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) - +* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.update(metadata)](#Journey.update) ⇒ Promise + * [.create(metadata)](#Journey.create) ⇒ Promise + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) + * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving +### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Journey + +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in +### Journey.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| key | string | Identifier of item | - + -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values +### Journey.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names +### Journey.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) +### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### Journey.\_postRetrieveTasksBulk(metadataMap) +helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Journey](#Journey) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | - + -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes +### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure +### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | +| metadata | TYPE.MetadataTypeItem | of a single TSD | - + -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) +### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [Journey](#Journey) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages +## List ⇐ [MetadataType](#MetadataType) +List MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | +* [List](#List) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem - + -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk +### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Lists -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [List](#List) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.deleteByKey(customerKey) ⇒ boolean +### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [List](#List) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### List.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status +**Kind**: static method of [List](#List) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item +### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | +| list | TYPE.MetadataTypeItem | a single list | - + -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - +| metadata | TYPE.MetadataTypeItem | a single list definition | +| [parseForCache] | boolean | if set to true, the Category ID is kept | -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit + + +## MetadataType +MetadataType class that gets extended by their specific metadata type class. +Provides default functionality that can be overwritten by child metadata type classes + +**Kind**: global class + +* [MetadataType](#MetadataType) + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> + + + +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map + +| Param | Type | Description | +| --- | --- | --- | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | + + + +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - Fieldnames + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | + + + +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | + + + +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | + + + +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | + + + +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeItem - cloned metadata + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | + + + +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | + + + +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | + + + +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | + + + +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [subType] | string | optionally limit to a single subtype | + + + +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| name | string | name (not key) of the metadata item | + + + +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | + + + +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | + + + +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | + + + +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed + +| Param | Type | Description | +| --- | --- | --- | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | + + + +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found + +| Param | Type | Description | +| --- | --- | --- | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | + + + +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | + + + +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | + + + +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | + + + +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | + + + +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | error that occured | + + + +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | + + + +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | + + + +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: null - - + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | exception | +| id | string | id or key of item | + + + +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) + +| Param | Type | Description | +| --- | --- | --- | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | + + + +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | + + + +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | + + + +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | + +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + + +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | + + + +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | + + + +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata + +| Param | Type | Description | +| --- | --- | --- | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied + +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied + +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types (e.g script, asset, query) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - subtype name + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | + + + +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | + + + +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message + +| Param | Type | Description | +| --- | --- | --- | +| ex | object | response payload from REST API | + + + +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | + + + +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - key of metadata + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of metadata | + + + +### MetadataType.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> +clean up after deleting a metadata item + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - Promise + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | + + + +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - Metadata of BU in local directory + +| Param | Type | Description | +| --- | --- | --- | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | + + + +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | + + + +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map + +| Param | Type | Description | +| --- | --- | --- | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | + + + +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - Fieldnames + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | + + + +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | + + + +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | + + + +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | + + + +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeItem - cloned metadata + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | + + + +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | + + + +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | + + + +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | + + + +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [subType] | string | optionally limit to a single subtype | + + + +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| name | string | name (not key) of the metadata item | + + + +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | + + + +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | + + + +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | + + + +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed + +| Param | Type | Description | +| --- | --- | --- | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | + + + +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found + +| Param | Type | Description | +| --- | --- | --- | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | + + + +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | + + + +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | + + + +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | + + + +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | + + + +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | error that occured | + + + +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | + + + +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | + + + +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: null - - + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | exception | +| id | string | id or key of item | + + + +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) + +| Param | Type | Description | +| --- | --- | --- | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | + + + +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | + + + +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | + + + +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | + +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + + +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | + + + +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | + + + +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | + + + +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata + +| Param | Type | Description | +| --- | --- | --- | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied + +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied + +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types (e.g script, asset, query) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - subtype name + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | + + + +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | + + + +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message + +| Param | Type | Description | +| --- | --- | --- | +| ex | object | response payload from REST API | + + + +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk + +**Kind**: static method of [MetadataType](#MetadataType) + +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | + + + +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - key of metadata + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of metadata | + + + +### MetadataType.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> +clean up after deleting a metadata item + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - Promise + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | + + + +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + + + +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - Metadata of BU in local directory + +| Param | Type | Description | +| --- | --- | --- | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | + + + +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | + + + +## MobileCode ⇐ [MetadataType](#MetadataType) +MobileCode MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + + + +### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. + +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching + +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +## MobileKeyword ⇐ [MetadataType](#MetadataType) +MobileKeyword MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(metadata)](#MobileKeyword.create) ⇒ Promise + * [.update(metadata)](#MobileKeyword.update) ⇒ Promise + * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void + * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void + * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> + * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void + * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> + + + +### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: 'create' \| 'update' \| 'skip' - action to take + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | + + + +### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | + + + +### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +retrieve an item and create a template from it + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### MobileKeyword.create(metadata) ⇒ Promise +Creates a single item + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileKeyword.update(metadata) ⇒ Promise +Updates a single item + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void +manages post retrieve steps + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object +helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Object - returns found extension and file content + +| Param | Type | Description | +| --- | --- | --- | +| metadataScript | string | the code of the file | + + + +### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + + +### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | + + + +### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares an event definition for deployment + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | +| deployDir | string | directory of deploy files | + + + +### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [MobileKeyword](#MobileKeyword) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) + +**Kind**: static method of [MobileKeyword](#MobileKeyword) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<string> - content for metadata.script + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | + + + +### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | + + + +### MobileKeyword.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item + +**Kind**: static method of [MobileKeyword](#MobileKeyword) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +## MobileMessage ⇐ [MetadataType](#MetadataType) +MobileMessage MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#MobileMessage.update) ⇒ Promise + * [.create(metadata)](#MobileMessage.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> + * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> + * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> + + + +### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | + + + +### MobileMessage.update(metadata) ⇒ Promise +Updates a single item + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileMessage.create(metadata) ⇒ Promise +Creates a single item + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<string> - code + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | + + + +### MobileMessage.prepExtractedCode(code) ⇒ Object +helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Object - returns found extension and file content + +| Param | Type | Description | +| --- | --- | --- | +| code | string | the code of the file | + + + +### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single query | + + + +### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.MetadataTypeItem - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single MobileMessage | +| deployDir | string | directory of deploy files | + + + +### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [MobileMessage](#MobileMessage) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) + +**Kind**: static method of [MobileMessage](#MobileMessage) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | + + + +### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + + +### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) +handles extracted code if any are found for complex types + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | + + + +### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit +! the endpoint expects the ID and not a key but for mcdev in this case key==id + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of item | + + + +## Query ⇐ [MetadataType](#MetadataType) +Query MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Query](#Query) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> + * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> + * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.create(query)](#Query.create) ⇒ Promise + * [.update(query)](#Query.update) ⇒ Promise + * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> + * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> + * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void + * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void + * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) + + + +### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves Metadata of queries + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### Query.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves query metadata for caching + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata + + +### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> +Retrieve a specific Query by Name + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [Query](#Query) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.QueryItem | a single query | + + + +### Query.create(query) ⇒ Promise +Creates a single query + +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| query | TYPE.QueryItem | a single query | + + + +### Query.update(query) ⇒ Promise +Updates a single query + +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| query | TYPE.QueryItem | a single query | + + + +### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> +prepares a Query for deployment + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<TYPE.QueryItem> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.QueryItem | a single query activity | +| deployDir | string | directory of deploy files | + + + +### Query.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) +searches extracted SQL file for template variables and applies the market values + +**Kind**: static method of [Query](#Query) +**Returns**: string - code with markets applied + +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +queries are saved as 1 json and 1 sql file. both files need to be run through templating +``` + + +### Query.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Query.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts + +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> \| void - formatted Error Message + +| Param | Type | Description | +| --- | --- | --- | +| ex | object | response payload from REST API | + + + +### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### Query.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item + +**Kind**: static method of [Query](#Query) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +### Query.postDeployTasks(upsertResults) +Gets executed after deployment of metadata type + +**Kind**: static method of [Query](#Query) + +| Param | Type | Description | +| --- | --- | --- | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | + + + +## Role ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Role](#Role) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.create(metadata)](#Role.create) ⇒ Promise + * [.update(metadata)](#Role.update) ⇒ Promise + * [.document([metadata])](#Role.document) ⇒ Promise.<void> + * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void + + + +### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud + +**Kind**: static method of [Role](#Role) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [___] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed before deploying metadata + +**Kind**: static method of [Role](#Role) +**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata item | + + + +### Role.create(metadata) ⇒ Promise +Create a single Role. + +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### Role.update(metadata) ⇒ Promise +Updates a single Role. + +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### Role.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles + +**Kind**: static method of [Role](#Role) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.MetadataTypeMap | role definitions | + + + +### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void +iterates through permissions to output proper row-names for nested permissionss + +**Kind**: static method of [Role](#Role) + +| Param | Type | Description | +| --- | --- | --- | +| role | string | name of the user role | +| element | object | data of the permission | +| [permission] | string | name of the permission | +| [isAllowed] | string | "true" / "false" from the | + + + +## Script ⇐ [MetadataType](#MetadataType) +Script MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Script](#Script) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> + * [.update(script)](#Script.update) ⇒ Promise + * [.create(script)](#Script.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> + * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void + + + +### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves Metadata of Script +Endpoint /automation/v1/scripts/ return all Scripts with all details. + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves script metadata for caching + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise + + +### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> +Retrieve a specific Script by Name + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### Script.update(script) ⇒ Promise +Updates a single Script + +**Kind**: static method of [Script](#Script) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| script | TYPE.MetadataTypeItem | a single Script | + + + +### Script.create(script) ⇒ Promise +Creates a single Script + +**Kind**: static method of [Script](#Script) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| script | TYPE.MetadataTypeItem | a single Script | + + + +### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<string> - content for metadata.script + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.ScriptItem | a single asset definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | + + + +### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem +prepares a Script for deployment + +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.ScriptItem - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.ScriptItem | a single script activity definition | +| dir | string | directory of deploy files | + + + +### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + + +### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) +handles extracted code if any are found for complex types + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | + + + +### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.ScriptItem | a single item | + + + +### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object +helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) + +**Kind**: static method of [Script](#Script) +**Returns**: Object - returns found extension and file content + +| Param | Type | Description | +| --- | --- | --- | +| metadataScript | string | the code of the file | +| metadataName | string | the name of the metadata | + + + +### Script.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [Script](#Script) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### Script.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item + +**Kind**: static method of [Script](#Script) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +## SendClassification ⇐ [MetadataType](#MetadataType) +SendClassification MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + + +### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [SendClassification](#SendClassification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalEmail MetadataType + +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) + +* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise + * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void + * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void + * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> + + + +### TransactionalEmail.update(metadata) ⇒ Promise +Updates a single item + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | + + + +### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void +helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) + +| Param | Type | Description | +| --- | --- | --- | +| _ | TYPE.MetadataTypeItem | not used | +| apiResponse | object | varies depending on the API call | + + + +### TransactionalEmail.postDeployTasks() ⇒ void +Gets executed after deployment of metadata type + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) + + +### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - a single item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | + + + +## TransactionalMessage ⇐ [MetadataType](#MetadataType) +TransactionalMessage MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise + * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise + * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> + + + +### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata + +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching + +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to cache | + + + +### TransactionalMessage.update(metadata) ⇒ Promise +Updates a single item + +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalMessage.create(metadata) ⇒ Promise +Creates a single item + +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | + + + +## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalPush TransactionalMessage + +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) + +* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + + + +### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment + +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - a single item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalSMS MetadataType + +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) + +* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void + * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> + * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean + * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> + + + +### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares for deployment + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | +| deployDir | string | directory of deploy files | + + + +### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<string> - content for metadata.script + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | + + + +### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> +manages post retrieve steps + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> +helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content + +| Param | Type | Description | +| --- | --- | --- | +| metadataScript | string | the code of the file | + + + +### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + + +### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) +handles extracted code if any are found for complex types + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | + + + +### TransactionalSMS.\_isHTML(code) ⇒ boolean +very simplified test for HTML code in our SMS + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: boolean - true if HTML is found + +| Param | Type | Description | +| --- | --- | --- | +| code | string | sms source code | + + + +### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +## TriggeredSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#TriggeredSend.create) ⇒ Promise + * [.update(metadata)](#TriggeredSend.update) ⇒ Promise + * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void + * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> + * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> + * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> + + + +### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### TriggeredSend.create(metadata) ⇒ Promise +Create a single TSD. + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### TriggeredSend.update(metadata) ⇒ Promise +Updates a single TSD. + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +parses retrieved Metadata before saving + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem - metadata object + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | of a single TSD | + + + +### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> +TSD-specific refresh method that finds active TSDs and refreshes them + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<void> - - + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [keyArr] | Array.<string> | | metadata keys | +| [checkKey] | boolean | true | whether to check if the key is valid | + + + +### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> +helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<Array.<string>> - keyArr + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMapObj | TSD item map | + + + +### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | + + + +### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> +helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - true if refresh was successful + +| Param | Type | Description | +| --- | --- | --- | +| key | string | external key of triggered send item | +| checkKey | boolean | whether to check if key exists on the server | + + + +## User ⇐ [MetadataType](#MetadataType) +MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [User](#User) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#User.create) ⇒ Promise + * [.update(metadata)](#User.update) ⇒ Promise + * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument + * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void + * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> + * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object + * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.document([metadata])](#User.document) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void + + + +### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching + +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### User.create(metadata) ⇒ Promise +Create a single item. + +**Kind**: static method of [User](#User) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### User.update(metadata) ⇒ Promise +Updates a single item. + +**Kind**: static method of [User](#User) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | + + + +### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument +prepares a item for deployment + +**Kind**: static method of [User](#User) +**Returns**: TYPE.UserDocument - metadata object + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.UserDocument | of a single item | + + + +### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void +helper for [upsert](#MetadataType.upsert) + +**Kind**: static method of [User](#User) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | + + + +### User.postDeployTasks(upsertResults) ⇒ Promise.<void> +Gets executed after deployment of metadata type + +**Kind**: static method of [User](#User) +**Returns**: Promise.<void> - promise + +| Param | Type | Description | +| --- | --- | --- | +| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | + + + +### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object +helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) + +**Kind**: static method of [User](#User) +**Returns**: object - format needed by API + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| roleId | string | | role.ObjectID | +| roleName | string | | role.Name | +| userId | number | | user.AccountUserID | +| assignmentOnly | boolean | | if true, only assignment configuration will be returned | +| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | + + + +### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | + + + +### User.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles + +**Kind**: static method of [User](#User) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.MetadataTypeMap | user list | + + + +### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +manages post retrieve steps + +**Kind**: static method of [User](#User) +**Returns**: TYPE.MetadataTypeItem \| void - a single item + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +## Verification ⇐ [MetadataType](#MetadataType) +Verification MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null + * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#Verification.create) ⇒ Promise + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void + * [.update(metadata)](#Verification.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem + * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem + * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> + + + +### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Verification Activity. + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| key | string | customer key of single item to retrieve | + + + +### Verification.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + +**Kind**: static method of [Verification](#Verification) +**Returns**: null - - + +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | exception | +| id | string | id or key of item | + + + +### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Verification.create(metadata) ⇒ Promise +Creates a single Data Extract + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.VerificationItem | a single Data Extract | + + + +### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [Verification](#Verification) + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | + + + +### Verification.update(metadata) ⇒ Promise +Updates a single Data Extract + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.VerificationItem | a single Data Extract | + + + +### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem +prepares a verification for deployment + +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - metadata object + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.VerificationItem | a single verification activity definition | + + + +### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem +parses retrieved Metadata before saving + +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.VerificationItem | a single verification activity definition | + + + +### Verification.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | + + + +## Retriever +Retrieves metadata from a business unit and saves it to the local filesystem. + +**Kind**: global class + +* [Retriever](#Retriever) + * [new Retriever(properties, buObject)](#new_Retriever_new) + * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> + + + +### new Retriever(properties, buObject) +Creates a Retriever, uses v2 auth if v2AuthOptions are passed. + + +| Param | Type | Description | +| --- | --- | --- | +| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | +| buObject | TYPE.BuObject | properties for auth | + + + +### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve metadata of specified types into local file system and Retriever.metadata + +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} + +| Param | Type | Description | +| --- | --- | --- | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | +| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | +| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | +| [changelogOnly] | boolean | skip saving, only create json in memory | + + + +### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> +helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types + +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types + +| Param | Type | Description | +| --- | --- | --- | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | + + + +## Mcdev +main class + +**Kind**: global class + +* [Mcdev](#Mcdev) + * [.version()](#Mcdev.version) ⇒ string + * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void + * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void + * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void + * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> + * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise + * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> + * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> + * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> + * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> + * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> + * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> + * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> + * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> + * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> + * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> + * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> + * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> + * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> + * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> + * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> + * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> + * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> + * [.version()](#Mcdev.version) ⇒ string + * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void + * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void + * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void + * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> + * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise + * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> + * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> + * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> + * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> + * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> + * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> + * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> + * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> + * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> + * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> + * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> + * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> + * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> + * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> + * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> + * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> + * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> + + + +### Mcdev.version() ⇒ string +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: string - current version of mcdev + + +### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void +helper method to use unattended mode when including mcdev as a package + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | + + + +### Mcdev.setLoggingLevel(argv) ⇒ void +configures what is displayed in the console + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | list of command line parameters given by user | +| [argv.silent] | boolean | only errors printed to CLI | +| [argv.verbose] | boolean | chatty user CLI output | +| [argv.debug] | boolean | enables developer output & features | + + + +### Mcdev.setOptions(argv) ⇒ void +allows setting system wide / command related options + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | list of command line parameters given by user | + + + +### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> +handler for 'mcdev createDeltaPkg + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | yargs parameters | +| [argv.range] | string | git commit range into deploy directory | +| [argv.filter] | string | filter file paths that start with any | +| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | + + + +### Mcdev.selectTypes() ⇒ Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise - . + + +### Mcdev.explainTypes() ⇒ Array.<object> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Array.<object> - list of supported types with their apiNames + + +### Mcdev.upgrade() ⇒ Promise.<boolean> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - success flag + + +### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> +Retrieve all metadata from the specified business unit into the local file system. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<object> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | +| [keys] | Array.<string> | limit retrieval to given metadata key | +| [changelogOnly] | boolean | skip saving, only create json in memory | + + + +### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> +Deploys all metadata located in the 'deploy' directory to the specified business unit + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | +| [keyArr] | Array.<string> | limit deployment to given metadata keys | + + + +### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> +Creates template file for properties.json + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [credentialsName] | string | identifying name of the installed package / project | + + + +### Mcdev.joinProject() ⇒ Promise.<void> +Clones an existing project from git repository and installs it + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + + +### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> +Refreshes BU names and ID's from MC instance + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| credentialsName | string | identifying name of the installed package / project | + + + +### Mcdev.document(businessUnit, type) ⇒ Promise.<void> +Creates docs for supported metadata types in Markdown and/or HTML format + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | metadata type | + + + +### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> +deletes metadata from MC instance by key + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - true if successful, false otherwise + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| customerKey | string | Identifier of metadata | + + + +### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| id | string | Identifier of metadata | + + + +### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> +ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | references credentials from properties.json | +| [keyArr] | Array.<string> | metadata keys | + + + +### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> +Converts metadata to legacy format. Output is saved in 'converted' directory + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | + + + +### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve a specific metadata file and templatise. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | Array.<string> | name of the metadata | +| market | string | market which should be used to revert template | + + + +### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Build a template based on a list of metadata files in the retrieve folder. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | +| market | string | market localizations | + + + +### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> +Build a specific metadata file based on a template. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | string | name of the metadata | +| market | string | market localizations | + + + +### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> +Build a specific metadata file based on a template using a list of bu-market combos + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| listName | string | name of list of BU-market combos | +| type | string | supported metadata type | +| name | string | name of the metadata | + + + +### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Schedule an item (shortcut for execute --schedule) + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Start/execute an item + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +pause an item + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Updates the key to match the name field + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.version() ⇒ string +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: string - current version of mcdev + + +### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void +helper method to use unattended mode when including mcdev as a package + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | + + + +### Mcdev.setLoggingLevel(argv) ⇒ void +configures what is displayed in the console + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | list of command line parameters given by user | +| [argv.silent] | boolean | only errors printed to CLI | +| [argv.verbose] | boolean | chatty user CLI output | +| [argv.debug] | boolean | enables developer output & features | + + + +### Mcdev.setOptions(argv) ⇒ void +allows setting system wide / command related options + +**Kind**: static method of [Mcdev](#Mcdev) + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | list of command line parameters given by user | + + + +### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> +handler for 'mcdev createDeltaPkg + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items + +| Param | Type | Description | +| --- | --- | --- | +| argv | object | yargs parameters | +| [argv.range] | string | git commit range into deploy directory | +| [argv.filter] | string | filter file paths that start with any | +| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | + + + +### Mcdev.selectTypes() ⇒ Promise +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise - . + + +### Mcdev.explainTypes() ⇒ Array.<object> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Array.<object> - list of supported types with their apiNames + + +### Mcdev.upgrade() ⇒ Promise.<boolean> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - success flag + + +### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> +Retrieve all metadata from the specified business unit into the local file system. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<object> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | +| [keys] | Array.<string> | limit retrieval to given metadata key | +| [changelogOnly] | boolean | skip saving, only create json in memory | + + + +### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> +Deploys all metadata located in the 'deploy' directory to the specified business unit + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | +| [keyArr] | Array.<string> | limit deployment to given metadata keys | + + + +### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> +Creates template file for properties.json + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [credentialsName] | string | identifying name of the installed package / project | + + + +### Mcdev.joinProject() ⇒ Promise.<void> +Clones an existing project from git repository and installs it + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + + +### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> +Refreshes BU names and ID's from MC instance + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| credentialsName | string | identifying name of the installed package / project | + + + +### Mcdev.document(businessUnit, type) ⇒ Promise.<void> +Creates docs for supported metadata types in Markdown and/or HTML format + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | metadata type | + + + +### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> +deletes metadata from MC instance by key + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<boolean> - true if successful, false otherwise + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| customerKey | string | Identifier of metadata | + + + +### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | supported metadata type | +| id | string | Identifier of metadata | + + + +### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> +ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| type | string | references credentials from properties.json | +| [keyArr] | Array.<string> | metadata keys | + + + +### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> +Converts metadata to legacy format. Output is saved in 'converted' directory + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | + + + +### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve a specific metadata file and templatise. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | Array.<string> | name of the metadata | +| market | string | market which should be used to revert template | + + + +### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Build a template based on a list of metadata files in the retrieve folder. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | +| market | string | market localizations | + + + +### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> +Build a specific metadata file based on a template. + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| name | string | name of the metadata | +| market | string | market localizations | + + + +### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> +Build a specific metadata file based on a template using a list of bu-market combos + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| listName | string | name of list of BU-market combos | +| type | string | supported metadata type | +| name | string | name of the metadata | + + + +### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| selectedType | string | supported metadata type | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Schedule an item (shortcut for execute --schedule) + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Start/execute an item + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +pause an item + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Updates the key to match the name field + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +## Asset ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + + + +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | + + + +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | + + + +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | + + + +### Asset.create(metadata) ⇒ Promise +Creates a single asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | + + + +### Asset.update(metadata) ⇒ Promise +Updates a single asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | + + + +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | + + + +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | + + + +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | + + + +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | + + + +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | + + + +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | + + + +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType + +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc + +| Param | Type | Description | +| --- | --- | --- | +| extendedSubType | string | webpage, htmlblock, etc | + + + +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + + + +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | + +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + + +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | + + + +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve + +**Kind**: static method of [Asset](#Asset) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | + + + +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy + +**Kind**: static method of [Asset](#Asset) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.AssetItem | a single asset definition | - + -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory +| Param | Type | Description | +| --- | --- | --- | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | + + + +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | + + + +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | + + + +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> should return only the json for all but asset, query and script that are saved as multiple files additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | | keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| customerKey | string | Identifier of data extension | - + -## MobileCode ⇐ [MetadataType](#MetadataType) -MobileCode MetadataType +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) -* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | - + -### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of metadata | + + + +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise -## MobileKeyword ⇐ [MetadataType](#MetadataType) -MobileKeyword MetadataType +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | + + + +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | + + + +### Asset.create(metadata) ⇒ Promise +Creates a single asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | + + + +### Asset.update(metadata) ⇒ Promise +Updates a single asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | + + + +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | + + + +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | + + + +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | + + + +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | + + -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(metadata)](#MobileKeyword.create) ⇒ Promise - * [.update(metadata)](#MobileKeyword.update) ⇒ Promise - * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void - * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> - * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void - * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata - +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | -### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| extendedSubType | string | webpage, htmlblock, etc | - + -### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -retrieve an item and create a template from it +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| key | string | name of the metadata file | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### MobileKeyword.create(metadata) ⇒ Promise -Creates a single item +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MobileKeyword.update(metadata) ⇒ Promise -Updates a single item +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void -manages post retrieve steps +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object -helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | + + + +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | - - +| metadata | TYPE.AssetItem | a single asset definition | -### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | -### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) -handles extracted code if any are found for complex types + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| templateName | string | name of the metadata file | - + -### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares an event definition for deployment +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | -| deployDir | string | directory of deploy files | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | - + -### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| customerKey | string | Identifier of data extension | - + -### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| customerKey | string | Identifier of metadata item | - + -### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| id | string | Identifier of metadata | - + -### MobileKeyword.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +## MetadataType +MetadataType class that gets extended by their specific metadata type class. +Provides default functionality that can be overwritten by child metadata type classes -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: global class -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | +* [MetadataType](#MetadataType) + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - + -### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + + +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -## MobileMessage ⇐ [MetadataType](#MetadataType) -MobileMessage MetadataType +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - Fieldnames -* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#MobileMessage.update) ⇒ Promise - * [.create(metadata)](#MobileMessage.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> - * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> - * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | - + -### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### MobileMessage.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -### MobileMessage.create(metadata) ⇒ Promise -Creates a single item +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<string> - code +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MobileMessage.prepExtractedCode(code) ⇒ Object -helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| code | string | the code of the file | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | - + -### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.MetadataTypeItem - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileMessage | -| deployDir | string | directory of deploy files | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| [subType] | string | optionally limit to a single subtype | - + -### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| name | string | name (not key) of the metadata item | -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - + -### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) -handles extracted code if any are found for complex types +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit -! the endpoint expects the ID and not a key but for mcdev in this case key==id +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of item | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | - + -## Query ⇐ [MetadataType](#MetadataType) -Query MetadataType +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) -* [Query](#Query) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> - * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> - * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.create(query)](#Query.create) ⇒ Promise - * [.update(query)](#Query.update) ⇒ Promise - * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> - * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> - * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void - * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void - * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | - + -### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves Metadata of queries +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - + -### Query.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully +**Kind**: static method of [MetadataType](#MetadataType) + -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type - +**Kind**: static method of [MetadataType](#MetadataType) + -### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves query metadata for caching +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - +**Kind**: static method of [MetadataType](#MetadataType) + -### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> -Retrieve a specific Query by Name +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | - + -### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [Query](#Query) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.QueryItem | a single query | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | - + -### Query.create(query) ⇒ Promise -Creates a single query +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| query | TYPE.QueryItem | a single query | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | - + -### Query.update(query) ⇒ Promise -Updates a single query +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| query | TYPE.QueryItem | a single query | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> -prepares a Query for deployment +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<TYPE.QueryItem> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.QueryItem | a single query activity | -| deployDir | string | directory of deploy files | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | - + -### Query.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) -searches extracted SQL file for template variables and applies the market values +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) -**Kind**: static method of [Query](#Query) -**Returns**: string - code with markets applied +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | + + + +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types + -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -**Example** -```js -queries are saved as 1 json and 1 sql file. both files need to be run through templating -``` - + -### Query.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| ex | Error | error that occured | - + -### Query.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | - - +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit + -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<boolean> - deletion success flag +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | - - +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | -### Query.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item + -**Kind**: static method of [Query](#Query) +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | - + -### Query.postDeployTasks(upsertResults) -Gets executed after deployment of metadata type +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -**Kind**: static method of [Query](#Query) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| ex | Error | exception | +| id | string | id or key of item | - + -## Role ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) -* [Role](#Role) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.create(metadata)](#Role.create) ⇒ Promise - * [.update(metadata)](#Role.update) ⇒ Promise - * [.document([metadata])](#Role.document) ⇒ Promise.<void> - * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void +| Param | Type | Description | +| --- | --- | --- | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | - + -### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [___] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - + -### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed before deploying metadata +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) -**Kind**: static method of [Role](#Role) -**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | - + -### Role.create(metadata) ⇒ Promise -Create a single Role. +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### Role.update(metadata) ⇒ Promise -Updates a single Role. +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + -### Role.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<void> - - +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | role definitions | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void -iterates through permissions to output proper row-names for nested permissionss +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable -**Kind**: static method of [Role](#Role) +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| role | string | name of the user role | -| element | object | data of the permission | -| [permission] | string | name of the permission | -| [isAllowed] | string | "true" / "false" from the | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -## Script ⇐ [MetadataType](#MetadataType) -Script MetadataType +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) -* [Script](#Script) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> - * [.update(script)](#Script.update) ⇒ Promise - * [.create(script)](#Script.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> - * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves Metadata of Script -Endpoint /automation/v1/scripts/ return all Scripts with all details. +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves script metadata for caching +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - + -### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> -Retrieve a specific Script by Name +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### Script.update(script) ⇒ Promise -Updates a single Script +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save | Param | Type | Description | | --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### Script.create(script) ⇒ Promise -Creates a single Script +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single asset definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem -prepares a Script for deployment +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.ScriptItem - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single script activity definition | -| dir | string | directory of deploy files | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +handles extracted code if any are found for complex types (e.g script, asset, query) -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - + -### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) -handles extracted code if any are found for complex types +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - subtype name + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | + + + +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - metadata + +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | + + + +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single item | +| ex | object | response payload from REST API | - + -### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object -helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Script](#Script) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | -| metadataName | string | the name of the metadata | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | - + -### Script.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id -**Kind**: static method of [Script](#Script) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - key of metadata | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| id | string | Identifier of metadata | - + -### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> +### MetadataType.deleteByKey(customerKey) ⇒ boolean Delete a metadata item from the specified business unit -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### Script.postDeleteTasks(customerKey) ⇒ void +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> clean up after deleting a metadata item -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - Promise | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | - + -## SendClassification ⇐ [MetadataType](#MetadataType) -SendClassification MetadataType +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag -### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -**Kind**: static method of [SendClassification](#SendClassification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalEmail MetadataType +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - Metadata of BU in local directory -* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise - * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void - * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void - * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | - + -### TransactionalEmail.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | +| keyArr | Array.<string> | customerkey of the metadata | - + -### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - Promise +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | + + + +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void -helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - Fieldnames | Param | Type | Description | | --- | --- | --- | -| _ | TYPE.MetadataTypeItem | not used | -| apiResponse | object | varies depending on the API call | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | - + -### TransactionalEmail.postDeployTasks() ⇒ void -Gets executed after deployment of metadata type +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - + -### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - a single item +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -## TransactionalMessage ⇐ [MetadataType](#MetadataType) -TransactionalMessage MetadataType +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) -* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise - * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise - * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to cache | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | - + -### TransactionalMessage.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### TransactionalMessage.create(metadata) ⇒ Promise -Creates a single item +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalPush TransactionalMessage +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata -* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - a single item +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [subType] | string | optionally limit to a single subtype | - + -## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalSMS MetadataType +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise -* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void - * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> - * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean - * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| name | string | name (not key) of the metadata item | - + -### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares for deployment +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| deployDir | string | directory of deploy files | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | - + -### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | - + -### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> -manages post retrieve steps +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | + + + +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type - +**Kind**: static method of [MetadataType](#MetadataType) + -### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> -helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | - + -### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | - + -### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) -handles extracted code if any are found for complex types +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - + -### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) -handles extracted code if any are found for complex types +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### TransactionalSMS.\_isHTML(code) ⇒ boolean -very simplified test for HTML code in our SMS +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: boolean - true if HTML is found +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| code | string | sms source code | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | - + -### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -## TriggeredSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error -* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#TriggeredSend.create) ⇒ Promise - * [.update(metadata)](#TriggeredSend.update) ⇒ Promise - * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> - * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> - * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - + -### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -### TriggeredSend.create(metadata) ⇒ Promise -Create a single TSD. + -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### TriggeredSend.update(metadata) ⇒ Promise -Updates a single TSD. +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| ex | Error | error that occured | - + -### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -parses retrieved Metadata before saving +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem - metadata object +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | + + + +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - +| ex | Error | exception | +| id | string | id or key of item | -### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> -TSD-specific refresh method that finds active TSDs and refreshes them + -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<void> - - +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [keyArr] | Array.<string> | | metadata keys | -| [checkKey] | boolean | true | whether to check if the key is valid | +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) - +| Param | Type | Description | +| --- | --- | --- | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | -### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> -helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli + -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<Array.<string>> - keyArr +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMapObj | TSD item map | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - + -### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | +| Param | Type | Description | +| --- | --- | --- | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | - + -### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> -helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - true if refresh was successful +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| key | string | external key of triggered send item | -| checkKey | boolean | whether to check if key exists on the server | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -## User ⇐ [MetadataType](#MetadataType) -MetadataType +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) -* [User](#User) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#User.create) ⇒ Promise - * [.update(metadata)](#User.update) ⇒ Promise - * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument - * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void - * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> - * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object - * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.document([metadata])](#User.document) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + -### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -### User.create(metadata) ⇒ Promise -Create a single item. +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### User.update(metadata) ⇒ Promise -Updates a single item. +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument -prepares a item for deployment +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata -**Kind**: static method of [User](#User) -**Returns**: TYPE.UserDocument - metadata object +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.UserDocument | of a single item | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void -helper for [upsert](#MetadataType.upsert) +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not -**Kind**: static method of [User](#User) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### User.postDeployTasks(upsertResults) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | - - - -### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object -helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | -**Kind**: static method of [User](#User) -**Returns**: object - format needed by API + -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| roleId | string | | role.ObjectID | -| roleName | string | | role.Name | -| userId | number | | user.AccountUserID | -| assignmentOnly | boolean | | if true, only assignment configuration will be returned | -| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata -### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +| Param | Type | Description | +| --- | --- | --- | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### User.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | user list | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -manages post retrieve steps +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types (e.g script, asset, query) -**Kind**: static method of [User](#User) -**Returns**: TYPE.MetadataTypeItem \| void - a single item +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -## Verification ⇐ [MetadataType](#MetadataType) -Verification MetadataType +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array -* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null - * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#Verification.create) ⇒ Promise - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void - * [.update(metadata)](#Verification.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem - * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem - * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Verification Activity. +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - subtype name | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| key | string | customer key of single item to retrieve | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### Verification.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure -**Kind**: static method of [Verification](#Verification) -**Returns**: null - - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - metadata | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | - + -### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map -### Verification.create(metadata) ⇒ Promise -Creates a single Data Extract +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise + + +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | +| ex | object | response payload from REST API | - + -### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Verification](#Verification) +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | - + -### Verification.update(metadata) ⇒ Promise -Updates a single Data Extract +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - key of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | +| id | string | Identifier of metadata | - + -### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem -prepares a verification for deployment +### MetadataType.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - metadata object +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | +| customerKey | string | Identifier of data extension | - + -### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem -parses retrieved Metadata before saving +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> +clean up after deleting a metadata item -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | +| customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | - + -### Verification.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -## Retriever -Retrieves metadata from a business unit and saves it to the local filesystem. +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit -**Kind**: global class +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag -* [Retriever](#Retriever) - * [new Retriever(properties, buObject)](#new_Retriever_new) - * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> +| Param | Type | Description | +| --- | --- | --- | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### new Retriever(properties, buObject) -Creates a Retriever, uses v2 auth if v2AuthOptions are passed. +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - Metadata of BU in local directory | Param | Type | Description | | --- | --- | --- | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| buObject | TYPE.BuObject | properties for auth | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | - + -### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve metadata of specified types into local file system and Retriever.metadata +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | -| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | -| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - +| keyArr | Array.<string> | customerkey of the metadata | -### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types + -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys | Param | Type | Description | | --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | @@ -8476,6 +13743,77 @@ Returns an SDK instance to be used for API calls | sessionKey | string | key for specific BU | | authObject | TYPE.AuthObject | credentials for specific BU | + + +## csvToArray(csv) ⇒ Array.<string> +helper to convert CSVs into an array. if only one value was given, it's also returned as an array + +**Kind**: global function +**Returns**: Array.<string> - values split into an array. + +| Param | Type | Description | +| --- | --- | --- | +| csv | string | potentially comma-separated value or null | + + + +## Mcdev.(methodName, businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +run a method across BUs + +**Kind**: global function +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of affected item keys + +| Param | Type | Description | +| --- | --- | --- | +| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +## Mcdev.(methodName, cred, bu, [type], keyArr) ⇒ Promise.<Array.<string>> +helper for [Mcdev.#runMethod](Mcdev.#runMethod) + +**Kind**: global function +**Returns**: Promise.<Array.<string>> - list of keys that were affected + +| Param | Type | Description | +| --- | --- | --- | +| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | +| cred | string | name of Credential | +| bu | string | name of BU | +| [type] | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| keyArr | Array.<string> | customerkey of the metadata | + + + +## Mcdev.(selectedType, buObject) ⇒ Array.<string> +helper for [Mcdev.#runOnBU](Mcdev.#runOnBU) + +**Kind**: global function +**Returns**: Array.<string> - keyArr + +| Param | Type | Description | +| --- | --- | --- | +| selectedType | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| buObject | TYPE.BuObject | properties for auth | + + + +## Mcdev.(cred, bu, type, [keyArr]) ⇒ Promise.<Array.<string>> +Updates the key to match the name field + +**Kind**: global function +**Returns**: Promise.<Array.<string>> - list of keys that were affected + +| Param | Type | Description | +| --- | --- | --- | +| cred | string | name of Credential | +| bu | string | name of BU | +| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| [keyArr] | Array.<string> | customerkey of the metadata | + ## TypeKeyCombo : Object.<string, string> diff --git a/lib/cli.js b/lib/cli.js index 1e5229744..c03ce8a65 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -196,7 +196,7 @@ yargs(hideBin(process.argv)) }) .positional('TYPE', { type: 'string', - describe: 'metadata type to delete from; currently supported: dataExtension', + describe: 'metadata type to delete from;', }) .positional('EXTERNALKEY', { type: 'string', @@ -208,6 +208,36 @@ yargs(hideBin(process.argv)) Mcdev.deleteByKey(argv.BU, argv.TYPE, argv.EXTERNALKEY); }, }) + .command({ + command: 'resolveId ', + aliases: ['rid'], + desc: 'resolves metadata key by ID', + builder: (yargs) => { + yargs + .positional('BU', { + type: 'string', + describe: + 'the business unit to search in (in format "credential name/BU name")', + }) + .positional('TYPE', { + type: 'string', + describe: 'metadata type to search in; currently supported: asset', + }) + .positional('ID', { + type: 'string', + describe: 'the id to resolve', + }) + .option('json', { + type: 'boolean', + group: 'Options for explainTypes:', + describe: 'optionaly return info in json format', + }); + }, + handler: (argv) => { + Mcdev.setOptions(argv); + Mcdev.resolveId(argv.BU, argv.TYPE, argv.ID); + }, + }) .command({ command: 'retrieveAsTemplate ', aliases: ['rt'], diff --git a/lib/index.js b/lib/index.js index 01e553142..22b5cd53e 100644 --- a/lib/index.js +++ b/lib/index.js @@ -529,6 +529,49 @@ class Mcdev { } } } + /** + * get name & key for provided id + * + * @param {string} businessUnit references credentials from properties.json + * @param {string} type supported metadata type + * @param {string} id Identifier of metadata + * @returns {Promise.<{key:string, name:string, path:string}>} key, name and path of metadata; null if not found + */ + static async resolveId(businessUnit, type, id) { + Util.startLogger(); + if (!Util.OPTIONS.json) { + Util.logger.info('mcdev:: resolveId'); + } + if (!Util._isValidType(type)) { + return; + } + const properties = await config.getProperties(); + if (!(await config.checkProperties(properties))) { + return null; + } + const buObject = await Cli.getCredentialObject(properties, businessUnit); + if (buObject !== null) { + try { + MetadataTypeInfo[type].client = auth.getSDK(buObject); + } catch (ex) { + Util.logger.error(ex.message); + return; + } + if (!Util.OPTIONS.json) { + Util.logger.info( + Util.getGrayMsg(` - Searching ${type} with id ${id} on BU ${businessUnit}`) + ); + } + try { + MetadataTypeInfo[type].properties = properties; + MetadataTypeInfo[type].buObject = buObject; + return await MetadataTypeInfo[type].resolveId(id); + } catch (ex) { + Util.logger.errorStack(ex, ` - Could not resolve ID of ${type} ${id}`); + } + } + } + /** * ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails * diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index badfeb065..a403890d2 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -1689,6 +1689,60 @@ class Asset extends MetadataType { await File.remove(filePath); } } + /** + * get name & key for provided id + * + * @param {string} id Identifier of metadata + * @returns {Promise.<{key:string, name:string, path:string}>} key, name and path of metadata; null if not found + */ + static async resolveId(id) { + const uri = '/asset/v1/content/assets/query'; + const payload = { + query: { + property: 'id', + simpleOperator: 'equal', + value: id, + }, + }; + const response = await this.client.rest.post(uri, payload); + if (response.items.length === 1) { + const item = response.items[0]; + const subType = this._getMainSubtype(item.assetType.name); + // find path for code of content block, fall back to json if not found; undefined if not even the json exists + const pathBase1 = `./retrieve/${this.buObject.credential}/${this.buObject.businessUnit}/${this.definition.type}/${subType}/${item[this.definition.keyField]}.${this.definition.type}-${subType}-meta.`; + const pathBase2 = `./retrieve/${this.buObject.credential}/${this.buObject.businessUnit}/${this.definition.type}/${subType}/${item[this.definition.keyField]}/${item[this.definition.keyField]}.${this.definition.type}-${subType}-meta.`; + const paths = []; + for (const ext of ['html', 'ssjs', 'amp', 'json']) { + paths.push(pathBase1 + ext, pathBase2 + ext); + } + const path = paths.find((p) => File.pathExistsSync(p)); + + // prep response object + const json = { + key: item[this.definition.keyField], + name: item[this.definition.nameField], + path: path, + }; + if (Util.OPTIONS.json) { + // for automated processing by VSCode extension, optionally print the json + if (Util.OPTIONS.loggerLevel !== 'error') { + console.log(JSON.stringify(json, null, 2)); // eslint-disable-line no-console + } + } else { + Util.logger.info( + ` - ${this.definition.type}-${subType} found: ${item[this.definition.keyField]} (${item[this.definition.nameField]})` + ); + Util.logger.info(' - link: ' + path); + } + return json; + } else { + if (Util.OPTIONS.json) { + return null; + } + Util.logger.error(` - ${this.definition.type} with id ${id} not found on BU`); + return null; + } + } } // Assign definition to static attributes diff --git a/lib/metadataTypes/MetadataType.js b/lib/metadataTypes/MetadataType.js index bea4107c7..055d87e5e 100644 --- a/lib/metadataTypes/MetadataType.js +++ b/lib/metadataTypes/MetadataType.js @@ -1983,6 +1983,17 @@ class MetadataType { } } + /** + * get name & key for provided id + * + * @param {string} id Identifier of metadata + * @returns {Promise.} key of metadata + */ + static resolveId(id) { + Util.logger.error(`resolveId type ${this.definition.type} is not supported.`); + return false; + } + /** * Delete a metadata item from the specified business unit * From 1688840e4a54e03bd3c8ebb886a8c2aa17916e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Mon, 25 Mar 2024 12:43:30 +0100 Subject: [PATCH 2/5] #1238: switch to simpler get request --- docs/dist/documentation.md | 11711 ++++++++++++----------------------- lib/metadataTypes/Asset.js | 21 +- 2 files changed, 3882 insertions(+), 7850 deletions(-) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 7ca0015c9..4aa1defae 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -132,16 +132,9 @@ Provides default functionality that can be overwritten by child metadata type cl
Retriever

Retrieves metadata from a business unit and saves it to the local filesystem.

-
Mcdev
-

main class

-
AssetMetadataType

FileTransfer MetadataType

-
MetadataType
-

MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes

-
## Constants @@ -252,21 +245,6 @@ helper for DataExtension.#fixShared_item
setupSDK(sessionKey, authObject)SDK

Returns an SDK instance to be used for API calls

-
csvToArray(csv)Array.<string>
-

helper to convert CSVs into an array. if only one value was given, it's also returned as an array

-
-
Mcdev.(methodName, businessUnit, [selectedType], [keys])Promise.<Object.<string, Array.<string>>>
-

run a method across BUs

-
-
Mcdev.(methodName, cred, bu, [type], keyArr)Promise.<Array.<string>>
-

helper for Mcdev.#runMethod

-
-
Mcdev.(selectedType, buObject)Array.<string>
-

helper for Mcdev.#runOnBU

-
-
Mcdev.(cred, bu, type, [keyArr])Promise.<Array.<string>>
-

Updates the key to match the name field

-
## Typedefs @@ -570,33 +548,6 @@ main class * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> - * [.version()](#Mcdev.version) ⇒ string - * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void - * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void - * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void - * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise - * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> - * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> - * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> - * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> - * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> - * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> - * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> - * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> - * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> - * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> - * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> - * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> - * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> - * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> - * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> - * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> @@ -923,398 +874,483 @@ Updates the key to match the name field | selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | | [keys] | Array.<string> | customerkey of the metadata | - + -### Mcdev.version() ⇒ string -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: string - current version of mcdev - +## Asset ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType -### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void -helper method to use unattended mode when including mcdev as a package +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -**Kind**: static method of [Mcdev](#Mcdev) +* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + + + +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### Mcdev.setLoggingLevel(argv) ⇒ void -configures what is displayed in the console +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| argv | object | list of command line parameters given by user | -| [argv.silent] | boolean | only errors printed to CLI | -| [argv.verbose] | boolean | chatty user CLI output | -| [argv.debug] | boolean | enables developer output & features | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### Mcdev.setOptions(argv) ⇒ void -allows setting system wide / command related options +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| argv | object | list of command line parameters given by user | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - + -### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -handler for 'mcdev createDeltaPkg +### Asset.create(metadata) ⇒ Promise +Creates a single asset -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| argv | object | yargs parameters | -| [argv.range] | string | git commit range into deploy directory | -| [argv.filter] | string | filter file paths that start with any | -| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | +| metadata | TYPE.AssetItem | a single asset | - + -### Mcdev.selectTypes() ⇒ Promise -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise - . - +### Asset.update(metadata) ⇒ Promise +Updates a single asset -### Mcdev.explainTypes() ⇒ Array.<object> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Array.<object> - list of supported types with their apiNames - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise -### Mcdev.upgrade() ⇒ Promise.<boolean> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - success flag - +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AssetItem | a single asset | -### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> -Retrieve all metadata from the specified business unit into the local file system. + -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<object> - - +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | -| [keys] | Array.<string> | limit retrieval to given metadata key | -| [changelogOnly] | boolean | skip saving, only create json in memory | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | - + -### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> -Deploys all metadata located in the 'deploy' directory to the specified business unit +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> -Creates template file for properties.json +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| [credentialsName] | string | identifying name of the installed package / project | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | - + -### Mcdev.joinProject() ⇒ Promise.<void> -Clones an existing project from git repository and installs it +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file -### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> -Refreshes BU names and ID's from MC instance +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - + + +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata | Param | Type | Description | | --- | --- | --- | -| credentialsName | string | identifying name of the installed package / project | +| metadata | TYPE.AssetItem | a single asset | - + -### Mcdev.document(businessUnit, type) ⇒ Promise.<void> -Creates docs for supported metadata types in Markdown and/or HTML format +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | metadata type | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> -deletes metadata from MC instance by key +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if successful, false otherwise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| customerKey | string | Identifier of metadata | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| id | string | Identifier of metadata | +| extendedSubType | string | webpage, htmlblock, etc | - + -### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> -ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | references credentials from properties.json | -| [keyArr] | Array.<string> | metadata keys | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> -Converts metadata to legacy format. Output is saved in 'converted' directory +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [Mcdev](#Mcdev) +**Kind**: static method of [Asset](#Asset) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve a specific metadata file and templatise. +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | Array.<string> | name of the metadata | -| market | string | market which should be used to revert template | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | -| market | string | market localizations | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> -Build a specific metadata file based on a template. +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | string | name of the metadata | -| market | string | market localizations | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> -Build a specific metadata file based on a template using a list of bu-market combos +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) -| Param | Type | Description | -| --- | --- | --- | -| listName | string | name of list of BU-market combos | -| type | string | supported metadata type | -| name | string | name of the metadata | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - - +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | -### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Schedule an item (shortcut for execute --schedule) + -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted + +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - +| metadata | TYPE.AssetItem | a single asset definition | -### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Start/execute an item + -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -pause an item +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Updates the key to match the name field +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | -| businessUnit | string | name of BU | -| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -## Asset ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata -* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | + + + +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk + +**Kind**: static method of [Asset](#Asset) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of metadata | @@ -1726,436 +1762,468 @@ get name & key for provided id | --- | --- | --- | | id | string | Identifier of metadata | - + -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset +## AttributeGroup ⇐ [MetadataType](#MetadataType) +AttributeGroup MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | +* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching +### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating +### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups for caching. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -### Asset.create(metadata) ⇒ Promise -Creates a single asset +## AttributeSet ⇐ [MetadataType](#MetadataType) +AttributeSet MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> + * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> - + -### Asset.update(metadata) ⇒ Promise -Updates a single asset +### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set Definitions. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type +### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set definitions for caching. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> +used to identify updated shared data extensions that are used in attributeSets. +helper for DataExtension.#fixShared_onBU + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs | Param | Type | Description | | --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | +| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | +| fixShared_fields | object | DataExtensionField.fixShared_fields | - + -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset +### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json +### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it +### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> +helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Array.<object> - all system value definitions + -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | +## Automation ⇐ [MetadataType](#MetadataType) +Automation MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> + * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null + * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> + * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void + * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> + * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void + * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> + * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> + * [.create(metadata)](#Automation.create) ⇒ Promise + * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> + * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean + * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Automation.setFolderPath) + * [.setFolderId(metadata)](#Automation.setFolderId) + * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap + * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string + * [.document([metadata])](#Automation.document) ⇒ Promise.<void> + * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata + + +### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### Automation.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| ex | Error | exception | +| id | string | id or key of item | - + -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment +### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + + +### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves automation metadata for caching + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + + +### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> +Retrieve a specific Automation Definition by Name + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType +### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationItem \| void - parsed item | Param | Type | Description | | --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | +| metadata | TYPE.AutomationItem | a single automation | - + -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| ex | object | response payload from REST API | -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - + -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> +Deploys automation - the saved file is the original one due to large differences required for deployment -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMap> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| metadata | TYPE.AutomationMap | metadata mapped by their keyField | +| targetBU | string | name/shorthand of target businessUnit for mapping | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### Automation.create(metadata) ⇒ Promise +Creates a single automation -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.AutomationItem | single metadata entry | - + -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +### Automation.update(metadata, metadataBefore) ⇒ Promise +Updates a single automation -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise - Promise -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | single metadata entry | +| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | - + -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> +Gets executed before deploying metadata -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItem> - Promise -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | metadata mapped by their keyField | - + -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted +### Automation.validateDeployMetadata(metadata) ⇒ boolean +Validates the automation to be sure it can be deployed. +Whitelisted Activites are deployed but require configuration -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - result if automation can be deployed based on steps | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | +| metadata | TYPE.AutomationItem | single automation record | - + -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) +### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> +Gets executed after deployment of metadata type + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | +| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | +| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | - + -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending +### Automation.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes +### Automation.setFolderId(metadata) +automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure +### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap +Builds a schedule object to be used for scheduling an automation +based on combination of ical string and start/end dates. -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | +| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | - + -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string +used to convert dates to the system timezone required for startDate + +**Kind**: static method of [Automation](#Automation) +**Returns**: string - date in server + +| Param | Type | Description | +| --- | --- | --- | +| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | +| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | +| [offsetInput] | string | timzone difference (+02:00) | + + + +### Automation.document([metadata]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - + +| Param | Type | Description | +| --- | --- | --- | +| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | + + + +### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> should return only the json for all but asset, query and script that are saved as multiple files additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) **Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | | keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +### Automation.deleteByKey(customerKey) ⇒ boolean Delete a metadata item from the specified business unit -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### Asset.postDeleteTasks(customerKey) ⇒ void +### Automation.postDeleteTasks(customerKey) ⇒ void clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of metadata item | - - -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - + -## AttributeGroup ⇐ [MetadataType](#MetadataType) -AttributeGroup MetadataType +## Campaign ⇐ [MetadataType](#MetadataType) +Campaign MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups. +### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -2164,48 +2232,47 @@ Retrieves Metadata of schema attribute groups. | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups for caching. +### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Kind**: static method of [Campaign](#Campaign) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Parses campaign asset response body and returns metadata entries mapped to their id -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | +| retrieveDir | string | folder where to save | +| campaignId | string | of camapaign to retrieve | +| name | string | of camapaign for saving | - + -## AttributeSet ⇐ [MetadataType](#MetadataType) -AttributeSet MetadataType +## ContentArea ⇐ [MetadataType](#MetadataType) +ContentArea MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> - * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> +* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.setFolderPath(metadata)](#ContentArea.setFolderPath) + * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set Definitions. +### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -2214,438 +2281,448 @@ Retrieves Metadata of schema set Definitions. | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set definitions for caching. - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> -used to identify updated shared data extensions that are used in attributeSets. -helper for DataExtension.#fixShared_onBU +### ContentArea.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs +**Kind**: static method of [ContentArea](#ContentArea) | Param | Type | Description | | --- | --- | --- | -| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | -| fixShared_fields | object | DataExtensionField.fixShared_fields | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: TYPE.MetadataTypeItem - parsed item | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +## DataExtension ⇐ [MetadataType](#MetadataType) +DataExtension MetadataType -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | - - - -### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> -helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) +* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) + * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.create(metadata)](#DataExtension.create) ⇒ Promise + * [.update(metadata)](#DataExtension.update) ⇒ Promise + * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void + * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> + * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem + * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> + * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> + * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> + * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.setFolderPath(metadata)](#DataExtension.setFolderPath) + * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Array.<object> - all system value definitions - + -## Automation ⇐ [MetadataType](#MetadataType) -Automation MetadataType +### DataExtension.upsert(metadataMap) ⇒ Promise +Upserts dataExtensions after retrieving them from source and target to compare +if create or update operation is needed. -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise -* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> - * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null - * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> - * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void - * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> - * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void - * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> - * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> - * [.create(metadata)](#Automation.create) ⇒ Promise - * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> - * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean - * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Automation.setFolderPath) - * [.setFolderId(metadata)](#Automation.setFolderId) - * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap - * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string - * [.document([metadata])](#Automation.document) ⇒ Promise.<void> - * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | - + -### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation +### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### Automation.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### DataExtension.create(metadata) ⇒ Promise +Create a single dataExtension. Also creates their columns in 'dataExtension.columns' -**Kind**: static method of [Automation](#Automation) -**Returns**: null - - +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| metadata | TYPE.DataExtensionItem | single metadata entry | - + -### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation +### DataExtension.update(metadata) ⇒ Promise +Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise -### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves automation metadata for caching +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.DataExtensionItem | single metadata entry | -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - + -### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> -Retrieve a specific Automation Definition by Name +### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | +| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void -manages post retrieve steps +### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationItem \| void - parsed item +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | a single automation | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> +get shared dataExtensions from parent BU and merge them into the cache +helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts +### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem +manages post retrieve steps -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: TYPE.DataExtensionItem - metadata | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.DataExtensionItem | a single dataExtension | - + -### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> -Deploys automation - the saved file is the original one due to large differences required for deployment +### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> +prepares a DataExtension for deployment -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMap> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationMap | metadata mapped by their keyField | -| targetBU | string | name/shorthand of target businessUnit for mapping | -| retrieveDir | string | directory where metadata after deploy should be saved | +| metadata | TYPE.DataExtensionItem | a single data Extension | - + -### Automation.create(metadata) ⇒ Promise -Creates a single automation +### DataExtension.document([metadataMap]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | +| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | - + -### Automation.update(metadata, metadataBefore) ⇒ Promise -Updates a single automation +### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | -| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | +| customerKey | string | Identifier of data extension | - + -### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> -Gets executed before deploying metadata +### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> +clean up after deleting a metadata item -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItem> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | metadata mapped by their keyField | +| customerKey | string | Identifier of metadata item | - + -### Automation.validateDeployMetadata(metadata) ⇒ boolean -Validates the automation to be sure it can be deployed. -Whitelisted Activites are deployed but require configuration +### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - result if automation can be deployed based on steps +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise + + +### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata in template format. + +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single automation record | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata item | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### DataExtension.setFolderPath(metadata) +dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve +it also sets the content type which is basically the subtype -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Automation.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Automation.setFolderId(metadata) -automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +## DataExtensionField ⇐ [MetadataType](#MetadataType) +DataExtensionField MetadataType -**Kind**: static method of [Automation](#Automation) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> + * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean + * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem + * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> + * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> + * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean + * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void + + + +### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records and saves it to disk + +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap -Builds a schedule object to be used for scheduling an automation -based on combination of ical string and start/end dates. +### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records for caching -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string -used to convert dates to the system timezone required for startDate +### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> +helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array -**Kind**: static method of [Automation](#Automation) -**Returns**: string - date in server +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects | Param | Type | Description | | --- | --- | --- | -| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | -| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | -| [offsetInput] | string | timzone difference (+02:00) | +| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | - + -### Automation.document([metadata]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +### DataExtensionField.sortDeFields(a, b) ⇒ boolean +sorting method to ensure `Ordinal` is respected -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - sorting based on Ordinal | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | +| a | TYPE.DataExtensionFieldItem | - | +| b | TYPE.DataExtensionFieldItem | - | - + -### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem +manages post retrieve steps -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: TYPE.DataExtensionFieldItem - metadata | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.DataExtensionFieldItem | a single item | +| forDataExtension | boolean | when used by DataExtension class we remove more fields | - + -### Automation.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> +Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. +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 -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - deletion success status +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | +| deKey | string | external/customer key of Data Extension | - + -### Automation.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| customerKey | string | Identifier of data extension | - + -## Campaign ⇐ [MetadataType](#MetadataType) -Campaign MetadataType +### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean +Delete a data extension from the specified business unit -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - deletion success flag -* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata | +| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | - + -### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets +### DataExtensionField.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| customerKey | string | Identifier of metadata item | - + -### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) +DataExtensionTemplate MetadataType -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Parses campaign asset response body and returns metadata entries mapped to their id +### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object +**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | folder where to save | -| campaignId | string | of camapaign to retrieve | -| name | string | of camapaign for saving | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -## ContentArea ⇐ [MetadataType](#MetadataType) -ContentArea MetadataType +## DataExtract ⇐ [MetadataType](#MetadataType) +DataExtract MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.setFolderPath(metadata)](#ContentArea.setFolderPath) - * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(dataExtract)](#DataExtract.create) ⇒ Promise + * [.update(dataExtract)](#DataExtract.update) ⇒ Promise + * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> - + -### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity. +Endpoint /automation/v1/dataextracts/ returns all Data Extracts -**Kind**: static method of [ContentArea](#ContentArea) +**Kind**: static method of [DataExtract](#DataExtract) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | @@ -2655,415 +2732,456 @@ Retrieves SOAP based metadata of metadata type into local filesystem. executes c | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### ContentArea.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching -**Kind**: static method of [ContentArea](#ContentArea) +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific dataExtract Definition by Name + +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### DataExtract.create(dataExtract) ⇒ Promise +Creates a single Data Extract -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: TYPE.MetadataTypeItem - parsed item +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -## DataExtension ⇐ [MetadataType](#MetadataType) -DataExtension MetadataType +### DataExtract.update(dataExtract) ⇒ Promise +Updates a single Data Extract -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise - Promise -* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) - * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.create(metadata)](#DataExtension.create) ⇒ Promise - * [.update(metadata)](#DataExtension.update) ⇒ Promise - * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void - * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> - * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem - * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> - * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> - * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> - * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.setFolderPath(metadata)](#DataExtension.setFolderPath) - * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> +| Param | Type | Description | +| --- | --- | --- | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -### DataExtension.upsert(metadataMap) ⇒ Promise -Upserts dataExtensions after retrieving them from source and target to compare -if create or update operation is needed. +### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a dataExtract for deployment -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | +| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | - + -### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### DataExtension.create(metadata) ⇒ Promise -Create a single dataExtension. Also creates their columns in 'dataExtension.columns' +### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| customerKey | string | Identifier of data extension | - + -### DataExtension.update(metadata) ⇒ Promise -Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' +## DataExtractType ⇐ [MetadataType](#MetadataType) +DataExtractType MetadataType +Only for Caching No retrieve/upsert is required +as this is a configuration in the EID -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + + + +### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type. + +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type for caching. -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +## Discovery ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + + +### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves API endpoint +documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm + +**Kind**: static method of [Discovery](#Discovery) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | -| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | not used | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +## Email ⇐ [MetadataType](#MetadataType) +Email MetadataType -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [Email](#Email) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + + + +### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [Email](#Email) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | | [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> -get shared dataExtensions from parent BU and merge them into the cache -helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve +### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map +**Kind**: static method of [Email](#Email) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: static method of [Email](#Email) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| metadata | TYPE.MetadataTypeItem | a single query | - + -### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem -manages post retrieve steps +## EmailSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: TYPE.DataExtensionItem - metadata +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadataItem)](#EmailSend.update) ⇒ Promise + * [.create(metadataItem)](#EmailSend.create) ⇒ Promise + * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> + * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + + + +### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single dataExtension | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> -prepares a DataExtension for deployment +### EmailSend.update(metadataItem) ⇒ Promise +Updates a single item -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single data Extension | +| metadataItem | TYPE.MetadataTypeItem | a single item | - + -### DataExtension.document([metadataMap]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +### EmailSend.create(metadataItem) ⇒ Promise +Creates a single item -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | +| metadataItem | TYPE.MetadataTypeItem | a single item | - + -### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: static method of [EmailSend](#EmailSend) **Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> -clean up after deleting a metadata item +### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a single item for deployment -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - promise +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - -### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise - - -### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata in template format. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata item | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### DataExtension.setFolderPath(metadata) -dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve -it also sets the content type which is basically the subtype - -**Kind**: static method of [DataExtension](#DataExtension) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - + -### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single query | - + -## DataExtensionField ⇐ [MetadataType](#MetadataType) -DataExtensionField MetadataType +## Event ⇐ [MetadataType](#MetadataType) +Event MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> - * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean - * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem - * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> - * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean - * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void +* [Event](#Event) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.create(metadata)](#Event.create) ⇒ Promise + * [.update(metadataEntry)](#Event.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem - + -### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records and saves it to disk +### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Event Definition. +Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. +Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records for caching +### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Event Definition by Name + +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> -helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array +### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | +| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | - + -### DataExtensionField.sortDeFields(a, b) ⇒ boolean -sorting method to ensure `Ordinal` is respected +### Event.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - sorting based on Ordinal +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| a | TYPE.DataExtensionFieldItem | - | -| b | TYPE.DataExtensionFieldItem | - | +| key | string | Identifier of item | - + -### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem -manages post retrieve steps +### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: TYPE.DataExtensionFieldItem - metadata +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionFieldItem | a single item | -| forDataExtension | boolean | when used by DataExtension class we remove more fields | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> -Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. -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 +### Event.create(metadata) ⇒ Promise +Creates a single Event Definition -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update +**Kind**: static method of [Event](#Event) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | -| deKey | string | external/customer key of Data Extension | +| metadata | TYPE.MetadataTypeItem | a single Event Definition | - + -### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Event.update(metadataEntry) ⇒ Promise +Updates a single Event Definition (using PUT method since PATCH isn't supported) -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Event](#Event) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | - + -### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean -Delete a data extension from the specified business unit +### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - deletion success flag +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed version | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | +| metadata | TYPE.MetadataTypeItem | a single eventDefinition | - + -### DataExtensionField.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadata | TYPE.MetadataTypeItem | a single event definition | - + -## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) -DataExtensionTemplate MetadataType +## FtpLocation ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) - -### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> -**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FtpLocation +Endpoint /automation/v1/ftplocations/ return all FtpLocations + +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3072,32 +3190,39 @@ Retrieves SOAP based metadata of metadata type into local filesystem. executes c | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -## DataExtract ⇐ [MetadataType](#MetadataType) -DataExtract MetadataType +### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. + +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +## FileTransfer ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(dataExtract)](#DataExtract.create) ⇒ Promise - * [.update(dataExtract)](#DataExtract.update) ⇒ Promise - * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> +* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise + * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise + * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> - + -### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity. -Endpoint /automation/v1/dataextracts/ returns all Data Extracts +### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity. +Endpoint /automation/v1/filetransfers/ returns all File Transfers -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3106,20 +3231,20 @@ Endpoint /automation/v1/dataextracts/ returns all Data Extracts | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching +### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity for caching -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + -### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific dataExtract Definition by Name +### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific File Transfer Definition by Name -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3127,87 +3252,83 @@ Retrieve a specific dataExtract Definition by Name | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtract.create(dataExtract) ⇒ Promise -Creates a single Data Extract +### FileTransfer.create(fileTransfer) ⇒ Promise +Creates a single File Transfer -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [FileTransfer](#FileTransfer) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### DataExtract.update(dataExtract) ⇒ Promise -Updates a single Data Extract +### FileTransfer.update(fileTransfer) ⇒ Promise +Updates a single File Transfer -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [FileTransfer](#FileTransfer) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a dataExtract for deployment +### FileTransfer.preDeployTasks(metadata) ⇒ Promise +prepares a fileTransfer for deployment -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem manages post retrieve steps -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> +### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [FileTransfer](#FileTransfer) **Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -## DataExtractType ⇐ [MetadataType](#MetadataType) -DataExtractType MetadataType -Only for Caching No retrieve/upsert is required -as this is a configuration in the EID +## Filter ⇐ [MetadataType](#MetadataType) +Filter MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) + -* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type. +### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Filter. +Endpoint /automation/v1/filters/ returns all Filters, +but only with some of the fields. So it is needed to loop over +Filters with the endpoint /automation/v1/filters/{id} -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Filter](#Filter) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3216,211 +3337,185 @@ Retrieves Metadata of Data Extract Type. | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type for caching. - -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -## Discovery ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## Folder ⇐ [MetadataType](#MetadataType) +Folder MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) - -### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves API endpoint -documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm +* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise + * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise + * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> + * [.create(metadataEntry)](#Folder.create) ⇒ Promise + * [.update(metadataEntry)](#Folder.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> + * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> -**Kind**: static method of [Discovery](#Discovery) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise +Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | not used | -| [__] | void | unused parameter | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | content type of folder | | [key] | string | customer key of single item to retrieve | - + -## Email ⇐ [MetadataType](#MetadataType) -Email MetadataType +### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise +Retrieves folder metadata for caching -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise -* [Email](#Email) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | content type of folder | - + -### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Folder.upsert(metadata) ⇒ Promise.<object> +Folder upsert (copied from Metadata Upsert), after retrieving from target +and comparing to check if create or update operation is needed. +Copied due to having a dependency on itself, meaning the created need to be serial -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | - + -### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### Folder.create(metadataEntry) ⇒ Promise +creates a folder based on metatadata -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | - + -### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Folder.update(metadataEntry) ⇒ Promise +Updates a single Folder. -**Kind**: static method of [Email](#Email) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | - + -## EmailSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType +### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a folder for deployment -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata -* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadataItem)](#EmailSend.update) ⇒ Promise - * [.create(metadataItem)](#EmailSend.create) ⇒ Promise - * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> - * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single folder definition | - + -### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### EmailSend.update(metadataItem) ⇒ Promise -Updates a single item +### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> +Helper to retrieve the folders as promise -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - soap object | Param | Type | Description | | --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | +| [contentTypeList] | Array.<string> | content type of folder | - - -### EmailSend.create(metadataItem) ⇒ Promise -Creates a single item - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | - - - -### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - + -### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a single item for deployment +### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | - + -### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| results | object | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| mid | number | current mid for this credential / business unit | - + -## Event ⇐ [MetadataType](#MetadataType) -Event MetadataType +## ImportFile ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Event](#Event) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.create(metadata)](#Event.create) ⇒ Promise - * [.update(metadataEntry)](#Event.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem +* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(importFile)](#ImportFile.create) ⇒ Promise + * [.update(importFile)](#ImportFile.update) ⇒ Promise + * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> - + -### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Event Definition. -Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. -Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} +### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Import File. +Endpoint /automation/v1/imports/ return all Import Files with all details. +Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3429,20 +3524,27 @@ Currently it is not needed to loop over Imports with endpoint /interaction/v1/Ev | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise -### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Event Definition by Name +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata + + +### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Import Definition by Name + +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -3450,111 +3552,110 @@ Retrieve a specific Event Definition by Name | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### ImportFile.create(importFile) ⇒ Promise +Creates a single Import File -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### Event.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### ImportFile.update(importFile) ⇒ Promise +Updates a single Import File -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy +### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata -**Kind**: static method of [Event](#Event) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | | deployDir | string | directory where deploy metadata are saved | | retrieveDir | string | directory where metadata after deploy should be saved | - - -### Event.create(metadata) ⇒ Promise -Creates a single Event Definition - -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single Event Definition | - - + -### Event.update(metadataEntry) ⇒ Promise -Updates a single Event Definition (using PUT method since PATCH isn't supported) +### ImportFile.preDeployTasks(metadata) ⇒ Promise +prepares a import definition for deployment -**Kind**: static method of [Event](#Event) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | +| metadata | TYPE.MetadataTypeItem | a single importDef | - + -### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment +### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed version +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single eventDefinition | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single event definition | +| customerKey | string | Identifier of data extension | - + -## FtpLocation ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## Journey ⇐ [MetadataType](#MetadataType) +Journey MetadataType +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +id: A unique id of the journey assigned by the journey’s API during its creation +key: A unique id of the journey within the MID. Can be generated by the developer +definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.update(metadata)](#Journey.update) ⇒ Promise + * [.create(metadata)](#Journey.create) ⇒ Promise + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) + * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - + -### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FtpLocation -Endpoint /automation/v1/ftplocations/ return all FtpLocations +### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Journey -**Kind**: static method of [FtpLocation](#FtpLocation) +**Kind**: static method of [Journey](#Journey) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | @@ -3564,1519 +3665,1350 @@ Endpoint /automation/v1/ftplocations/ return all FtpLocations | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. +### Journey.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<boolean> - deletion success status -## FileTransfer ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) + -* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise - * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise - * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> - - - -### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity. -Endpoint /automation/v1/filetransfers/ returns all File Transfers +### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity for caching +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific File Transfer Definition by Name +### Journey.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### FileTransfer.create(fileTransfer) ⇒ Promise -Creates a single File Transfer +### Journey.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [Journey](#Journey) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### FileTransfer.update(fileTransfer) ⇒ Promise -Updates a single File Transfer +### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### FileTransfer.preDeployTasks(metadata) ⇒ Promise -prepares a fileTransfer for deployment +### Journey.\_postRetrieveTasksBulk(metadataMap) +helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise +**Kind**: static method of [Journey](#Journey) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | - + -### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem manages post retrieve steps +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## Filter ⇐ [MetadataType](#MetadataType) -Filter MetadataType +| metadata | TYPE.MetadataTypeItem | of a single TSD | -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - + -### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Filter. -Endpoint /automation/v1/filters/ returns all Filters, -but only with some of the fields. So it is needed to loop over -Filters with the endpoint /automation/v1/filters/{id} +### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Filter](#Filter) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Journey](#Journey) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -## Folder ⇐ [MetadataType](#MetadataType) -Folder MetadataType +## List ⇐ [MetadataType](#MetadataType) +List MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise - * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise - * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> - * [.create(metadataEntry)](#Folder.create) ⇒ Promise - * [.update(metadataEntry)](#Folder.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> - * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> +* [List](#List) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem - + -### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise -Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata +### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Lists -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [List](#List) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | content type of folder | +| [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise -Retrieves folder metadata for caching - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | content type of folder | - - - -### Folder.upsert(metadata) ⇒ Promise.<object> -Folder upsert (copied from Metadata Upsert), after retrieving from target -and comparing to check if create or update operation is needed. -Copied due to having a dependency on itself, meaning the created need to be serial - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk - +**Kind**: static method of [List](#List) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### Folder.create(metadataEntry) ⇒ Promise -creates a folder based on metatadata +### List.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [List](#List) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | +| customerKey | string | Identifier of data extension | - + -### Folder.update(metadataEntry) ⇒ Promise -Updates a single Folder. +### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| list | TYPE.MetadataTypeItem | a single list | - + -### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a folder for deployment +### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single folder definition | - - - -### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending - -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +| metadata | TYPE.MetadataTypeItem | a single list definition | +| [parseForCache] | boolean | if set to true, the Category ID is kept | -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | + - +## MetadataType +MetadataType class that gets extended by their specific metadata type class. +Provides default functionality that can be overwritten by child metadata type classes -### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> -Helper to retrieve the folders as promise +**Kind**: global class -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - soap object - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | -| [contentTypeList] | Array.<string> | content type of folder | +* [MetadataType](#MetadataType) + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - + -### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + - +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + -### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> -Helper for writing Metadata to disk, used for Retrieve and deploy +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| results | object | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| mid | number | current mid for this credential / business unit | - - - -## ImportFile ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(importFile)](#ImportFile.create) ⇒ Promise - * [.update(importFile)](#ImportFile.update) ⇒ Promise - * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Import File. -Endpoint /automation/v1/imports/ return all Import Files with all details. -Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - Fieldnames | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | - + -### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Import Definition by Name +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### ImportFile.create(importFile) ⇒ Promise -Creates a single Import File +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -### ImportFile.update(importFile) ⇒ Promise -Updates a single Import File +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### ImportFile.preDeployTasks(metadata) ⇒ Promise -prepares a import definition for deployment +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single importDef | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | - + -### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.MetadataTypeItem | a single item | - - -## Journey ⇐ [MetadataType](#MetadataType) -Journey MetadataType -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -id: A unique id of the journey assigned by the journey’s API during its creation -key: A unique id of the journey within the MID. Can be generated by the developer -definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.update(metadata)](#Journey.update) ⇒ Promise - * [.create(metadata)](#Journey.create) ⇒ Promise - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) - * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - - + -### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Journey +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | | [key] | string | customer key of single item to retrieve | - + -### Journey.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -### Journey.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [subType] | string | optionally limit to a single subtype | - + -### Journey.create(metadata) ⇒ Promise -Creates a single item +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| name | string | name (not key) of the metadata item | - + -### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Journey.\_postRetrieveTasksBulk(metadataMap) -helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata -**Kind**: static method of [Journey](#Journey) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | - + -### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | - + -### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - - -### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | -**Kind**: static method of [Journey](#Journey) -**Returns**: 'create' \| 'update' \| 'skip' - action to take + -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type - +**Kind**: static method of [MetadataType](#MetadataType) + -## List ⇐ [MetadataType](#MetadataType) -List MetadataType +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) + -* [List](#List) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type - +**Kind**: static method of [MetadataType](#MetadataType) + -### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Lists +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### List.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [List](#List) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | - + -### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| list | TYPE.MetadataTypeItem | a single list | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | - + -### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single list definition | -| [parseForCache] | boolean | if set to true, the Category ID is kept | - - - -## MetadataType -MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes - -**Kind**: global class - -* [MetadataType](#MetadataType) - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - + -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - + -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - + -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | - - +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata + +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| ex | Error | error that occured | - + -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id + +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | - + -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | +| ex | Error | exception | +| id | string | id or key of item | - + -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | - + -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | - + -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy **Kind**: static method of [MetadataType](#MetadataType) - +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type +| Param | Type | Description | +| --- | --- | --- | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types (e.g script, asset, query) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Returns**: Promise.<string> - subtype name | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Returns**: object - metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | - + -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | - + + +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| ex | object | response payload from REST API | - + -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | - + -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Returns**: Promise.<string> - key of metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| id | string | Identifier of metadata | - + -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types +### MetadataType.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | +| customerKey | string | Identifier of data extension | - + -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> +clean up after deleting a metadata item **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - +**Returns**: Promise.<void> - - Promise | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | - + -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Returns**: object - Metadata of BU in local directory | Param | Type | Description | | --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | - + -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - +| keyArr | Array.<string> | customerkey of the metadata | -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. + +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> **Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - + -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable +## MobileCode ⇐ [MetadataType](#MetadataType) +MobileCode MetadataType -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable +### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template +### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +## MobileKeyword ⇐ [MetadataType](#MetadataType) +MobileKeyword MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata +* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(metadata)](#MobileKeyword.create) ⇒ Promise + * [.update(metadata)](#MobileKeyword.update) ⇒ Promise + * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void + * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void + * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> + * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void + * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) + + +### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not +### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in +### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values +### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +retrieve an item and create a template from it -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| key | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names +### MobileKeyword.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MobileKeyword.update(metadata) ⇒ Promise +Updates a single item + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void +manages post retrieve steps + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | + + + +### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object +helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Object - returns found extension and file content + +| Param | Type | Description | +| --- | --- | --- | +| metadataScript | string | the code of the file | + + + +### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | | metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | @@ -5087,6496 +5019,2668 @@ handles extracted code if any are found for complex types | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes +### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure +### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares an event definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | +| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | +| deployDir | string | directory of deploy files | - + -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) +### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages +### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk +### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<string> - content for metadata.script | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id +### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of metadata | +| key | string | Identifier of item | - + -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### MobileKeyword.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| customerKey | string | Identifier of metadata item | - + -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item +### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +## MobileMessage ⇐ [MetadataType](#MetadataType) +MobileMessage MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#MobileMessage.update) ⇒ Promise + * [.create(metadata)](#MobileMessage.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> + * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> + * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> - + -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally +### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MobileMessage.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys +### MobileMessage.create(metadata) ⇒ Promise +Creates a single item + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<string> - code | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. +### MobileMessage.prepExtractedCode(code) ⇒ Object +helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Object - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | +| code | string | the code of the file | - + -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| metadata | TYPE.MetadataTypeItem | a single query | - + -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.MetadataTypeItem - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| metadata | TYPE.MetadataTypeItem | a single MobileMessage | +| deployDir | string | directory of deploy files | - + -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) | Param | Type | Description | | --- | --- | --- | | metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | | apiResponse | object | varies depending on the API call | - + -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id +### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [MobileMessage](#MobileMessage) | Param | Type | Description | | --- | --- | --- | | metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | | apiResponse | object | varies depending on the API call | - + -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + + +### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit +! the endpoint expects the ID and not a key but for mcdev in this case key==id + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| id | string | Identifier of item | - + -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +## Query ⇐ [MetadataType](#MetadataType) +Query MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +* [Query](#Query) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> + * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> + * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.create(query)](#Query.create) ⇒ Promise + * [.update(query)](#Query.update) ⇒ Promise + * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> + * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> + * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void + * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void + * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) - + -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves Metadata of queries -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### Query.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name +### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves query metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata + + +### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> +Retrieve a specific Query by Name + +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | +| name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | - + -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata +**Kind**: static method of [Query](#Query) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.QueryItem | a single query | - + -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata +### Query.create(query) ⇒ Promise +Creates a single query -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | +| query | TYPE.QueryItem | a single query | - + -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type +### Query.update(query) ⇒ Promise +Updates a single query -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | +| query | TYPE.QueryItem | a single query | - + -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type +### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> +prepares a Query for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<TYPE.QueryItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type +| metadata | TYPE.QueryItem | a single query activity | +| deployDir | string | directory of deploy files | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type +### Query.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) +searches extracted SQL file for template variables and applies the market values -**Kind**: static method of [MetadataType](#MetadataType) - +**Kind**: static method of [Query](#Query) +**Returns**: string - code with markets applied -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type +| Param | Type | Description | +| --- | --- | --- | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +queries are saved as 1 json and 1 sql file. both files need to be run through templating +``` + -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. +### Query.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### Query.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| ex | object | response payload from REST API | - + -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | - - - -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) +### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - - - -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +| customerKey | string | Identifier of data extension | -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | + - +### Query.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Query](#Query) | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| customerKey | string | Identifier of metadata item | - + -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) +### Query.postDeployTasks(upsertResults) +Gets executed after deployment of metadata type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message +**Kind**: static method of [Query](#Query) | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | - + -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +## Role ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +* [Role](#Role) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.create(metadata)](#Role.create) ⇒ Promise + * [.update(metadata)](#Role.update) ⇒ Promise + * [.document([metadata])](#Role.document) ⇒ Promise.<void> + * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void - + -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types +### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +**Kind**: static method of [Role](#Role) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | +| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [___] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed before deploying metadata -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - +**Kind**: static method of [Role](#Role) +**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| metadata | TYPE.MetadataTypeItem | a single metadata item | - + -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. +### Role.create(metadata) ⇒ Promise +Create a single Role. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. +### Role.update(metadata) ⇒ Promise +Updates a single Role. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) +### Role.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Role](#Role) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | - - - -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | +| [metadata] | TYPE.MetadataTypeMap | role definitions | -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - + -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable +### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void +iterates through permissions to output proper row-names for nested permissionss -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Role](#Role) | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| role | string | name of the user role | +| element | object | data of the permission | +| [permission] | string | name of the permission | +| [isAllowed] | string | "true" / "false" from the | - + -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable +## Script ⇐ [MetadataType](#MetadataType) +Script MetadataType -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +* [Script](#Script) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> + * [.update(script)](#Script.update) ⇒ Promise + * [.create(script)](#Script.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> + * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void - + -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template +### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves Metadata of Script +Endpoint /automation/v1/scripts/ return all Scripts with all details. -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | - - - -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | - - - -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | - - - -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | - - - -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - - -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | - - - -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory - -| Param | Type | Description | -| --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | - - - -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | - - - -## MobileCode ⇐ [MetadataType](#MetadataType) -MobileCode MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. - -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -## MobileKeyword ⇐ [MetadataType](#MetadataType) -MobileKeyword MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(metadata)](#MobileKeyword.create) ⇒ Promise - * [.update(metadata)](#MobileKeyword.update) ⇒ Promise - * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void - * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> - * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void - * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> - - - -### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -retrieve an item and create a template from it - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MobileKeyword.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void -manages post retrieve steps - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object -helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | - - - -### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares an event definition for deployment - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | -| deployDir | string | directory of deploy files | - - - -### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -### MobileKeyword.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## MobileMessage ⇐ [MetadataType](#MetadataType) -MobileMessage MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#MobileMessage.update) ⇒ Promise - * [.create(metadata)](#MobileMessage.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> - * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> - * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> - - - -### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### MobileMessage.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileMessage.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<string> - code - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### MobileMessage.prepExtractedCode(code) ⇒ Object -helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| code | string | the code of the file | - - - -### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileMessage | -| deployDir | string | directory of deploy files | - - - -### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MobileMessage](#MobileMessage) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MobileMessage](#MobileMessage) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit -! the endpoint expects the ID and not a key but for mcdev in this case key==id - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of item | - - - -## Query ⇐ [MetadataType](#MetadataType) -Query MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Query](#Query) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> - * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> - * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.create(query)](#Query.create) ⇒ Promise - * [.update(query)](#Query.update) ⇒ Promise - * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> - * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> - * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void - * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void - * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) - - - -### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves Metadata of queries - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Query.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves query metadata for caching - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - - -### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> -Retrieve a specific Query by Name - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Query](#Query) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.QueryItem | a single query | - - - -### Query.create(query) ⇒ Promise -Creates a single query - -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| query | TYPE.QueryItem | a single query | - - - -### Query.update(query) ⇒ Promise -Updates a single query - -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| query | TYPE.QueryItem | a single query | - - - -### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> -prepares a Query for deployment - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<TYPE.QueryItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.QueryItem | a single query activity | -| deployDir | string | directory of deploy files | - - - -### Query.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) -searches extracted SQL file for template variables and applies the market values - -**Kind**: static method of [Query](#Query) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -queries are saved as 1 json and 1 sql file. both files need to be run through templating -``` - - -### Query.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Query.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts - -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> \| void - formatted Error Message - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | - - - -### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Query.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [Query](#Query) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### Query.postDeployTasks(upsertResults) -Gets executed after deployment of metadata type - -**Kind**: static method of [Query](#Query) - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | - - - -## Role ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Role](#Role) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.create(metadata)](#Role.create) ⇒ Promise - * [.update(metadata)](#Role.update) ⇒ Promise - * [.document([metadata])](#Role.document) ⇒ Promise.<void> - * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void - - - -### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [___] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed before deploying metadata - -**Kind**: static method of [Role](#Role) -**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | - - - -### Role.create(metadata) ⇒ Promise -Create a single Role. - -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### Role.update(metadata) ⇒ Promise -Updates a single Role. - -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### Role.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles - -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | role definitions | - - - -### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void -iterates through permissions to output proper row-names for nested permissionss - -**Kind**: static method of [Role](#Role) - -| Param | Type | Description | -| --- | --- | --- | -| role | string | name of the user role | -| element | object | data of the permission | -| [permission] | string | name of the permission | -| [isAllowed] | string | "true" / "false" from the | - - - -## Script ⇐ [MetadataType](#MetadataType) -Script MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Script](#Script) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> - * [.update(script)](#Script.update) ⇒ Promise - * [.create(script)](#Script.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> - * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void - - - -### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves Metadata of Script -Endpoint /automation/v1/scripts/ return all Scripts with all details. - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves script metadata for caching - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - - -### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> -Retrieve a specific Script by Name - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Script.update(script) ⇒ Promise -Updates a single Script - -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | - - - -### Script.create(script) ⇒ Promise -Creates a single Script - -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | - - - -### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single asset definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem -prepares a Script for deployment - -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.ScriptItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single script activity definition | -| dir | string | directory of deploy files | - - - -### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single item | - - - -### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object -helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) - -**Kind**: static method of [Script](#Script) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | -| metadataName | string | the name of the metadata | - - - -### Script.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Script](#Script) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Script.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [Script](#Script) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -## SendClassification ⇐ [MetadataType](#MetadataType) -SendClassification MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - - -### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [SendClassification](#SendClassification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalEmail MetadataType - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise - * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void - * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void - * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> - - - -### TransactionalEmail.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | - - - -### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void -helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - -| Param | Type | Description | -| --- | --- | --- | -| _ | TYPE.MetadataTypeItem | not used | -| apiResponse | object | varies depending on the API call | - - - -### TransactionalEmail.postDeployTasks() ⇒ void -Gets executed after deployment of metadata type - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - - -### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## TransactionalMessage ⇐ [MetadataType](#MetadataType) -TransactionalMessage MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise - * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise - * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> - - - -### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to cache | - - - -### TransactionalMessage.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalMessage.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalPush TransactionalMessage - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment - -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalSMS MetadataType - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void - * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> - * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean - * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> - - - -### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares for deployment - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| deployDir | string | directory of deploy files | - - - -### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> -manages post retrieve steps - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> -helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | - - - -### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### TransactionalSMS.\_isHTML(code) ⇒ boolean -very simplified test for HTML code in our SMS - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: boolean - true if HTML is found - -| Param | Type | Description | -| --- | --- | --- | -| code | string | sms source code | - - - -### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## TriggeredSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#TriggeredSend.create) ⇒ Promise - * [.update(metadata)](#TriggeredSend.update) ⇒ Promise - * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> - * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> - * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> - - - -### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### TriggeredSend.create(metadata) ⇒ Promise -Create a single TSD. - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### TriggeredSend.update(metadata) ⇒ Promise -Updates a single TSD. - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -parses retrieved Metadata before saving - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - - -### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> -TSD-specific refresh method that finds active TSDs and refreshes them - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [keyArr] | Array.<string> | | metadata keys | -| [checkKey] | boolean | true | whether to check if the key is valid | - - - -### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> -helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<Array.<string>> - keyArr - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMapObj | TSD item map | - - - -### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | - - - -### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> -helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - true if refresh was successful - -| Param | Type | Description | -| --- | --- | --- | -| key | string | external key of triggered send item | -| checkKey | boolean | whether to check if key exists on the server | - - - -## User ⇐ [MetadataType](#MetadataType) -MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [User](#User) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#User.create) ⇒ Promise - * [.update(metadata)](#User.update) ⇒ Promise - * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument - * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void - * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> - * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object - * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.document([metadata])](#User.document) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - - - -### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -### User.create(metadata) ⇒ Promise -Create a single item. - -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### User.update(metadata) ⇒ Promise -Updates a single item. - -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument -prepares a item for deployment - -**Kind**: static method of [User](#User) -**Returns**: TYPE.UserDocument - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.UserDocument | of a single item | - - - -### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [User](#User) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | - - - -### User.postDeployTasks(upsertResults) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - promise - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | - - - -### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object -helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) - -**Kind**: static method of [User](#User) -**Returns**: object - format needed by API - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| roleId | string | | role.ObjectID | -| roleName | string | | role.Name | -| userId | number | | user.AccountUserID | -| assignmentOnly | boolean | | if true, only assignment configuration will be returned | -| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | - - - -### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### User.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles - -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | user list | - - - -### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -manages post retrieve steps - -**Kind**: static method of [User](#User) -**Returns**: TYPE.MetadataTypeItem \| void - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -## Verification ⇐ [MetadataType](#MetadataType) -Verification MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null - * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#Verification.create) ⇒ Promise - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void - * [.update(metadata)](#Verification.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem - * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem - * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> - - - -### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Verification Activity. - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| key | string | customer key of single item to retrieve | - - - -### Verification.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - -**Kind**: static method of [Verification](#Verification) -**Returns**: null - - - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### Verification.create(metadata) ⇒ Promise -Creates a single Data Extract - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | - - - -### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [Verification](#Verification) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - - - -### Verification.update(metadata) ⇒ Promise -Updates a single Data Extract - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | - - - -### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem -prepares a verification for deployment - -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | - - - -### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem -parses retrieved Metadata before saving - -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | - - - -### Verification.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## Retriever -Retrieves metadata from a business unit and saves it to the local filesystem. - -**Kind**: global class - -* [Retriever](#Retriever) - * [new Retriever(properties, buObject)](#new_Retriever_new) - * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> - - - -### new Retriever(properties, buObject) -Creates a Retriever, uses v2 auth if v2AuthOptions are passed. - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| buObject | TYPE.BuObject | properties for auth | - - - -### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve metadata of specified types into local file system and Retriever.metadata - -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} - -| Param | Type | Description | -| --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | -| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | -| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - - -### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types - -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types - -| Param | Type | Description | -| --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | - - - -## Mcdev -main class - -**Kind**: global class - -* [Mcdev](#Mcdev) - * [.version()](#Mcdev.version) ⇒ string - * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void - * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void - * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void - * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise - * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> - * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> - * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> - * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> - * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> - * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> - * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> - * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> - * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> - * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> - * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> - * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> - * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> - * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> - * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> - * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> - * [.version()](#Mcdev.version) ⇒ string - * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void - * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void - * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void - * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise - * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> - * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> - * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> - * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> - * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> - * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> - * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> - * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> - * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> - * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> - * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> - * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> - * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> - * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> - * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> - * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> - - - -### Mcdev.version() ⇒ string -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: string - current version of mcdev - - -### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void -helper method to use unattended mode when including mcdev as a package - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | - - - -### Mcdev.setLoggingLevel(argv) ⇒ void -configures what is displayed in the console - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | -| [argv.silent] | boolean | only errors printed to CLI | -| [argv.verbose] | boolean | chatty user CLI output | -| [argv.debug] | boolean | enables developer output & features | - - - -### Mcdev.setOptions(argv) ⇒ void -allows setting system wide / command related options - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | - - - -### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -handler for 'mcdev createDeltaPkg - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | yargs parameters | -| [argv.range] | string | git commit range into deploy directory | -| [argv.filter] | string | filter file paths that start with any | -| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | - - - -### Mcdev.selectTypes() ⇒ Promise -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise - . - - -### Mcdev.explainTypes() ⇒ Array.<object> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Array.<object> - list of supported types with their apiNames - - -### Mcdev.upgrade() ⇒ Promise.<boolean> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - success flag - - -### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> -Retrieve all metadata from the specified business unit into the local file system. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<object> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | -| [keys] | Array.<string> | limit retrieval to given metadata key | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - - -### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> -Deploys all metadata located in the 'deploy' directory to the specified business unit - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [credentialsName] | string | identifying name of the installed package / project | - - - -### Mcdev.joinProject() ⇒ Promise.<void> -Clones an existing project from git repository and installs it - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - - -### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> -Refreshes BU names and ID's from MC instance - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| credentialsName | string | identifying name of the installed package / project | - - - -### Mcdev.document(businessUnit, type) ⇒ Promise.<void> -Creates docs for supported metadata types in Markdown and/or HTML format - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | metadata type | - - - -### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> -deletes metadata from MC instance by key - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if successful, false otherwise - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| customerKey | string | Identifier of metadata | - - - -### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| id | string | Identifier of metadata | - - - -### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> -ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | references credentials from properties.json | -| [keyArr] | Array.<string> | metadata keys | - - - -### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> -Converts metadata to legacy format. Output is saved in 'converted' directory - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | - - - -### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve a specific metadata file and templatise. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | Array.<string> | name of the metadata | -| market | string | market which should be used to revert template | - - - -### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> -Build a specific metadata file based on a template. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | string | name of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> -Build a specific metadata file based on a template using a list of bu-market combos - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| listName | string | name of list of BU-market combos | -| type | string | supported metadata type | -| name | string | name of the metadata | - - - -### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Schedule an item (shortcut for execute --schedule) - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Start/execute an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -pause an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Updates the key to match the name field - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.version() ⇒ string -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: string - current version of mcdev - - -### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void -helper method to use unattended mode when including mcdev as a package - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | - - - -### Mcdev.setLoggingLevel(argv) ⇒ void -configures what is displayed in the console - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | -| [argv.silent] | boolean | only errors printed to CLI | -| [argv.verbose] | boolean | chatty user CLI output | -| [argv.debug] | boolean | enables developer output & features | - - - -### Mcdev.setOptions(argv) ⇒ void -allows setting system wide / command related options - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | - - - -### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -handler for 'mcdev createDeltaPkg - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | yargs parameters | -| [argv.range] | string | git commit range into deploy directory | -| [argv.filter] | string | filter file paths that start with any | -| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | - - - -### Mcdev.selectTypes() ⇒ Promise -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise - . - - -### Mcdev.explainTypes() ⇒ Array.<object> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Array.<object> - list of supported types with their apiNames - - -### Mcdev.upgrade() ⇒ Promise.<boolean> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - success flag - - -### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> -Retrieve all metadata from the specified business unit into the local file system. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<object> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | -| [keys] | Array.<string> | limit retrieval to given metadata key | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - - -### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> -Deploys all metadata located in the 'deploy' directory to the specified business unit - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [credentialsName] | string | identifying name of the installed package / project | - - - -### Mcdev.joinProject() ⇒ Promise.<void> -Clones an existing project from git repository and installs it - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - - -### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> -Refreshes BU names and ID's from MC instance - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| credentialsName | string | identifying name of the installed package / project | - - - -### Mcdev.document(businessUnit, type) ⇒ Promise.<void> -Creates docs for supported metadata types in Markdown and/or HTML format - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | metadata type | - - - -### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> -deletes metadata from MC instance by key - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if successful, false otherwise - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| customerKey | string | Identifier of metadata | - - - -### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| id | string | Identifier of metadata | - - - -### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> -ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | references credentials from properties.json | -| [keyArr] | Array.<string> | metadata keys | - - - -### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> -Converts metadata to legacy format. Output is saved in 'converted' directory - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | - - - -### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve a specific metadata file and templatise. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | Array.<string> | name of the metadata | -| market | string | market which should be used to revert template | - - - -### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> -Build a specific metadata file based on a template. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | string | name of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> -Build a specific metadata file based on a template using a list of bu-market combos - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| listName | string | name of list of BU-market combos | -| type | string | supported metadata type | -| name | string | name of the metadata | - - - -### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Schedule an item (shortcut for execute --schedule) - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Start/execute an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -pause an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Updates the key to match the name field - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -## Asset ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - - - -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | - - - -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - - - -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - - - -### Asset.create(metadata) ⇒ Promise -Creates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.update(metadata) ⇒ Promise -Updates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | - - - -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | - - - -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - - - -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | - - - -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType - -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc - -| Param | Type | Description | -| --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | - - - -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - - -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | - - - -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | - - - -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | - - - -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | - - - -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | - - - -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - - -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | - - - -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - - - -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - - - -### Asset.create(metadata) ⇒ Promise -Creates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.update(metadata) ⇒ Promise -Updates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | - - - -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | - - - -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - - - -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | - - - -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType - -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc - -| Param | Type | Description | -| --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | - - - -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - - -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | - - - -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | - - - -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | | [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | - - - -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | - - - -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | - - - -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - - -## MetadataType -MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes - -**Kind**: global class - -* [MetadataType](#MetadataType) - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - +### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves script metadata for caching -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise + -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - +### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> +Retrieve a specific Script by Name -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - + -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - +### Script.update(script) ⇒ Promise +Updates a single Script -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - +**Kind**: static method of [Script](#Script) +**Returns**: Promise - Promise -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +| Param | Type | Description | +| --- | --- | --- | +| script | TYPE.MetadataTypeItem | a single Script | -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map + + +### Script.create(script) ⇒ Promise +Creates a single Script + +**Kind**: static method of [Script](#Script) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| script | TYPE.MetadataTypeItem | a single Script | - + -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. +### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<string> - content for metadata.script | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | +| metadata | TYPE.ScriptItem | a single asset definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem +prepares a Script for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.ScriptItem - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| metadata | TYPE.ScriptItem | a single script activity definition | +| dir | string | directory of deploy files | - + -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id +### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| metadata | TYPE.ScriptItem | a single item | - + -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object +helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Kind**: static method of [Script](#Script) +**Returns**: Object - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | +| metadataScript | string | the code of the file | +| metadataName | string | the name of the metadata | - + -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Script.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [Script](#Script) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<boolean> - deletion success flag + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of data extension | + + + +### Script.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item + +**Kind**: static method of [Script](#Script) + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | + + + +## SendClassification ⇐ [MetadataType](#MetadataType) +SendClassification MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + + +### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [SendClassification](#SendClassification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalEmail MetadataType + +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) + +* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise + * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void + * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void + * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> + + + +### TransactionalEmail.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | - + -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - Promise | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void +helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | - - - -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +| _ | TYPE.MetadataTypeItem | not used | +| apiResponse | object | varies depending on the API call | -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata + -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +### TransactionalEmail.postDeployTasks() ⇒ void +Gets executed after deployment of metadata type - +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) + -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - a single item | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | +| key | string | Identifier of item | - + -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name +## TransactionalMessage ⇐ [MetadataType](#MetadataType) +TransactionalMessage MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | +* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise + * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise + * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> - + -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata +### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to cache | - + -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type +### TransactionalMessage.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type +### TransactionalMessage.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type +| metadata | TYPE.MetadataTypeItem | a single item | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type +### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) - +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<boolean> - deletion success status -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalPush TransactionalMessage -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | +* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - Promise | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. +### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - a single item | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalSMS MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void + * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> + * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean + * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> - + -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST +### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | +| customerKey | string | Identifier of metadata item | - + -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) +### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.MetadataTypeItem | a single item | +| deployDir | string | directory of deploy files | - + -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST +### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<string> - content for metadata.script -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) +### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) +### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> +helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadataScript | string | the code of the file | - + -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) +### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types +### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +### TransactionalSMS.\_isHTML(code) ⇒ boolean +very simplified test for HTML code in our SMS -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: boolean - true if HTML is found - +| Param | Type | Description | +| --- | --- | --- | +| code | string | sms source code | -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - +### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. +## TriggeredSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#TriggeredSend.create) ⇒ Promise + * [.update(metadata)](#TriggeredSend.update) ⇒ Promise + * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void + * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> + * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> + * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> + + + +### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. +### TriggeredSend.create(metadata) ⇒ Promise +Create a single TSD. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) +### TriggeredSend.update(metadata) ⇒ Promise +Updates a single TSD. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| customerKey | string | Identifier of data extension | - + -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. +### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +parses retrieved Metadata before saving -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | +| metadata | TYPE.MetadataTypeItem | a single item | -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - + -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable +### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.MetadataTypeItem | of a single TSD | - + -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable +### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> +TSD-specific refresh method that finds active TSDs and refreshes them -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<void> - - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [keyArr] | Array.<string> | | metadata keys | +| [checkKey] | boolean | true | whether to check if the key is valid | - + -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template +### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> +helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<Array.<string>> - keyArr | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.MetadataTypeMapObj | TSD item map | - + -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata +### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | - + -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not +### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> +helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - true if refresh was successful | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| key | string | external key of triggered send item | +| checkKey | boolean | whether to check if key exists on the server | - + -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in +## User ⇐ [MetadataType](#MetadataType) +MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +* [User](#User) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#User.create) ⇒ Promise + * [.update(metadata)](#User.update) ⇒ Promise + * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument + * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void + * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> + * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object + * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.document([metadata])](#User.document) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - + -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values +### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### User.create(metadata) ⇒ Promise +Create a single item. + +**Kind**: static method of [User](#User) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names +### User.update(metadata) ⇒ Promise +Updates a single item. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [User](#User) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) +### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument +prepares a item for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [User](#User) +**Returns**: TYPE.UserDocument - metadata object | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadata | TYPE.UserDocument | of a single item | - + -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [User](#User) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadata | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | - + -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes +### User.postDeployTasks(upsertResults) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name +**Kind**: static method of [User](#User) +**Returns**: Promise.<void> - promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | - + -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure +### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object +helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata +**Kind**: static method of [User](#User) +**Returns**: object - format needed by API -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| roleId | string | | role.ObjectID | +| roleName | string | | role.Name | +| userId | number | | user.AccountUserID | +| assignmentOnly | boolean | | if true, only assignment configuration will be returned | +| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | - + -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) +### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [User](#User) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages +### User.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [User](#User) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| [metadata] | TYPE.MetadataTypeMap | user list | - + -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk +### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [User](#User) +**Returns**: TYPE.MetadataTypeItem \| void - a single item | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id +## Verification ⇐ [MetadataType](#MetadataType) +Verification MetadataType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | +* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null + * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#Verification.create) ⇒ Promise + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void + * [.update(metadata)](#Verification.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem + * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem + * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> - + -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Verification Activity. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| key | string | customer key of single item to retrieve | - + -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item +### Verification.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise +**Kind**: static method of [Verification](#Verification) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | +| ex | Error | exception | +| id | string | id or key of item | - + -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### Verification.create(metadata) ⇒ Promise +Creates a single Data Extract + +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.VerificationItem | a single Data Extract | - + -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Verification](#Verification) | Param | Type | Description | | --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally +### Verification.update(metadata) ⇒ Promise +Updates a single Data Extract -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | +| metadata | TYPE.VerificationItem | a single Data Extract | - + -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem +prepares a verification for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - metadata object | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.VerificationItem | a single verification activity definition | - + -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys +### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem +parses retrieved Metadata before saving + +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| metadata | TYPE.VerificationItem | a single verification activity definition | - + -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### Verification.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| key | string | Identifier of item | - + -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. +## Retriever +Retrieves metadata from a business unit and saves it to the local filesystem. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames +**Kind**: global class -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | +* [Retriever](#Retriever) + * [new Retriever(properties, buObject)](#new_Retriever_new) + * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> - + -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### new Retriever(properties, buObject) +Creates a Retriever, uses v2 auth if v2AuthOptions are passed. -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | +| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | +| buObject | TYPE.BuObject | properties for auth | - + -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve metadata of specified types into local file system and Retriever.metadata -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | +| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | +| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | +| [changelogOnly] | boolean | skip saving, only create json in memory | - + -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> +helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | - + -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +## Asset ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> + * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> + * [.create(metadata)](#Asset.create) ⇒ Promise + * [.update(metadata)](#Asset.update) ⇒ Promise + * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise + * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise + * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> + * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> + * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Asset.setFolderPath) + * [.setFolderId(metadata)](#Asset.setFolderId) + * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> + * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> + * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem + * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void + * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem + * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void + * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - + -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - + -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### Asset.create(metadata) ⇒ Promise +Creates a single asset -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.AssetItem | a single asset | - + -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### Asset.update(metadata) ⇒ Promise +Updates a single asset -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.AssetItem | a single asset | - + -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | - + -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | - + -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - + -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.AssetItem | a single asset | - + -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type +| extendedSubType | string | webpage, htmlblock, etc | -**Kind**: static method of [MetadataType](#MetadataType) - + -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Default | Description | | --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.AssetItem | a single asset definition | - + -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| ex | Error | error that occured | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | - + -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | +| customerKey | string | Identifier of data extension | - + -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | +| customerKey | string | Identifier of metadata item | - + -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found + +| Param | Type | Description | +| --- | --- | --- | +| id | string | Identifier of metadata | + + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response +### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves Metadata of Asset + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | - | +| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | +| [key] | string | customer key | - + -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) +### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> +Retrieves asset metadata for caching -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> +Retrieves asset metadata for templating -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - + -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. +### Asset.create(metadata) ⇒ Promise +Creates a single asset -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | +| metadata | TYPE.AssetItem | a single asset | -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - + -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable +### Asset.update(metadata) ⇒ Promise +Updates a single asset -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.AssetItem | a single asset | - + -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable +### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise +Retrieves Metadata of a specific asset type -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| [retrieveDir] | string | target directory for saving assets | +| [templateName] | string | name of the metadata file | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| key | string | customer key to filter by | - + -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template +### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise +Retrieves extended metadata (files or extended content) of asset -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| items | Array | array of items to retrieve | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata +### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> +Some metadata types store their actual content as a separate file, e.g. images +This method retrieves these and saves them alongside the metadata json -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| metadata | TYPE.AssetItem | a single asset | +| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | +| retrieveDir | string | target directory for saving assets | - + -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not +### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> +helper for [preDeployTasks](#Asset.preDeployTasks) +Some metadata types store their actual content as a separate file, e.g. images +This method reads these from the local FS stores them in the metadata object allowing to deploy it -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<string> - if found will return the path of the binary file -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset | +| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | +| deployDir | string | | directory of deploy files | +| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - + -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in +### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| metadata | TYPE.AssetItem | a single asset | - + -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values +### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> +prepares an asset definition for deployment -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetItem> - Promise | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.AssetItem | a single asset | +| deployDir | string | directory of deploy files | - + -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names +### Asset.\_getMainSubtype(extendedSubType) ⇒ string +find the subType matching the extendedSubType -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied +**Kind**: static method of [Asset](#Asset) +**Returns**: string - subType: block, message, other, etc | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| extendedSubType | string | webpage, htmlblock, etc | - + -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - +**Example** +```js +assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +``` + -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes +### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| targetDir | string | Directory where built definitions will be saved | +| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure +### Asset.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve + +**Kind**: static method of [Asset](#Asset) + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | + + + +### Asset.setFolderId(metadata) +Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) +### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadata | TYPE.AssetItem | | a single asset definition | +| deployDir | string | | directory of deploy files | +| subType | TYPE.AssetSubType | | asset-subtype name | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages +### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<void> - - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| prefix | string | | usually the customerkey | +| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| readDirArr | Array.<string> | | directory of deploy files | +| subtypeExtension | string | | asset-subtype name ending on -meta | +| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | +| fileList | Array.<object> | | directory of files w/o leading deploy dir | +| customerKey | string | | external key of template (could have been changed if used during templating) | +| [templateName] | string | | name of the template used to built defintion (prior applying templating) | +| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - + -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk +### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it +to allow saving that separately and formatted -**Kind**: static method of [MetadataType](#MetadataType) +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | - - +| metadata | TYPE.AssetItem | a single asset definition | -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata +### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of metadata | +| prefix | string | usually the customerkey | +| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | +| codeArr | Array.<object> | to be extended array for extracted code | - + -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their fileName without '.json' ending -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| dir | string | directory that contains '.json' files to be read | +| [_] | void | unused parameter | +| selectedSubType | Array.<string> | asset, message, ... | - + -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item +### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<TYPE.AssetSubType> - subtype name | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem +optional method used for some types to try a different folder structure -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Asset](#Asset) +**Returns**: TYPE.AssetItem - metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | - + -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Asset](#Asset) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| keyArr | Array.<string> | customerkey of the metadata | - + -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally +### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | +| customerKey | string | Identifier of data extension | - + -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Asset.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item +cannot use the generic method due to the complexity of how assets are saved to disk -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Asset](#Asset) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| customerKey | string | Identifier of metadata item | - + -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys +### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> +get name & key for provided id + +**Kind**: static method of [Asset](#Asset) +**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| id | string | Identifier of metadata | @@ -13743,77 +9847,6 @@ Returns an SDK instance to be used for API calls | sessionKey | string | key for specific BU | | authObject | TYPE.AuthObject | credentials for specific BU | - - -## csvToArray(csv) ⇒ Array.<string> -helper to convert CSVs into an array. if only one value was given, it's also returned as an array - -**Kind**: global function -**Returns**: Array.<string> - values split into an array. - -| Param | Type | Description | -| --- | --- | --- | -| csv | string | potentially comma-separated value or null | - - - -## Mcdev.(methodName, businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -run a method across BUs - -**Kind**: global function -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of affected item keys - -| Param | Type | Description | -| --- | --- | --- | -| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -## Mcdev.(methodName, cred, bu, [type], keyArr) ⇒ Promise.<Array.<string>> -helper for [Mcdev.#runMethod](Mcdev.#runMethod) - -**Kind**: global function -**Returns**: Promise.<Array.<string>> - list of keys that were affected - -| Param | Type | Description | -| --- | --- | --- | -| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | -| cred | string | name of Credential | -| bu | string | name of BU | -| [type] | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## Mcdev.(selectedType, buObject) ⇒ Array.<string> -helper for [Mcdev.#runOnBU](Mcdev.#runOnBU) - -**Kind**: global function -**Returns**: Array.<string> - keyArr - -| Param | Type | Description | -| --- | --- | --- | -| selectedType | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| buObject | TYPE.BuObject | properties for auth | - - - -## Mcdev.(cred, bu, type, [keyArr]) ⇒ Promise.<Array.<string>> -Updates the key to match the name field - -**Kind**: global function -**Returns**: Promise.<Array.<string>> - list of keys that were affected - -| Param | Type | Description | -| --- | --- | --- | -| cred | string | name of Credential | -| bu | string | name of BU | -| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| [keyArr] | Array.<string> | customerkey of the metadata | - ## TypeKeyCombo : Object.<string, string> diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index a403890d2..febd1a0b9 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -1696,17 +1696,16 @@ class Asset extends MetadataType { * @returns {Promise.<{key:string, name:string, path:string}>} key, name and path of metadata; null if not found */ static async resolveId(id) { - const uri = '/asset/v1/content/assets/query'; - const payload = { - query: { - property: 'id', - simpleOperator: 'equal', - value: id, - }, - }; - const response = await this.client.rest.post(uri, payload); - if (response.items.length === 1) { - const item = response.items[0]; + let response; + try { + response = await this.client.rest.get('asset/v1/content/assets/' + id); + } catch (ex) { + if (ex.response?.status !== 404) { + throw ex; + } + } + if (response?.id) { + const item = response; const subType = this._getMainSubtype(item.assetType.name); // find path for code of content block, fall back to json if not found; undefined if not even the json exists const pathBase1 = `./retrieve/${this.buObject.credential}/${this.buObject.businessUnit}/${this.definition.type}/${subType}/${item[this.definition.keyField]}.${this.definition.type}-${subType}-meta.`; From b98c700030a2c6cf8b2b4fa568c02678212a498c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Mon, 25 Mar 2024 12:46:02 +0100 Subject: [PATCH 3/5] #1238: add owning MID to response --- lib/metadataTypes/Asset.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index febd1a0b9..778f3972d 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -1721,6 +1721,7 @@ class Asset extends MetadataType { key: item[this.definition.keyField], name: item[this.definition.nameField], path: path, + mid: item.memberId, }; if (Util.OPTIONS.json) { // for automated processing by VSCode extension, optionally print the json From fa4e9499a018e7f9f8a27dbb7a3289dd53ac586e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Mon, 25 Mar 2024 12:48:26 +0100 Subject: [PATCH 4/5] #1238: add proper error response for id-not-found and file-not-found --- lib/metadataTypes/Asset.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 778f3972d..210c63800 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -1720,27 +1720,37 @@ class Asset extends MetadataType { const json = { key: item[this.definition.keyField], name: item[this.definition.nameField], - path: path, mid: item.memberId, }; + if (path) { + json.path = path; + } else { + json.error = 'file not found on local disk'; + } if (Util.OPTIONS.json) { // for automated processing by VSCode extension, optionally print the json - if (Util.OPTIONS.loggerLevel !== 'error') { - console.log(JSON.stringify(json, null, 2)); // eslint-disable-line no-console - } + console.log(JSON.stringify(json, null, 2)); // eslint-disable-line no-console } else { Util.logger.info( ` - ${this.definition.type}-${subType} found: ${item[this.definition.keyField]} (${item[this.definition.nameField]})` ); - Util.logger.info(' - link: ' + path); + Util.logger.info( + ' - link: ' + + (path || + `404. Try running mcdev r ${this.buObject.credential}/${this.buObject.businessUnit} ${this.definition.type}-${subType} ${item[this.definition.keyField]}`) + ); } return json; } else { + const json = { + error: 'id not found', + }; if (Util.OPTIONS.json) { - return null; + console.log(JSON.stringify(json, null, 2)); // eslint-disable-line no-console + return json; } Util.logger.error(` - ${this.definition.type} with id ${id} not found on BU`); - return null; + return json; } } } From 3ac6d8fcd4b80523e4221c26207451f9f549d5ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Mon, 25 Mar 2024 12:49:49 +0100 Subject: [PATCH 5/5] #1238: add test-cases for resolveId method --- docs/dist/documentation.md | 7122 +++++++---------- .../resolveId-1234-notFound-expected.json | 1 + .../resolveId-1295064-noPath-expected.json | 6 + .../resolveId-1295064-withPath-expected.json | 6 + test/type.asset.test.js | 61 + 5 files changed, 2988 insertions(+), 4208 deletions(-) create mode 100644 test/resources/9999999/asset/resolveId-1234-notFound-expected.json create mode 100644 test/resources/9999999/asset/resolveId-1295064-noPath-expected.json create mode 100644 test/resources/9999999/asset/resolveId-1295064-withPath-expected.json diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 4aa1defae..e5895a01f 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -132,9 +132,6 @@ Provides default functionality that can be overwritten by child metadata type cl
Retriever

Retrieves metadata from a business unit and saves it to the local filesystem.

-
AssetMetadataType
-

FileTransfer MetadataType

-
## Constants @@ -245,6 +242,12 @@ helper for DataExtension.#fixShared_item
setupSDK(sessionKey, authObject)SDK

Returns an SDK instance to be used for API calls

+
getActualJson(customerKey, type, subtype, [buName])Promise.<string>
+

gets file from Retrieve folder

+
+
getActualFile(customerKey, type, subtype, ext)string
+

gets file from Retrieve folder

+
## Typedefs @@ -912,35 +915,6 @@ FileTransfer MetadataType * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> @@ -1352,485 +1326,467 @@ get name & key for provided id | --- | --- | --- | | id | string | Identifier of metadata | - + -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset +## AttributeGroup ⇐ [MetadataType](#MetadataType) +AttributeGroup MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | +* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching +### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating +### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema attribute groups for caching. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -### Asset.create(metadata) ⇒ Promise -Creates a single asset +## AttributeSet ⇐ [MetadataType](#MetadataType) +AttributeSet MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> + * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> - + -### Asset.update(metadata) ⇒ Promise -Updates a single asset +### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set Definitions. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type +### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set definitions for caching. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> +used to identify updated shared data extensions that are used in attributeSets. +helper for DataExtension.#fixShared_onBU + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs | Param | Type | Description | | --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | +| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | +| fixShared_fields | object | DataExtensionField.fixShared_fields | - + -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset +### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json +### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | +| metadata | TYPE.MetadataTypeItem | a single metadata | - + -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it +### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> +helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Array.<object> - all system value definitions + -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | +## Automation ⇐ [MetadataType](#MetadataType) +Automation MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> + * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null + * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> + * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void + * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> + * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void + * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> + * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> + * [.create(metadata)](#Automation.create) ⇒ Promise + * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> + * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean + * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> + * [.setFolderPath(metadata)](#Automation.setFolderPath) + * [.setFolderId(metadata)](#Automation.setFolderId) + * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap + * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string + * [.document([metadata])](#Automation.document) ⇒ Promise.<void> + * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata + + +### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type + -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +### Automation.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise +**Kind**: static method of [Automation](#Automation) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | +| ex | Error | exception | +| id | string | id or key of item | - + -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType +### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves Metadata of Automation -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + -| Param | Type | Description | -| --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | +### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> +Retrieves automation metadata for caching - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata + -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> +Retrieve a specific Automation Definition by Name -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - + -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationItem \| void - parsed item | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadata | TYPE.AutomationItem | a single automation | -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - + -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| ex | object | response payload from REST API | - + -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> +Deploys automation - the saved file is the original one due to large differences required for deployment -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationMap> - Promise -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationMap | metadata mapped by their keyField | +| targetBU | string | name/shorthand of target businessUnit for mapping | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +### Automation.create(metadata) ⇒ Promise +Creates a single automation -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise - Promise -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | single metadata entry | - + -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted +### Automation.update(metadata, metadataBefore) ⇒ Promise +Updates a single automation -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | +| metadata | TYPE.AutomationItem | single metadata entry | +| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | - + -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) +### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> +Gets executed before deploying metadata + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<TYPE.AutomationItem> - Promise | Param | Type | Description | | --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | +| metadata | TYPE.AutomationItem | metadata mapped by their keyField | - + -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending +### Automation.validateDeployMetadata(metadata) ⇒ boolean +Validates the automation to be sure it can be deployed. +Whitelisted Activites are deployed but require configuration -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - result if automation can be deployed based on steps | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | +| metadata | TYPE.AutomationItem | single automation record | - + -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes +### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> +Gets executed after deployment of metadata type -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | +| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | - + -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure +### Automation.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Automation.setFolderId(metadata) +automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap +Builds a schedule object to be used for scheduling an automation +based on combination of ical string and start/end dates. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Automation](#Automation) +**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | - + -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk +### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string +used to convert dates to the system timezone required for startDate -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Automation](#Automation) +**Returns**: string - date in server | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | +| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | +| [offsetInput] | string | timzone difference (+02:00) | - + -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id +### Automation.document([metadata]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of metadata | +| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | - + -## AttributeGroup ⇐ [MetadataType](#MetadataType) -AttributeGroup MetadataType +### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] -* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | - + -### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups. +### Automation.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Automation](#Automation) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups for caching. +| customerKey | string | Identifier of data extension | -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Automation.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Automation](#Automation) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | +| customerKey | string | Identifier of metadata item | - + -## AttributeSet ⇐ [MetadataType](#MetadataType) -AttributeSet MetadataType +## Campaign ⇐ [MetadataType](#MetadataType) +Campaign MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> - * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> +* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set Definitions. +### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets -**Kind**: static method of [AttributeSet](#AttributeSet) +**Kind**: static method of [Campaign](#Campaign) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | @@ -1840,99 +1796,47 @@ Retrieves Metadata of schema set Definitions. | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set definitions for caching. - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> -used to identify updated shared data extensions that are used in attributeSets. -helper for DataExtension.#fixShared_onBU - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs - -| Param | Type | Description | -| --- | --- | --- | -| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | -| fixShared_fields | object | DataExtensionField.fixShared_fields | - - - -### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map + -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching - +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Parses campaign asset response body and returns metadata entries mapped to their id -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Campaign](#Campaign) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | - - - -### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> -helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) +| retrieveDir | string | folder where to save | +| campaignId | string | of camapaign to retrieve | +| name | string | of camapaign for saving | -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Array.<object> - all system value definitions - + -## Automation ⇐ [MetadataType](#MetadataType) -Automation MetadataType +## ContentArea ⇐ [MetadataType](#MetadataType) +ContentArea MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> - * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null - * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> - * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void - * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> - * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void - * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> - * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> - * [.create(metadata)](#Automation.create) ⇒ Promise - * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> - * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean - * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Automation.setFolderPath) - * [.setFolderId(metadata)](#Automation.setFolderId) - * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap - * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string - * [.document([metadata])](#Automation.document) ⇒ Promise.<void> - * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void +* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.setFolderPath(metadata)](#ContentArea.setFolderPath) + * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation +### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -1941,788 +1845,771 @@ Retrieves Metadata of Automation | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### Automation.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### ContentArea.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve -**Kind**: static method of [Automation](#Automation) -**Returns**: null - - +**Kind**: static method of [ContentArea](#ContentArea) | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - - -### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves automation metadata for caching +| metadata | TYPE.MetadataTypeItem | a single script activity definition | -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - + -### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> -Retrieve a specific Automation Definition by Name +### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata +**Kind**: static method of [ContentArea](#ContentArea) +**Returns**: TYPE.MetadataTypeItem - parsed item | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void -manages post retrieve steps +## DataExtension ⇐ [MetadataType](#MetadataType) +DataExtension MetadataType -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationItem \| void - parsed item +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | a single automation | +* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) + * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.create(metadata)](#DataExtension.create) ⇒ Promise + * [.update(metadata)](#DataExtension.update) ⇒ Promise + * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void + * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> + * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem + * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> + * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> + * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> + * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> + * [.setFolderPath(metadata)](#DataExtension.setFolderPath) + * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> - + -### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### DataExtension.upsert(metadataMap) ⇒ Promise +Upserts dataExtensions after retrieving them from source and target to compare +if create or update operation is needed. -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | - + -### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts +### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API +### DataExtension.create(metadata) ⇒ Promise +Create a single dataExtension. Also creates their columns in 'dataExtension.columns' -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadata | TYPE.DataExtensionItem | single metadata entry | - + -### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> -Deploys automation - the saved file is the original one due to large differences required for deployment +### DataExtension.update(metadata) ⇒ Promise +Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMap> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationMap | metadata mapped by their keyField | -| targetBU | string | name/shorthand of target businessUnit for mapping | -| retrieveDir | string | directory where metadata after deploy should be saved | +| metadata | TYPE.DataExtensionItem | single metadata entry | - + -### Automation.create(metadata) ⇒ Promise -Creates a single automation +### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | +| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | +| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### Automation.update(metadata, metadataBefore) ⇒ Promise -Updates a single automation +### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | -| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> -Gets executed before deploying metadata +### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> +get shared dataExtensions from parent BU and merge them into the cache +helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItem> - Promise +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | metadata mapped by their keyField | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.validateDeployMetadata(metadata) ⇒ boolean -Validates the automation to be sure it can be deployed. -Whitelisted Activites are deployed but require configuration +### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - result if automation can be deployed based on steps +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AutomationItem | single automation record | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem +manages post retrieve steps -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: TYPE.DataExtensionItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | +| metadata | TYPE.DataExtensionItem | a single dataExtension | - + -### Automation.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> +prepares a DataExtension for deployment -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| metadata | TYPE.DataExtensionItem | a single data Extension | - + -### Automation.setFolderId(metadata) -automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### DataExtension.document([metadataMap]) ⇒ Promise.<void> +Parses metadata into a readable Markdown/HTML format then saves it -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | - + -### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap -Builds a schedule object to be used for scheduling an automation -based on combination of ical string and start/end dates. +### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | +| customerKey | string | Identifier of data extension | - + -### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string -used to convert dates to the system timezone required for startDate +### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> +clean up after deleting a metadata item -**Kind**: static method of [Automation](#Automation) -**Returns**: string - date in server +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<void> - - promise | Param | Type | Description | | --- | --- | --- | -| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | -| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | -| [offsetInput] | string | timzone difference (+02:00) | - - - -### Automation.document([metadata]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +| customerKey | string | Identifier of metadata item | -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - + -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | +### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. - +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise + -### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> +Retrieves dataExtension metadata in template format. -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata item | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Automation.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### DataExtension.setFolderPath(metadata) +dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve +it also sets the content type which is basically the subtype -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - deletion success status +**Kind**: static method of [DataExtension](#DataExtension) | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.MetadataTypeItem | a single script activity definition | - + -### Automation.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Automation](#Automation) +**Kind**: static method of [DataExtension](#DataExtension) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| keyArr | Array.<string> | customerkey of the metadata | - + -## Campaign ⇐ [MetadataType](#MetadataType) -Campaign MetadataType +## DataExtensionField ⇐ [MetadataType](#MetadataType) +DataExtensionField MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - +* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> + * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> + * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean + * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem + * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> + * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> + * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean + * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void -### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets + -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records and saves it to disk + +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Parses campaign asset response body and returns metadata entries mapped to their id +### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> +Retrieves all records for caching -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | folder where to save | -| campaignId | string | of camapaign to retrieve | -| name | string | of camapaign for saving | - - - -## ContentArea ⇐ [MetadataType](#MetadataType) -ContentArea MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.setFolderPath(metadata)](#ContentArea.setFolderPath) - * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> +helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | - + -### ContentArea.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### DataExtensionField.sortDeFields(a, b) ⇒ boolean +sorting method to ensure `Ordinal` is respected -**Kind**: static method of [ContentArea](#ContentArea) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - sorting based on Ordinal | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| a | TYPE.DataExtensionFieldItem | - | +| b | TYPE.DataExtensionFieldItem | - | - + -### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem +manages post retrieve steps -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: TYPE.MetadataTypeItem - parsed item +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: TYPE.DataExtensionFieldItem - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.DataExtensionFieldItem | a single item | +| forDataExtension | boolean | when used by DataExtension class we remove more fields | - + -## DataExtension ⇐ [MetadataType](#MetadataType) -DataExtension MetadataType +### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> +Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. +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 -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update -* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) - * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.create(metadata)](#DataExtension.create) ⇒ Promise - * [.update(metadata)](#DataExtension.update) ⇒ Promise - * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void - * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> - * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem - * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> - * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> - * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> - * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.setFolderPath(metadata)](#DataExtension.setFolderPath) - * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> +| Param | Type | Description | +| --- | --- | --- | +| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | +| deKey | string | external/customer key of Data Extension | - + -### DataExtension.upsert(metadataMap) ⇒ Promise -Upserts dataExtensions after retrieving them from source and target to compare -if create or update operation is needed. +### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | +| customerKey | string | Identifier of data extension | - + -### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean +Delete a data extension from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Returns**: boolean - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| customerKey | string | Identifier of metadata | +| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | - + -### DataExtension.create(metadata) ⇒ Promise -Create a single dataExtension. Also creates their columns in 'dataExtension.columns' +### DataExtensionField.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: static method of [DataExtensionField](#DataExtensionField) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| customerKey | string | Identifier of metadata item | - + -### DataExtension.update(metadata) ⇒ Promise -Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' +## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) +DataExtensionTemplate MetadataType -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + + +### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type +## DataExtract ⇐ [MetadataType](#MetadataType) +DataExtract MetadataType -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | -| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(dataExtract)](#DataExtract.create) ⇒ Promise + * [.update(dataExtract)](#DataExtract.update) ⇒ Promise + * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> - + -### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity. +Endpoint /automation/v1/dataextracts/ returns all Data Extracts -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | | [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> -get shared dataExtensions from parent BU and merge them into the cache -helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve +### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific dataExtract Definition by Name + +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval +### DataExtract.create(dataExtract) ⇒ Promise +Creates a single Data Extract -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem -manages post retrieve steps +### DataExtract.update(dataExtract) ⇒ Promise +Updates a single Data Extract -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: TYPE.DataExtensionItem - metadata +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single dataExtension | +| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - + -### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> -prepares a DataExtension for deployment +### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a dataExtract for deployment -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single data Extension | +| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | - + -### DataExtension.document([metadataMap]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it +### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> +### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [DataExtract](#DataExtract) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - - -### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> -clean up after deleting a metadata item - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - promise + -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | +## DataExtractType ⇐ [MetadataType](#MetadataType) +DataExtractType MetadataType +Only for Caching No retrieve/upsert is required +as this is a configuration in the EID - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. +* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise - + -### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata in template format. +### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type. -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata item | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtension.setFolderPath(metadata) -dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve -it also sets the content type which is basically the subtype +### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Type for caching. -**Kind**: static method of [DataExtension](#DataExtension) +**Kind**: static method of [DataExtractType](#DataExtractType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +## Discovery ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves API endpoint +documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Discovery](#Discovery) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | not used | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -## DataExtensionField ⇐ [MetadataType](#MetadataType) -DataExtensionField MetadataType +## Email ⇐ [MetadataType](#MetadataType) +Email MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> - * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean - * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem - * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> - * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean - * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void +* [Email](#Email) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records and saves it to disk +### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [Email](#Email) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records for caching +### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items +**Kind**: static method of [Email](#Email) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> -helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array +### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects +**Kind**: static method of [Email](#Email) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | +| metadata | TYPE.MetadataTypeItem | a single query | - + -### DataExtensionField.sortDeFields(a, b) ⇒ boolean -sorting method to ensure `Ordinal` is respected +## EmailSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - sorting based on Ordinal +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| a | TYPE.DataExtensionFieldItem | - | -| b | TYPE.DataExtensionFieldItem | - | +* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadataItem)](#EmailSend.update) ⇒ Promise + * [.create(metadataItem)](#EmailSend.create) ⇒ Promise + * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> + * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem -manages post retrieve steps +### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: TYPE.DataExtensionFieldItem - metadata +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.DataExtensionFieldItem | a single item | -| forDataExtension | boolean | when used by DataExtension class we remove more fields | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> -Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. -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 +### EmailSend.update(metadataItem) ⇒ Promise +Updates a single item -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | -| deKey | string | external/customer key of Data Extension | +| metadataItem | TYPE.MetadataTypeItem | a single item | - + -### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### EmailSend.create(metadataItem) ⇒ Promise +Creates a single item -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadataItem | TYPE.MetadataTypeItem | a single item | - + -### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean -Delete a data extension from the specified business unit +### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - deletion success flag +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | +| customerKey | string | Identifier of data extension | - + -### DataExtensionField.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a single item for deployment -**Kind**: static method of [DataExtensionField](#DataExtensionField) +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) -DataExtensionTemplate MetadataType +| metadata | TYPE.MetadataTypeItem | a single script activity definition | -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - + -### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [EmailSend](#EmailSend) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeItem | a single query | - + -## DataExtract ⇐ [MetadataType](#MetadataType) -DataExtract MetadataType +## Event ⇐ [MetadataType](#MetadataType) +Event MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(dataExtract)](#DataExtract.create) ⇒ Promise - * [.update(dataExtract)](#DataExtract.update) ⇒ Promise - * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> +* [Event](#Event) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.create(metadata)](#Event.create) ⇒ Promise + * [.update(metadataEntry)](#Event.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem - + -### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity. -Endpoint /automation/v1/dataextracts/ returns all Data Extracts +### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Event Definition. +Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. +Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Event](#Event) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | @@ -2732,19 +2619,19 @@ Endpoint /automation/v1/dataextracts/ returns all Data Extracts | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching +### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Event](#Event) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific dataExtract Definition by Name +### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Event Definition by Name -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Event](#Event) **Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | @@ -2753,87 +2640,112 @@ Retrieve a specific dataExtract Definition by Name | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### DataExtract.create(dataExtract) ⇒ Promise -Creates a single Data Extract +### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise - Promise +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | - + -### DataExtract.update(dataExtract) ⇒ Promise -Updates a single Data Extract +### Event.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [DataExtract](#DataExtract) +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<boolean> - deletion success status + +| Param | Type | Description | +| --- | --- | --- | +| key | string | Identifier of item | + + + +### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy + +**Kind**: static method of [Event](#Event) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | + + + +### Event.create(metadata) ⇒ Promise +Creates a single Event Definition + +**Kind**: static method of [Event](#Event) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | +| metadata | TYPE.MetadataTypeItem | a single Event Definition | - + -### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a dataExtract for deployment +### Event.update(metadataEntry) ⇒ Promise +Updates a single Event Definition (using PUT method since PATCH isn't supported) -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [Event](#Event) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | +| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | - + -### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed version | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single eventDefinition | - + -### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [Event](#Event) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.MetadataTypeItem | a single event definition | - + -## DataExtractType ⇐ [MetadataType](#MetadataType) -DataExtractType MetadataType -Only for Caching No retrieve/upsert is required -as this is a configuration in the EID +## FtpLocation ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type. +### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FtpLocation +Endpoint /automation/v1/ftplocations/ return all FtpLocations -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | @@ -2842,386 +2754,331 @@ Retrieves Metadata of Data Extract Type. | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type for caching. +### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - +**Kind**: static method of [FtpLocation](#FtpLocation) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + -## Discovery ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## FileTransfer ⇐ [MetadataType](#MetadataType) +FileTransfer MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) - -### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves API endpoint -documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm +* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise + * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise + * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> -**Kind**: static method of [Discovery](#Discovery) + + +### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity. +Endpoint /automation/v1/filetransfers/ returns all File Transfers + +**Kind**: static method of [FileTransfer](#FileTransfer) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | not used | +| [_] | void | unused parameter | | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -## Email ⇐ [MetadataType](#MetadataType) -Email MetadataType + -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of FileTransfer Activity for caching -* [Email](#Email) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + -### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy +### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific File Transfer Definition by Name -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | | --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### FileTransfer.create(fileTransfer) ⇒ Promise +Creates a single File Transfer -**Kind**: static method of [Email](#Email) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -## EmailSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadataItem)](#EmailSend.update) ⇒ Promise - * [.create(metadataItem)](#EmailSend.create) ⇒ Promise - * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> - * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### FileTransfer.update(fileTransfer) ⇒ Promise +Updates a single File Transfer -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - + -### EmailSend.update(metadataItem) ⇒ Promise -Updates a single item +### FileTransfer.preDeployTasks(metadata) ⇒ Promise +prepares a fileTransfer for deployment -**Kind**: static method of [EmailSend](#EmailSend) +**Kind**: static method of [FileTransfer](#FileTransfer) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### EmailSend.create(metadataItem) ⇒ Promise -Creates a single item +### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - + -### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> +### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [FileTransfer](#FileTransfer) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - - -### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a single item for deployment - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +## Filter ⇐ [MetadataType](#MetadataType) +Filter MetadataType - +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + -### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Filter. +Endpoint /automation/v1/filters/ returns all Filters, +but only with some of the fields. So it is needed to loop over +Filters with the endpoint /automation/v1/filters/{id} -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string +**Kind**: static method of [Filter](#Filter) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -## Event ⇐ [MetadataType](#MetadataType) -Event MetadataType +## Folder ⇐ [MetadataType](#MetadataType) +Folder MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Event](#Event) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.create(metadata)](#Event.create) ⇒ Promise - * [.update(metadataEntry)](#Event.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem +* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise + * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise + * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> + * [.create(metadataEntry)](#Folder.create) ⇒ Promise + * [.update(metadataEntry)](#Folder.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> + * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> - + -### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Event Definition. -Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. -Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} +### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise +Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | content type of folder | | [key] | string | customer key of single item to retrieve | - - -### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Event Definition by Name +### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise +Retrieves folder metadata for caching -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [_] | void | parameter not used | +| [subTypeArr] | Array.<string> | content type of folder | - + -### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Folder.upsert(metadata) ⇒ Promise.<object> +Folder upsert (copied from Metadata Upsert), after retrieving from target +and comparing to check if create or update operation is needed. +Copied due to having a dependency on itself, meaning the created need to be serial -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | - + -### Event.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Folder.create(metadataEntry) ⇒ Promise +creates a folder based on metatadata -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | - + -### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy +### Folder.update(metadataEntry) ⇒ Promise +Updates a single Folder. -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -### Event.create(metadata) ⇒ Promise -Creates a single Event Definition + -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise +### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares a folder for deployment + +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single Event Definition | +| metadata | TYPE.MetadataTypeItem | a single folder definition | - + -### Event.update(metadataEntry) ⇒ Promise -Updates a single Event Definition (using PUT method since PATCH isn't supported) +### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment +### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> +Helper to retrieve the folders as promise -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed version +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - soap object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single eventDefinition | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | +| [contentTypeList] | Array.<string> | content type of folder | - + -### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving +### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed metadata +**Kind**: static method of [Folder](#Folder) +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single event definition | - - - -## FtpLocation ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | - + -### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FtpLocation -Endpoint /automation/v1/ftplocations/ return all FtpLocations +### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise +**Kind**: static method of [Folder](#Folder) +**Returns**: Promise.<object> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. +| results | object | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| mid | number | current mid for this credential / business unit | -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - + -## FileTransfer ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +## ImportFile ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise - * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise - * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> +* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(importFile)](#ImportFile.create) ⇒ Promise + * [.update(importFile)](#ImportFile.update) ⇒ Promise + * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise + * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> - + -### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity. -Endpoint /automation/v1/filetransfers/ returns all File Transfers +### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Import File. +Endpoint /automation/v1/imports/ return all Import Files with all details. +Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | @@ -3231,19 +3088,26 @@ Endpoint /automation/v1/filetransfers/ returns all File Transfers | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity for caching +### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific File Transfer Definition by Name +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | -**Kind**: static method of [FileTransfer](#FileTransfer) + + +### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Retrieve a specific Import Definition by Name + +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise | Param | Type | Description | @@ -3252,82 +3116,110 @@ Retrieve a specific File Transfer Definition by Name | name | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### FileTransfer.create(fileTransfer) ⇒ Promise -Creates a single File Transfer +### ImportFile.create(importFile) ⇒ Promise +Creates a single Import File -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### FileTransfer.update(fileTransfer) ⇒ Promise -Updates a single File Transfer +### ImportFile.update(importFile) ⇒ Promise +Updates a single Import File -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | +| importFile | TYPE.MetadataTypeItem | a single Import File | - + -### FileTransfer.preDeployTasks(metadata) ⇒ Promise -prepares a fileTransfer for deployment +### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | + + + +### ImportFile.preDeployTasks(metadata) ⇒ Promise +prepares a import definition for deployment + +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +| metadata | TYPE.MetadataTypeItem | a single importDef | - + -### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem manages post retrieve steps -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: TYPE.MetadataTypeItem - parsed metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> +### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [FileTransfer](#FileTransfer) +**Kind**: static method of [ImportFile](#ImportFile) **Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of data extension | - + -## Filter ⇐ [MetadataType](#MetadataType) -Filter MetadataType +## Journey ⇐ [MetadataType](#MetadataType) +Journey MetadataType +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! +id: A unique id of the journey assigned by the journey’s API during its creation +key: A unique id of the journey within the MID. Can be generated by the developer +definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId **Kind**: global class **Extends**: [MetadataType](#MetadataType) - -### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Filter. -Endpoint /automation/v1/filters/ returns all Filters, -but only with some of the fields. So it is needed to loop over -Filters with the endpoint /automation/v1/filters/{id} +* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> + * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.update(metadata)](#Journey.update) ⇒ Promise + * [.create(metadata)](#Journey.create) ⇒ Promise + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) + * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' -**Kind**: static method of [Filter](#Filter) + + +### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Journey + +**Kind**: static method of [Journey](#Journey) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | @@ -3337,184 +3229,145 @@ Filters with the endpoint /automation/v1/filters/{id} | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -## Folder ⇐ [MetadataType](#MetadataType) -Folder MetadataType +### Journey.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise - * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise - * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> - * [.create(metadataEntry)](#Folder.create) ⇒ Promise - * [.update(metadataEntry)](#Folder.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> - * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> - - - -### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise -Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | content type of folder | -| [key] | string | customer key of single item to retrieve | - - - -### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise -Retrieves folder metadata for caching - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | content type of folder | +| key | string | Identifier of item | - + -### Folder.upsert(metadata) ⇒ Promise.<object> -Folder upsert (copied from Metadata Upsert), after retrieving from target -and comparing to check if create or update operation is needed. -Copied due to having a dependency on itself, meaning the created need to be serial +### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### Folder.create(metadataEntry) ⇒ Promise -creates a folder based on metatadata +### Journey.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [Folder](#Folder) +**Kind**: static method of [Journey](#Journey) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Folder.update(metadataEntry) ⇒ Promise -Updates a single Folder. +### Journey.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [Folder](#Folder) +**Kind**: static method of [Journey](#Journey) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a folder for deployment +### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single folder definition | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending +### Journey.\_postRetrieveTasksBulk(metadataMap) +helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Journey](#Journey) | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | - + -### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> -Helper to retrieve the folders as promise +### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - soap object +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object | Param | Type | Description | | --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | -| [contentTypeList] | Array.<string> | content type of folder | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type +### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment +! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeItem - cloned metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | +| metadata | TYPE.MetadataTypeItem | of a single TSD | - + -### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> -Helper for writing Metadata to disk, used for Retrieve and deploy +### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata +**Kind**: static method of [Journey](#Journey) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| results | object | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| mid | number | current mid for this credential / business unit | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -## ImportFile ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## List ⇐ [MetadataType](#MetadataType) +List MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(importFile)](#ImportFile.create) ⇒ Promise - * [.update(importFile)](#ImportFile.update) ⇒ Promise - * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> +* [List](#List) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem - + -### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Import File. -Endpoint /automation/v1/imports/ return all Import Files with all details. -Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} +### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Lists -**Kind**: static method of [ImportFile](#ImportFile) +**Kind**: static method of [List](#List) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise | Param | Type | Description | @@ -3524,1821 +3377,811 @@ Currently it is not needed to loop over Imports with endpoint /automation/v1/imp | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Import Definition by Name - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise + -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk - +**Kind**: static method of [List](#List) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### ImportFile.create(importFile) ⇒ Promise -Creates a single Import File +### List.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [List](#List) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | +| customerKey | string | Identifier of data extension | - + -### ImportFile.update(importFile) ⇒ Promise -Updates a single Import File +### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - metadata | Param | Type | Description | | --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | +| list | TYPE.MetadataTypeItem | a single list | - + -### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata +### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem +parses retrieved Metadata before saving -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map +**Kind**: static method of [List](#List) +**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### ImportFile.preDeployTasks(metadata) ⇒ Promise -prepares a import definition for deployment - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise +| metadata | TYPE.MetadataTypeItem | a single list definition | +| [parseForCache] | boolean | if set to true, the Category ID is kept | -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single importDef | + - +## MetadataType +MetadataType class that gets extended by their specific metadata type class. +Provides default functionality that can be overwritten by child metadata type classes -### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +**Kind**: global class -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: TYPE.MetadataTypeItem - parsed metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## Journey ⇐ [MetadataType](#MetadataType) -Journey MetadataType -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -id: A unique id of the journey assigned by the journey’s API during its creation -key: A unique id of the journey within the MID. Can be generated by the developer -definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.update(metadata)](#Journey.update) ⇒ Promise - * [.create(metadata)](#Journey.create) ⇒ Promise - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) - * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - - - -### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Journey - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Journey.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### Journey.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Journey.\_postRetrieveTasksBulk(metadataMap) -helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and - -**Kind**: static method of [Journey](#Journey) - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | - - - -### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! - -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! - -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - - -### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [Journey](#Journey) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -## List ⇐ [MetadataType](#MetadataType) -List MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [List](#List) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem - - - -### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Lists - -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### List.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [List](#List) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| list | TYPE.MetadataTypeItem | a single list | - - - -### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving - -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single list definition | -| [parseForCache] | boolean | if set to true, the Category ID is kept | - - - -## MetadataType -MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes - -**Kind**: global class - -* [MetadataType](#MetadataType) - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - - - -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | - - - -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | - - - -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - - - -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | - - - -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | - - - -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - - - -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | - - - -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | - - - -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | - - - -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | - - - -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | - - - -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed - -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | - - - -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found - -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | - - - -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | - - - -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | - - - -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - - - -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | error that occured | - - - -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | - - - -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) - -| Param | Type | Description | -| --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | - - - -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - - - -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | - - - -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - - -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +* [MetadataType](#MetadataType) + * [.client](#MetadataType.client) : TYPE.SDK + * [.properties](#MetadataType.properties) : TYPE.Mcdevrc + * [.subType](#MetadataType.subType) : string + * [.buObject](#MetadataType.buObject) : TYPE.BuObject + * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap + * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void + * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.setFolderPath(metadata)](#MetadataType.setFolderPath) + * [.setFolderId(metadata)](#MetadataType.setFolderId) + * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> + * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void + * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void + * [.refresh()](#MetadataType.refresh) ⇒ void + * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void + * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean + * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null + * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null + * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null + * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null + * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) + * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> + * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> + * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> + * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void + * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void + * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void + * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void + * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void + * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean + * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean + * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string + * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> + * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object + * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void + * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void + * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> + * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean + * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> + * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> + * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> + * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object + * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - + -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes +### MetadataType.client : TYPE.SDK +**Kind**: static property of [MetadataType](#MetadataType) + -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name +### MetadataType.properties : TYPE.Mcdevrc +**Kind**: static property of [MetadataType](#MetadataType) + -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +### MetadataType.subType : string +**Kind**: static property of [MetadataType](#MetadataType) + - +### MetadataType.buObject : TYPE.BuObject +**Kind**: static property of [MetadataType](#MetadataType) + -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure +### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap +Returns file contents mapped to their filename without '.json' ending **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata +**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | - + -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) +### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> +Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Returns**: Array.<string> - Fieldnames | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [isCaching] | boolean | if true, then check if field should be skipped for caching | - + -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> +Deploys metadata **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | +| retrieveDir | string | directory where metadata after deploy should be saved | - + -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void +Gets executed after deployment of metadata type **Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | +| createdUpdated | Object | counter representing successful creates/updates | - + -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id +### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of metadata | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit +### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item +### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem +Gets executed after retreive of metadata type **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag +**Returns**: TYPE.MetadataTypeItem - cloned metadata | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.MetadataTypeItem | a single item | +| targetDir | string | folder where retrieves should be saved | +| [isTemplating] | boolean | signals that we are retrieving templates | - + -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit +### MetadataType.setFolderPath(metadata) +generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally +### MetadataType.setFolderId(metadata) +generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory | Param | Type | Description | | --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + + +### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - + -## MobileCode ⇐ [MetadataType](#MetadataType) -MobileCode MetadataType +### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata -* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> +| Param | Type | Description | +| --- | --- | --- | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [key] | string | customer key of single item to retrieve | - + -### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. +### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| [subType] | string | optionally limit to a single subtype | -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -## MobileKeyword ⇐ [MetadataType](#MetadataType) -MobileKeyword MetadataType +### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> +Retrieve a specific Script by Name -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise -* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(metadata)](#MobileKeyword.create) ⇒ Promise - * [.update(metadata)](#MobileKeyword.update) ⇒ Promise - * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void - * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> - * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void - * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| name | string | name (not key) of the metadata item | - + -### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. +### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| templateDir | string | (List of) Directory where built definitions will be saved | +| key | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields +### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +Gets executed before deploying metadata -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| deployDir | string | folder where files for deployment are stored | - + -### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) +### MetadataType.create(metadata, deployDir) ⇒ void +Abstract create method that needs to be implemented in child metadata type -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: 'create' \| 'update' \| 'skip' - action to take +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| deployDir | string | directory where deploy metadata are saved | - + -### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### MetadataType.update(metadata, [metadataBefore]) ⇒ void +Abstract update method that needs to be implemented in child metadata type -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +| metadata | TYPE.MetadataTypeItem | single metadata entry | +| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - + -### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -retrieve an item and create a template from it +### MetadataType.refresh() ⇒ void +Abstract refresh method that needs to be implemented in child metadata type -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.execute() ⇒ void +Abstract execute method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type + +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true if metadata was changed | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | - + -### MobileKeyword.create(metadata) ⇒ Promise -Creates a single item +### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean +test if metadata was actually changed or not to potentially skip it during deployment -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true on first identified deviation or false if none are found | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | +| metadata | TYPE.MetadataTypeItem | item to upload | +| [fieldName] | string | optional field name to use for identifying the record in logs | +| [silent] | boolean | optionally suppress logging | - + -### MobileKeyword.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> +MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | +| deployDir | string | directory where deploy metadata are saved | - + -### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void -manages post retrieve steps +### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: 'create' \| 'update' \| 'skip' - action to take | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object -helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) +### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null +Creates a single metadata entry via REST -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| uri | string | rest endpoint for POST | - + -### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Creates a single metadata entry via fuel-soap (generic lib not wrapper) -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null +Updates a single metadata entry via REST -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | +| uri | string | | rest endpoint for PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - + -### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) -handles extracted code if any are found for complex types +### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null +Updates a single metadata entry via fuel-soap (generic lib not wrapper) -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - +| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | -### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares an event definition for deployment + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | -| deployDir | string | directory of deploy files | +| ex | Error | error that occured | +| msg | 'creating' \| 'updating' | what to print in the log | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MetadataType.getSOAPErrorMsg(ex) ⇒ string +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - error message | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| ex | Error | error that occured | - + -### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON +### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +Retrieves Metadata for Rest Types -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| uri | string | rest endpoint for GET | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| [singleRetrieve] | string \| number | key of single item to filter by | -### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit + -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<boolean> - deletion success status +### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | +| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | +| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | - + -### MobileKeyword.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### MetadataType.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) -**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: null - - | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| ex | Error | exception | +| id | string | id or key of item | - + -### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> +Used to execute a query/automation etc. -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| uri | string | REST endpoint where the POST request should be sent | +| key | string | item key | - + -## MobileMessage ⇐ [MetadataType](#MetadataType) -MobileMessage MetadataType +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response -* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#MobileMessage.update) ⇒ Promise - * [.create(metadata)](#MobileMessage.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> - * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> - * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - + -### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords +### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| [singleRetrieve] | string \| number | key of single item to filter by | +| metadataMap | TYPE.MetadataTypeMap | saved metadata | - + -### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -### MobileMessage.update(metadata) ⇒ Promise -Updates a single item +### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void +Deletes a field in a metadata entry if the selected definition property equals false. -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | +| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | +| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | +| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - +**Example** +```js +Removes field (or nested fields childs) that are not updateable +deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); +``` + -### MobileMessage.create(metadata) ⇒ Promise -Creates a single item +### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not createable -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON +### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not updateable -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<string> - code +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MobileMessage.prepExtractedCode(code) ⇒ Object -helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) +### MetadataType.keepTemplateFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the template -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| code | string | the code of the file | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void +Remove fields from metadata entry that are not needed in the stored metadata -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - + -### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean +checks if the current metadata entry should be saved on retrieve or not -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: skip saving == filtered; false: continue with saving | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment +### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean +optionally filter by what folder something is in -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.MetadataTypeItem - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileMessage | -| deployDir | string | directory of deploy files | +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - + -### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) +### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> +Helper for writing Metadata to disk, used for Retrieve and deploy -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| results | TYPE.MetadataTypeMap | metadata results from deploy | +| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | +| [overrideType] | string | for use when there is a subtype (such as folder-queries) | +| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) +### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) +searches extracted file for template variable names and applies the market values -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) +searches extracted file for template variable values and applies the market variable names -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| code | string | code from extracted code | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - + -### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types (e.g script, asset, query) -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| targetDir | string | Directory where built definitions will be saved | | metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - + -### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) +### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [MobileMessage](#MobileMessage) +**Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | @@ -5348,492 +4191,395 @@ handles extracted code if any are found for complex types | metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit -! the endpoint expects the ID and not a key but for mcdev in this case key==id - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of item | - - - -## Query ⇐ [MetadataType](#MetadataType) -Query MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Query](#Query) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> - * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> - * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.create(query)](#Query.create) ⇒ Promise - * [.update(query)](#Query.update) ⇒ Promise - * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> - * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> - * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void - * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void - * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) - - - -### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves Metadata of queries - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Query.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - -### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves query metadata for caching - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - + -### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> -Retrieve a specific Query by Name +### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> +check template directory for complex types that open subfolders for their subtypes -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - subtype name | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateDir | string | Directory where metadata templates are stored | +| templateName | string | name of the metadata file | - + -### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object +optional method used for some types to try a different folder structure -**Kind**: static method of [Query](#Query) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.QueryItem | a single query | +| templateDir | string | Directory where metadata templates are stored | +| typeDirArr | Array.<string> | current subdir for this type | +| templateName | string | name of the metadata template | +| fileName | string | name of the metadata template file w/o extension | +| ex | Error | error from first attempt | - + -### Query.create(query) ⇒ Promise -Creates a single query +### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Builds definition based on template +NOTE: Most metadata files should use this generic method, unless custom +parsing is required (for example scripts & queries) -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| query | TYPE.QueryItem | a single query | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| templateName | string | name of the metadata file | +| variables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Query.update(query) ⇒ Promise -Updates a single query +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| query | TYPE.QueryItem | a single query | +| ex | object | response payload from REST API | - + -### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> -prepares a Query for deployment +### MetadataType.document([metadata], [isDeploy]) ⇒ void +Gets metadata cache with limited fields and does not store value to disk -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<TYPE.QueryItem> - Promise +**Kind**: static method of [MetadataType](#MetadataType) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.QueryItem | a single query activity | -| deployDir | string | directory of deploy files | +| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | +| [isDeploy] | boolean | used to skip non-supported message during deploy | - + -### Query.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) -searches extracted SQL file for template variables and applies the market values +### MetadataType.resolveId(id) ⇒ Promise.<string> +get name & key for provided id -**Kind**: static method of [Query](#Query) -**Returns**: string - code with markets applied +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<string> - key of metadata | Param | Type | Description | | --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| id | string | Identifier of metadata | - + -### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### MetadataType.deleteByKey(customerKey) ⇒ boolean +Delete a metadata item from the specified business unit -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: boolean - deletion success status | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| customerKey | string | Identifier of data extension | - + -### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> +clean up after deleting a metadata item -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<void> - - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| customerKey | string | Identifier of metadata item | +| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | -**Example** -```js -queries are saved as 1 json and 1 sql file. both files need to be run through templating -``` - + -### Query.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| customerKey | string | Identifier of metadata | +| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### Query.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts +### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> +Delete a data extension from the specified business unit -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> \| void - formatted Error Message +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| ex | object | response payload from REST API | +| url | string | endpoint | +| key | string | Identifier of metadata | +| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - + -### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object +Returns metadata of a business unit that is saved locally -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: object - Metadata of BU in local directory | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | - + -### Query.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Query](#Query) +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - +| keyArr | Array.<string> | customerkey of the metadata | -### Query.postDeployTasks(upsertResults) -Gets executed after deployment of metadata type + -**Kind**: static method of [Query](#Query) +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | - + -## Role ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType +## MobileCode ⇐ [MetadataType](#MetadataType) +MobileCode MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Role](#Role) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.create(metadata)](#Role.create) ⇒ Promise - * [.update(metadata)](#Role.update) ⇒ Promise - * [.document([metadata])](#Role.document) ⇒ Promise.<void> - * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void +* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - + -### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud +### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [___] | void | unused parameter | +| [_] | void | unused parameter | +| [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed before deploying metadata - -**Kind**: static method of [Role](#Role) -**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | - - - -### Role.create(metadata) ⇒ Promise -Create a single Role. - -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching - +**Kind**: static method of [MobileCode](#MobileCode) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### Role.update(metadata) ⇒ Promise -Updates a single Role. +## MobileKeyword ⇐ [MetadataType](#MetadataType) +MobileKeyword MetadataType -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> + * [.create(metadata)](#MobileKeyword.create) ⇒ Promise + * [.update(metadata)](#MobileKeyword.update) ⇒ Promise + * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void + * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void + * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> + * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void + * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> - + -### Role.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles +### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords +Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<void> - - +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | role definitions | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void -iterates through permissions to output proper row-names for nested permissionss +### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields -**Kind**: static method of [Role](#Role) +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map | Param | Type | Description | | --- | --- | --- | -| role | string | name of the user role | -| element | object | data of the permission | -| [permission] | string | name of the permission | -| [isAllowed] | string | "true" / "false" from the | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | - + -## Script ⇐ [MetadataType](#MetadataType) -Script MetadataType +### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' +helper for [upsert](#MetadataType.upsert) -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: 'create' \| 'update' \| 'skip' - action to take -* [Script](#Script) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> - * [.update(script)](#Script.update) ⇒ Promise - * [.create(script)](#Script.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> - * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - + -### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves Metadata of Script -Endpoint /automation/v1/scripts/ return all Scripts with all details. +### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | +| [_] | void | parameter not used | +| [__] | void | parameter not used | | [key] | string | customer key of single item to retrieve | - - -### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves script metadata for caching - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - + -### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> -Retrieve a specific Script by Name +### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> +retrieve an item and create a template from it -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | +| key | string | name of the metadata file | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### Script.update(script) ⇒ Promise -Updates a single Script +### MobileKeyword.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Script.create(script) ⇒ Promise -Creates a single Script +### MobileKeyword.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON +### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void +manages post retrieve steps -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single asset definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem -prepares a Script for deployment +### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object +helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.ScriptItem - Promise +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Object - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single script activity definition | -| dir | string | directory of deploy files | +| metadataScript | string | the code of the file | - + -### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildDefinition](#MetadataType.buildDefinition) handles extracted code if any are found for complex types -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | @@ -5841,99 +4587,143 @@ handles extracted code if any are found for complex types ```js scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating ``` - + -### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) +### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) handles extracted code if any are found for complex types -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | | mode | 'definition' \| 'template' | defines what we use this helper for | - + -### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares an event definition for deployment -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.ScriptItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | +| deployDir | string | directory of deploy files | - + -### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object -helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) +### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: static method of [Script](#Script) -**Returns**: Object - returns found extension and file content +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | -| metadataName | string | the name of the metadata | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### Script.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [Script](#Script) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> +### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<string> - content for metadata.script + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | + + + +### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| key | string | Identifier of item | - + -### Script.postDeleteTasks(customerKey) ⇒ void +### MobileKeyword.postDeleteTasks(customerKey) ⇒ void clean up after deleting a metadata item -**Kind**: static method of [Script](#Script) +**Kind**: static method of [MobileKeyword](#MobileKeyword) | Param | Type | Description | | --- | --- | --- | | customerKey | string | Identifier of metadata item | - + + +### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MobileKeyword](#MobileKeyword) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + -## SendClassification ⇐ [MetadataType](#MetadataType) -SendClassification MetadataType +## MobileMessage ⇐ [MetadataType](#MetadataType) +MobileMessage MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) - -### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void + * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#MobileMessage.update) ⇒ Promise + * [.create(metadata)](#MobileMessage.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> + * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> + * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void + * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> -**Kind**: static method of [SendClassification](#SendClassification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void +Retrieves Metadata of Mobile Keywords + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata | Param | Type | Description | | --- | --- | --- | @@ -5942,1745 +4732,1631 @@ Retrieves SOAP based metadata of metadata type into local filesystem. executes c | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalEmail MetadataType +### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata -* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise - * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void - * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void - * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| [_] | void | parameter not used | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to retrieve | - + -### TransactionalEmail.update(metadata) ⇒ Promise +### MobileMessage.update(metadata) ⇒ Promise Updates a single item -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Kind**: static method of [MobileMessage](#MobileMessage) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment +### MobileMessage.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - Promise +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | | metadata | TYPE.MetadataTypeItem | a single item | - + -### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void -helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) +### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<string> - code | Param | Type | Description | | --- | --- | --- | -| _ | TYPE.MetadataTypeItem | not used | -| apiResponse | object | varies depending on the API call | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### TransactionalEmail.postDeployTasks() ⇒ void -Gets executed after deployment of metadata type +### MobileMessage.prepExtractedCode(code) ⇒ Object +helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Object - returns found extension and file content -### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +| Param | Type | Description | +| --- | --- | --- | +| code | string | the code of the file | + + + +### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned + +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem manages post retrieve steps -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - a single item +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | a single query | - + -### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem +prepares an event definition for deployment -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: TYPE.MetadataTypeItem - Promise | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| metadata | TYPE.MetadataTypeItem | a single MobileMessage | +| deployDir | string | directory of deploy files | - + -## TransactionalMessage ⇐ [MetadataType](#MetadataType) -TransactionalMessage MetadataType +### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void +helper for [createREST](#MetadataType.createREST) -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [MobileMessage](#MobileMessage) -* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise - * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise - * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata +### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void +helper for [updateREST](#MetadataType.updateREST) -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MobileMessage](#MobileMessage) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | - + -### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching +### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to cache | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### TransactionalMessage.update(metadata) ⇒ Promise -Updates a single item +### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -### TransactionalMessage.create(metadata) ⇒ Promise -Creates a single item +### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise +**Kind**: static method of [MobileMessage](#MobileMessage) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> +### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> Delete a metadata item from the specified business unit +! the endpoint expects the ID and not a key but for mcdev in this case key==id -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [MobileMessage](#MobileMessage) **Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| id | string | Identifier of item | - + -## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalPush TransactionalMessage +## Query ⇐ [MetadataType](#MetadataType) +Query MetadataType **Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Extends**: [MetadataType](#MetadataType) -* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem +* [Query](#Query) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> + * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> + * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.create(query)](#Query.create) ⇒ Promise + * [.update(query)](#Query.update) ⇒ Promise + * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> + * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> + * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void + * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void + * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) - + -### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment +### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves Metadata of queries -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - Promise +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps +### Query.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - a single item +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| keyArr | Array.<string> | customerkey of the metadata | - + -## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalSMS MetadataType +### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> +Retrieves query metadata for caching -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata + -* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void - * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> - * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean - * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> +### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> +Retrieve a specific Query by Name - +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata -### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) + + +### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps + +**Kind**: static method of [Query](#Query) +**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadata | TYPE.QueryItem | a single query | - + -### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares for deployment +### Query.create(query) ⇒ Promise +Creates a single query -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| deployDir | string | directory of deploy files | +| query | TYPE.QueryItem | a single query | - + -### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON +### Query.update(query) ⇒ Promise +Updates a single query -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<string> - content for metadata.script +**Kind**: static method of [Query](#Query) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | +| query | TYPE.QueryItem | a single query | - + -### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> -manages post retrieve steps +### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> +prepares a Query for deployment -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<TYPE.QueryItem> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.QueryItem | a single query activity | +| deployDir | string | directory of deploy files | - + -### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> -helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) +### Query.applyTemplateValues(code, templateVariables) ⇒ string +helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) +searches extracted SQL file for template variables and applies the market values -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content +**Kind**: static method of [Query](#Query) +**Returns**: string - code with markets applied | Param | Type | Description | | --- | --- | --- | -| metadataScript | string | the code of the file | +| code | string | code from extracted code | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) +### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) handles extracted code if any are found for complex types -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Kind**: static method of [Query](#Query) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) +### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Kind**: static method of [Query](#Query) **Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | +| metadata | TYPE.QueryItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | **Example** ```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +queries are saved as 1 json and 1 sql file. both files need to be run through templating ``` - + -### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) -handles extracted code if any are found for complex types +### Query.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| keyArr | Array.<string> | customerkey of the metadata | - + -### TransactionalSMS.\_isHTML(code) ⇒ boolean -very simplified test for HTML code in our SMS +### Query.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: boolean - true if HTML is found +**Kind**: static method of [Query](#Query) +**Returns**: Array.<string> \| void - formatted Error Message | Param | Type | Description | | --- | --- | --- | -| code | string | sms source code | +| ex | object | response payload from REST API | - + -### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Query](#Query) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| customerKey | string | Identifier of data extension | - + -## TriggeredSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType +### Query.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Query](#Query) -* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#TriggeredSend.create) ⇒ Promise - * [.update(metadata)](#TriggeredSend.update) ⇒ Promise - * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> - * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> - * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | Identifier of metadata item | - + -### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Query.postDeployTasks(upsertResults) +Gets executed after deployment of metadata type -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Query](#Query) | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | - + -### TriggeredSend.create(metadata) ⇒ Promise -Create a single TSD. +## Role ⇐ [MetadataType](#MetadataType) +ImportFile MetadataType -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +* [Role](#Role) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.create(metadata)](#Role.create) ⇒ Promise + * [.update(metadata)](#Role.update) ⇒ Promise + * [.document([metadata])](#Role.document) ⇒ Promise.<void> + * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void - + -### TriggeredSend.update(metadata) ⇒ Promise -Updates a single TSD. +### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Gets metadata from Marketing Cloud -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise +**Kind**: static method of [Role](#Role) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| [___] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +Gets executed before deploying metadata -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [Role](#Role) +**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.MetadataTypeItem | a single metadata item | - + -### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -parses retrieved Metadata before saving +### Role.create(metadata) ⇒ Promise +Create a single Role. -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment +### Role.update(metadata) ⇒ Promise +Updates a single Role. -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem - metadata object +**Kind**: static method of [Role](#Role) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> -TSD-specific refresh method that finds active TSDs and refreshes them +### Role.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles -**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Kind**: static method of [Role](#Role) **Returns**: Promise.<void> - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [keyArr] | Array.<string> | | metadata keys | -| [checkKey] | boolean | true | whether to check if the key is valid | - - - -### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> -helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<Array.<string>> - keyArr - | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMapObj | TSD item map | - - - -### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | +| [metadata] | TYPE.MetadataTypeMap | role definitions | - + -### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> -helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send +### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void +iterates through permissions to output proper row-names for nested permissionss -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - true if refresh was successful +**Kind**: static method of [Role](#Role) | Param | Type | Description | | --- | --- | --- | -| key | string | external key of triggered send item | -| checkKey | boolean | whether to check if key exists on the server | +| role | string | name of the user role | +| element | object | data of the permission | +| [permission] | string | name of the permission | +| [isAllowed] | string | "true" / "false" from the | - + -## User ⇐ [MetadataType](#MetadataType) -MetadataType +## Script ⇐ [MetadataType](#MetadataType) +Script MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [User](#User) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#User.create) ⇒ Promise - * [.update(metadata)](#User.update) ⇒ Promise - * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument - * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void - * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> - * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object - * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.document([metadata])](#User.document) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void +* [Script](#Script) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> + * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> + * [.update(script)](#Script.update) ⇒ Promise + * [.create(script)](#Script.create) ⇒ Promise + * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> + * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem + * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object + * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> + * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> + * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void - + -### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves Metadata of Script +Endpoint /automation/v1/scripts/ return all Scripts with all details. -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | unused parameter | +| [_] | void | unused parameter | | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - + -### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching +### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> +Retrieves script metadata for caching -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise + -### User.create(metadata) ⇒ Promise -Create a single item. +### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> +Retrieve a specific Script by Name -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | +| templateDir | string | Directory where retrieved metadata directory will be saved | +| name | string | name of the metadata file | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### User.update(metadata) ⇒ Promise -Updates a single item. +### Script.update(script) ⇒ Promise +Updates a single Script -**Kind**: static method of [User](#User) +**Kind**: static method of [Script](#Script) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument -prepares a item for deployment - -**Kind**: static method of [User](#User) -**Returns**: TYPE.UserDocument - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.UserDocument | of a single item | +| script | TYPE.MetadataTypeItem | a single Script | - + -### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void -helper for [upsert](#MetadataType.upsert) +### Script.create(script) ⇒ Promise +Creates a single Script -**Kind**: static method of [User](#User) +**Kind**: static method of [Script](#Script) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | +| script | TYPE.MetadataTypeItem | a single Script | - + -### User.postDeployTasks(upsertResults) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - promise +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<string> - content for metadata.script | Param | Type | Description | | --- | --- | --- | -| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | - - - -### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object -helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) - -**Kind**: static method of [User](#User) -**Returns**: object - format needed by API - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| roleId | string | | role.ObjectID | -| roleName | string | | role.Name | -| userId | number | | user.AccountUserID | -| assignmentOnly | boolean | | if true, only assignment configuration will be returned | -| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | - - - -### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata +| metadata | TYPE.ScriptItem | a single asset definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata +### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem +prepares a Script for deployment -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.ScriptItem - Promise | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | +| metadata | TYPE.ScriptItem | a single script activity definition | +| dir | string | directory of deploy files | - + -### User.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles +### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildDefinition](#MetadataType.buildDefinition) +handles extracted code if any are found for complex types -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - - +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | user list | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - + -### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -manages post retrieve steps +### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplate](#MetadataType.buildTemplate) +handles extracted code if any are found for complex types -**Kind**: static method of [User](#User) -**Returns**: TYPE.MetadataTypeItem \| void - a single item +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | - +**Example** +```js +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating +``` + -## Verification ⇐ [MetadataType](#MetadataType) -Verification MetadataType +### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) +handles extracted code if any are found for complex types -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array -* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null - * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#Verification.create) ⇒ Promise - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void - * [.update(metadata)](#Verification.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem - * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem - * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> +| Param | Type | Description | +| --- | --- | --- | +| templateDir | string | Directory where metadata templates are stored | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.ScriptItem | main JSON file that was read from file system | +| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | +| templateName | string | name of the template to be built | +| mode | 'definition' \| 'template' | defines what we use this helper for | - + -### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Verification Activity. +### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem +manages post retrieve steps -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata +**Kind**: static method of [Script](#Script) +**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| key | string | customer key of single item to retrieve | +| metadata | TYPE.ScriptItem | a single item | - + -### Verification.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) +### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object +helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) -**Kind**: static method of [Verification](#Verification) -**Returns**: null - - +**Kind**: static method of [Script](#Script) +**Returns**: Object - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching +| metadataScript | string | the code of the file | +| metadataName | string | the name of the metadata | -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - + -### Verification.create(metadata) ⇒ Promise -Creates a single Data Extract +### Script.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise +**Kind**: static method of [Script](#Script) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | +| keyArr | Array.<string> | customerkey of the metadata | - + -### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) +### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Verification](#Verification) +**Kind**: static method of [Script](#Script) +**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | +| customerKey | string | Identifier of data extension | - + -### Verification.update(metadata) ⇒ Promise -Updates a single Data Extract +### Script.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise +**Kind**: static method of [Script](#Script) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | +| customerKey | string | Identifier of metadata item | - + -### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem -prepares a verification for deployment +## SendClassification ⇐ [MetadataType](#MetadataType) +SendClassification MetadataType -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - metadata object +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + + +### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata + +**Kind**: static method of [SendClassification](#SendClassification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem -parses retrieved Metadata before saving +## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalEmail MetadataType -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | +* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise + * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void + * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void + * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> - + -### Verification.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### TransactionalEmail.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<boolean> - deletion success status +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| key | string | Identifier of item | +| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | - + -## Retriever -Retrieves metadata from a business unit and saves it to the local filesystem. +### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment -**Kind**: global class +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - Promise -* [Retriever](#Retriever) - * [new Retriever(properties, buObject)](#new_Retriever_new) - * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### new Retriever(properties, buObject) -Creates a Retriever, uses v2 auth if v2AuthOptions are passed. +### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void +helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) | Param | Type | Description | | --- | --- | --- | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| buObject | TYPE.BuObject | properties for auth | +| _ | TYPE.MetadataTypeItem | not used | +| apiResponse | object | varies depending on the API call | - + -### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve metadata of specified types into local file system and Retriever.metadata +### TransactionalEmail.postDeployTasks() ⇒ void +Gets executed after deployment of metadata type -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) + + +### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: TYPE.MetadataTypeItem - a single item | Param | Type | Description | | --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | -| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | -| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | -| [changelogOnly] | boolean | skip saving, only create json in memory | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types +### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types +**Kind**: static method of [TransactionalEmail](#TransactionalEmail) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | +| key | string | Identifier of item | - + -## Asset ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType +## TransactionalMessage ⇐ [MetadataType](#MetadataType) +TransactionalMessage MetadataType **Kind**: global class **Extends**: [MetadataType](#MetadataType) -* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> +* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise + * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise + * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> - + -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset +### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching +### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves event definition metadata for caching -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | | [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| [__] | void | parameter not used | +| [key] | string | customer key of single item to cache | - + -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating +### TransactionalMessage.update(metadata) ⇒ Promise +Updates a single item -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.create(metadata) ⇒ Promise -Creates a single asset +### TransactionalMessage.create(metadata) ⇒ Promise +Creates a single item -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.update(metadata) ⇒ Promise -Updates a single asset +### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [TransactionalMessage](#TransactionalMessage) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| key | string | Identifier of item | - + -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type +## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalPush TransactionalMessage -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) -| Param | Type | Description | -| --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | +* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - + -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset +### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares for deployment -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - Promise | Param | Type | Description | | --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json +### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [TransactionalPush](#TransactionalPush) +**Returns**: TYPE.MetadataTypeItem - a single item | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it +## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) +TransactionalSMS MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file +**Kind**: global class +**Extends**: [TransactionalMessage](#TransactionalMessage) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | +* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) + * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void + * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> + * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> + * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> + * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> + * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> + * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> + * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean + * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> - + -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void +clean up after deleting a metadata item -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| customerKey | string | Identifier of metadata item | - + -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type +### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> +prepares for deployment -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single item | +| deployDir | string | directory of deploy files | + + + +### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> +helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON + +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<string> - content for metadata.script | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | +| metadata | TYPE.MetadataTypeItem | a single definition | +| deployDir | string | directory of deploy files | +| [templateName] | string | name of the template used to built defintion (prior applying templating) | - + -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment +### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType +### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> +helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content | Param | Type | Description | | --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | +| metadataScript | string | the code of the file | - + -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) +### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) handles extracted code if any are found for complex types -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | - + -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) +### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> +helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) handles extracted code if any are found for complex types -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | | targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | **Example** ```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating +scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating ``` - + -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) +### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> +helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) handles extracted code if any are found for complex types -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array | Param | Type | Description | | --- | --- | --- | | templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | +| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | +| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | | templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | | templateName | string | name of the template to be built | | mode | 'definition' \| 'template' | defines what we use this helper for | - + -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +### TransactionalSMS.\_isHTML(code) ⇒ boolean +very simplified test for HTML code in our SMS -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: boolean - true if HTML is found | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +| code | string | sms source code | - + -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> +should return only the json for all but asset, query and script that are saved as multiple files +additionally, the documentation for dataExtension and automation should be returned -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [TransactionalSMS](#TransactionalSMS) +**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } +| keyArr | Array.<string> | customerkey of the metadata | -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | + - +## TriggeredSend ⇐ [MetadataType](#MetadataType) +MessageSendActivity MetadataType -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | +* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#TriggeredSend.create) ⇒ Promise + * [.update(metadata)](#TriggeredSend.update) ⇒ Promise + * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> + * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void + * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem + * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> + * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> + * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> - + -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending +### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | | [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes +### TriggeredSend.create(metadata) ⇒ Promise +Create a single TSD. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure +### TriggeredSend.update(metadata) ⇒ Promise +Updates a single TSD. -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| customerKey | string | Identifier of data extension | - + -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +parses retrieved Metadata before saving -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk +### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem +prepares a TSD for deployment -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: TYPE.MetadataTypeItem - metadata object | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadata | TYPE.MetadataTypeItem | of a single TSD | - + -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id +### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> +TSD-specific refresh method that finds active TSDs and refreshes them -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<void> - - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [keyArr] | Array.<string> | | metadata keys | +| [checkKey] | boolean | true | whether to check if the key is valid | - + -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset +### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> +helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<Array.<string>> - keyArr | Param | Type | Description | | --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | +| metadata | TYPE.MetadataTypeMapObj | TSD item map | - + -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching +### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | - + -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating +### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> +helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise +**Kind**: static method of [TriggeredSend](#TriggeredSend) +**Returns**: Promise.<boolean> - true if refresh was successful | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | +| key | string | external key of triggered send item | +| checkKey | boolean | whether to check if key exists on the server | - + -### Asset.create(metadata) ⇒ Promise -Creates a single asset +## User ⇐ [MetadataType](#MetadataType) +MetadataType -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +* [User](#User) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#User.create) ⇒ Promise + * [.update(metadata)](#User.update) ⇒ Promise + * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument + * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void + * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> + * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object + * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.document([metadata])](#User.document) ⇒ Promise.<void> + * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - + -### Asset.update(metadata) ⇒ Promise -Updates a single asset +### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| _ | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | - + -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type +### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves import definition metadata for caching -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### User.create(metadata) ⇒ Promise +Create a single item. + +**Kind**: static method of [User](#User) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset +### User.update(metadata) ⇒ Promise +Updates a single item. -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [User](#User) **Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | +| metadata | TYPE.MetadataTypeItem | single metadata entry | - + -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json +### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument +prepares a item for deployment -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [User](#User) +**Returns**: TYPE.UserDocument - metadata object | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | - - - -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | +| metadata | TYPE.UserDocument | of a single item | - + -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps +### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void +helper for [upsert](#MetadataType.upsert) -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata +**Kind**: static method of [User](#User) | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | +| metadata | TYPE.MetadataTypeMap | list of metadata | +| metadataKey | string | key of item we are looking at | +| hasError | boolean | error flag from previous code | +| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | +| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | - + -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> +### User.postDeployTasks(upsertResults) ⇒ Promise.<void> Gets executed after deployment of metadata type -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [User](#User) +**Returns**: Promise.<void> - promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment +| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise + -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | +### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object +helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) - +**Kind**: static method of [User](#User) +**Returns**: object - format needed by API -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| roleId | string | | role.ObjectID | +| roleName | string | | role.Name | +| userId | number | | user.AccountUserID | +| assignmentOnly | boolean | | if true, only assignment configuration will be returned | +| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc + -| Param | Type | Description | -| --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | +### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [User](#User) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | +| [singleRetrieve] | string \| number | key of single item to filter by | +| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - + -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types +### User.document([metadata]) ⇒ Promise.<void> +Creates markdown documentation of all roles -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [User](#User) **Returns**: Promise.<void> - - | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | +| [metadata] | TYPE.MetadataTypeMap | user list | -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - + -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types +### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void +manages post retrieve steps -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - +**Kind**: static method of [User](#User) +**Returns**: TYPE.MetadataTypeItem \| void - a single item | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | +| metadata | TYPE.MetadataTypeItem | a single item | - + -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve +## Verification ⇐ [MetadataType](#MetadataType) +Verification MetadataType -**Kind**: static method of [Asset](#Asset) +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | +* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null + * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.create(metadata)](#Verification.create) ⇒ Promise + * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void + * [.update(metadata)](#Verification.update) ⇒ Promise + * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem + * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem + * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> - + -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy +### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Verification Activity. -**Kind**: static method of [Asset](#Asset) +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| key | string | customer key of single item to retrieve | -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) + -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +### Verification.handleRESTErrors(ex, id) ⇒ null +helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - +**Kind**: static method of [Verification](#Verification) +**Returns**: null - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON +| Param | Type | Description | +| --- | --- | --- | +| ex | Error | exception | +| id | string | id or key of item | -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - + -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | +### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of Data Extract Activity for caching - +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted +### Verification.create(metadata) ⇒ Promise +Creates a single Data Extract -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | +| metadata | TYPE.VerificationItem | a single Data Extract | - + -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) +### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void +helper for [createREST](#MetadataType.createREST) + +**Kind**: static method of [Verification](#Verification) | Param | Type | Description | | --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | +| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | +| apiResponse | object | varies depending on the API call | +| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - + -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending +### Verification.update(metadata) ⇒ Promise +Updates a single Data Extract -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise - Promise | Param | Type | Description | | --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | +| metadata | TYPE.VerificationItem | a single Data Extract | - + -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes +### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem +prepares a verification for deployment -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - metadata object | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | +| metadata | TYPE.VerificationItem | a single verification activity definition | - + -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure +### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem +parses retrieved Metadata before saving -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata +**Kind**: static method of [Verification](#Verification) +**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string | Param | Type | Description | | --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | +| metadata | TYPE.VerificationItem | a single verification activity definition | - + -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned +### Verification.deleteByKey(key) ⇒ Promise.<boolean> +Delete a metadata item from the specified business unit -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] +**Kind**: static method of [Verification](#Verification) +**Returns**: Promise.<boolean> - deletion success status | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| key | string | Identifier of item | - + -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit +## Retriever +Retrieves metadata from a business unit and saves it to the local filesystem. + +**Kind**: global class + +* [Retriever](#Retriever) + * [new Retriever(properties, buObject)](#new_Retriever_new) + * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> + * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> + + + +### new Retriever(properties, buObject) +Creates a Retriever, uses v2 auth if v2AuthOptions are passed. -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of data extension | +| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | +| buObject | TYPE.BuObject | properties for auth | - + -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk +### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> +Retrieve metadata of specified types into local file system and Retriever.metadata -**Kind**: static method of [Asset](#Asset) +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} | Param | Type | Description | | --- | --- | --- | -| customerKey | string | Identifier of metadata item | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | +| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | +| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | +| [changelogOnly] | boolean | skip saving, only create json in memory | - + -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id +### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> +helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found +**Kind**: instance method of [Retriever](#Retriever) +**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types | Param | Type | Description | | --- | --- | --- | -| id | string | Identifier of metadata | +| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | @@ -9847,6 +8523,36 @@ Returns an SDK instance to be used for API calls | sessionKey | string | key for specific BU | | authObject | TYPE.AuthObject | credentials for specific BU | + + +## getActualJson(customerKey, type, subtype, [buName]) ⇒ Promise.<string> +gets file from Retrieve folder + +**Kind**: global function +**Returns**: Promise.<string> - file in string form + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| customerKey | string | | of metadata | +| type | string | | of metadata | +| subtype | string | | of metadata | +| [buName] | string | "testBU" | used when we need to test on ParentBU | + + + +## getActualFile(customerKey, type, subtype, ext) ⇒ string +gets file from Retrieve folder + +**Kind**: global function +**Returns**: string - file path + +| Param | Type | Description | +| --- | --- | --- | +| customerKey | string | of metadata | +| type | string | of metadata | +| subtype | string | of metadata | +| ext | string | file extension | + ## TypeKeyCombo : Object.<string, string> diff --git a/test/resources/9999999/asset/resolveId-1234-notFound-expected.json b/test/resources/9999999/asset/resolveId-1234-notFound-expected.json new file mode 100644 index 000000000..4d8a1e072 --- /dev/null +++ b/test/resources/9999999/asset/resolveId-1234-notFound-expected.json @@ -0,0 +1 @@ +{ "error": "id not found" } diff --git a/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json b/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json new file mode 100644 index 000000000..2f9ef8a28 --- /dev/null +++ b/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json @@ -0,0 +1,6 @@ +{ + "key": "mcdev-issue-1157", + "mid": 9999999, + "name": "mcdev-issue-1157-Mcdev-strips-content", + "error": "file not found on local disk" +} diff --git a/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json b/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json new file mode 100644 index 000000000..9a05a481c --- /dev/null +++ b/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json @@ -0,0 +1,6 @@ +{ + "key": "mcdev-issue-1157", + "mid": 9999999, + "name": "mcdev-issue-1157-Mcdev-strips-content", + "path": "./retrieve/testInstance/testBU/asset/block/mcdev-issue-1157.asset-block-meta.html" +} diff --git a/test/type.asset.test.js b/test/type.asset.test.js index 6d7b26f83..308f21274 100644 --- a/test/type.asset.test.js +++ b/test/type.asset.test.js @@ -101,4 +101,65 @@ describe('type: asset', () => { return; }); }); + + describe('ResolveID ================', () => { + it('Should resolve the id of the item but NOT find the asset locally', async () => { + // WHEN + const resolveIdJson = await handler.resolveId( + 'testInstance/testBU', + 'asset', + '1295064' + ); + // THEN + assert.equal(process.exitCode, 0, 'resolveId should not have thrown an error'); + assert.deepEqual( + resolveIdJson, + await testUtils.getExpectedJson('9999999', 'asset', 'resolveId-1295064-noPath'), + 'returned response was not equal expected' + ); + return; + }); + + it('Should resolve the id with --json option enabled', async () => { + handler.setOptions({ json: true }); + // WHEN + await handler.resolveId('testInstance/testBU', 'asset', '1295064'); + // THEN + assert.equal(process.exitCode, 0, 'resolveId should not have thrown an error'); + return; + }); + + it('Should resolve the id of the item AND find the asset locally', async () => { + // prep test by retrieving the file + await handler.retrieve('testInstance/testBU', ['asset-block'], ['mcdev-issue-1157']); + // WHEN + const resolveIdJson = await handler.resolveId( + 'testInstance/testBU', + 'asset', + '1295064' + ); + // THEN + assert.equal(process.exitCode, 0, 'resolveId should not have thrown an error'); + assert.deepEqual( + resolveIdJson, + await testUtils.getExpectedJson('9999999', 'asset', 'resolveId-1295064-withPath'), + 'returned response was not equal expected' + ); + return; + }); + + it('Should NOT resolve the id of the item', async () => { + // WHEN + const resolveIdJson = await handler.resolveId('testInstance/testBU', 'asset', '-1234'); + // THEN + assert.equal(process.exitCode, 404, 'resolveId should have thrown an error'); + // IMPORTANT: this will throw a false "TEST-ERROR" but our testing framework currently needs to not find the file to throw a 404 + assert.deepEqual( + resolveIdJson, + await testUtils.getExpectedJson('9999999', 'asset', 'resolveId-1234-notFound'), + 'returned response was not equal expected' + ); + return; + }); + }); });