mcdev 3.1.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +67 -7
- package/.github/ISSUE_TEMPLATE/bug.yml +5 -1
- package/.github/ISSUE_TEMPLATE/task.md +1 -1
- package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
- package/.github/dependabot.yml +14 -0
- package/.github/workflows/code-analysis.yml +57 -0
- package/.husky/commit-msg +10 -0
- package/.husky/post-checkout +5 -0
- package/.husky/pre-commit +2 -1
- package/.prettierrc +8 -0
- package/.vscode/settings.json +1 -1
- package/LICENSE +2 -2
- package/README.md +134 -45
- package/boilerplate/config.json +5 -11
- package/boilerplate/files/.prettierrc +8 -0
- package/boilerplate/files/.vscode/extensions.json +0 -1
- package/boilerplate/files/.vscode/settings.json +28 -2
- package/boilerplate/files/README.md +2 -2
- package/boilerplate/forcedUpdates.json +10 -0
- package/boilerplate/npm-dependencies.json +5 -5
- package/docs/dist/documentation.md +2795 -1724
- package/jsconfig.json +1 -1
- package/lib/Builder.js +166 -75
- package/lib/Deployer.js +244 -96
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/Retriever.js +61 -84
- package/lib/cli.js +133 -25
- package/lib/index.js +242 -563
- package/lib/metadataTypes/AccountUser.js +101 -95
- package/lib/metadataTypes/Asset.js +677 -248
- package/lib/metadataTypes/AttributeGroup.js +23 -12
- package/lib/metadataTypes/Automation.js +456 -357
- package/lib/metadataTypes/Campaign.js +33 -93
- package/lib/metadataTypes/ContentArea.js +31 -11
- package/lib/metadataTypes/DataExtension.js +391 -376
- package/lib/metadataTypes/DataExtensionField.js +131 -54
- package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
- package/lib/metadataTypes/DataExtract.js +67 -50
- package/lib/metadataTypes/DataExtractType.js +14 -8
- package/lib/metadataTypes/Discovery.js +21 -16
- package/lib/metadataTypes/Email.js +32 -12
- package/lib/metadataTypes/EmailSendDefinition.js +85 -80
- package/lib/metadataTypes/EventDefinition.js +69 -47
- package/lib/metadataTypes/FileTransfer.js +78 -54
- package/lib/metadataTypes/Filter.js +11 -4
- package/lib/metadataTypes/Folder.js +149 -117
- package/lib/metadataTypes/FtpLocation.js +14 -8
- package/lib/metadataTypes/ImportFile.js +69 -69
- package/lib/metadataTypes/Interaction.js +19 -4
- package/lib/metadataTypes/List.js +54 -13
- package/lib/metadataTypes/MetadataType.js +687 -479
- package/lib/metadataTypes/MobileCode.js +46 -0
- package/lib/metadataTypes/MobileKeyword.js +114 -0
- package/lib/metadataTypes/Query.js +204 -103
- package/lib/metadataTypes/Role.js +76 -61
- package/lib/metadataTypes/Script.js +146 -82
- package/lib/metadataTypes/SetDefinition.js +20 -8
- package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
- package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
- package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
- package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
- package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
- package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
- package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
- package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
- package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
- package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
- package/lib/metadataTypes/definitions/Query.definition.js +4 -0
- package/lib/metadataTypes/definitions/Role.definition.js +5 -0
- package/lib/metadataTypes/definitions/Script.definition.js +4 -0
- package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
- package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
- package/lib/retrieveChangelog.js +7 -6
- package/lib/util/auth.js +117 -0
- package/lib/util/businessUnit.js +55 -66
- package/lib/util/cache.js +194 -0
- package/lib/util/cli.js +90 -116
- package/lib/util/config.js +302 -0
- package/lib/util/devops.js +240 -50
- package/lib/util/file.js +120 -191
- package/lib/util/init.config.js +195 -69
- package/lib/util/init.git.js +45 -50
- package/lib/util/init.js +72 -59
- package/lib/util/init.npm.js +48 -39
- package/lib/util/util.js +280 -564
- package/package.json +44 -33
- package/test/dataExtension.test.js +152 -0
- package/test/mockRoot/.mcdev-auth.json +8 -0
- package/test/mockRoot/.mcdevrc.json +67 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
- package/test/query.test.js +149 -0
- package/test/resourceFactory.js +142 -0
- package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
- package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
- package/test/resources/9999999/dataExtension/build-expected.json +51 -0
- package/test/resources/9999999/dataExtension/create-expected.json +23 -0
- package/test/resources/9999999/dataExtension/create-response.xml +54 -0
- package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
- package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
- package/test/resources/9999999/dataExtension/template-expected.json +51 -0
- package/test/resources/9999999/dataExtension/update-expected.json +55 -0
- package/test/resources/9999999/dataExtension/update-response.xml +52 -0
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
- package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
- package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
- package/test/resources/9999999/query/build-expected.json +8 -0
- package/test/resources/9999999/query/get-expected.json +11 -0
- package/test/resources/9999999/query/patch-expected.json +11 -0
- package/test/resources/9999999/query/post-expected.json +11 -0
- package/test/resources/9999999/query/template-expected.json +8 -0
- package/test/resources/auth.json +32 -0
- package/test/resources/rest404-response.json +5 -0
- package/test/resources/retrieve-response.xml +21 -0
- package/test/utils.js +107 -0
- package/types/mcdev.d.js +301 -0
- package/CHANGELOG.md +0 -126
- package/PULL_REQUEST_TEMPLATE.md +0 -19
- package/test/util/file.js +0 -51
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
const Util = require('../util/util');
|
|
5
6
|
const File = require('../util/file');
|
|
7
|
+
const cache = require('../util/cache');
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* EventDefinition MetadataType
|
|
11
|
+
*
|
|
9
12
|
* @augments MetadataType
|
|
10
13
|
*/
|
|
11
14
|
class EventDefinition extends MetadataType {
|
|
@@ -13,35 +16,48 @@ class EventDefinition extends MetadataType {
|
|
|
13
16
|
* Retrieves Metadata of Event Definition.
|
|
14
17
|
* Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details.
|
|
15
18
|
* Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id}
|
|
16
|
-
*
|
|
17
|
-
* @
|
|
19
|
+
*
|
|
20
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
21
|
+
* @param {void} [_] unused parameter
|
|
22
|
+
* @param {void} [__] unused parameter
|
|
23
|
+
* @param {void} [___] unused parameter
|
|
24
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
25
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
18
26
|
*/
|
|
19
|
-
static retrieve(retrieveDir) {
|
|
20
|
-
return super.retrieveREST(
|
|
27
|
+
static retrieve(retrieveDir, _, __, ___, key) {
|
|
28
|
+
return super.retrieveREST(
|
|
29
|
+
retrieveDir,
|
|
30
|
+
`/interaction/v1/EventDefinitions${
|
|
31
|
+
key ? '/key:' + encodeURIComponent(key) : ''
|
|
32
|
+
}?extras=all`,
|
|
33
|
+
null,
|
|
34
|
+
null,
|
|
35
|
+
key
|
|
36
|
+
);
|
|
21
37
|
}
|
|
22
38
|
|
|
23
39
|
/**
|
|
24
40
|
* Retrieves event definition metadata for caching
|
|
25
|
-
*
|
|
41
|
+
*
|
|
42
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
26
43
|
*/
|
|
27
44
|
static retrieveForCache() {
|
|
28
|
-
return super.retrieveREST(null, '/interaction/v1/EventDefinitions/'
|
|
45
|
+
return super.retrieveREST(null, '/interaction/v1/EventDefinitions/');
|
|
29
46
|
}
|
|
30
47
|
|
|
31
48
|
/**
|
|
32
49
|
* Retrieve a specific Event Definition by Name
|
|
33
|
-
*
|
|
34
|
-
* @param {
|
|
35
|
-
* @param {
|
|
36
|
-
* @
|
|
50
|
+
*
|
|
51
|
+
* @param {string} templateDir Directory where retrieved metadata directory will be saved
|
|
52
|
+
* @param {string} name name of the metadata file
|
|
53
|
+
* @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata
|
|
54
|
+
* @returns {Promise.<TYPE.MetadataTypeItemObj>} Promise of metadata
|
|
37
55
|
*/
|
|
38
|
-
static async retrieveAsTemplate(templateDir, name,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const res = await this.client.RestClient.get(options);
|
|
44
|
-
const event = res.body.items.filter((item) => item.name === name);
|
|
56
|
+
static async retrieveAsTemplate(templateDir, name, templateVariables) {
|
|
57
|
+
const res = await this.client.rest.get(
|
|
58
|
+
'/interaction/v1/EventDefinitions?name=' + encodeURIComponent(name)
|
|
59
|
+
);
|
|
60
|
+
const event = res.items.filter((item) => item.name === name);
|
|
45
61
|
try {
|
|
46
62
|
if (!event || event.length === 0) {
|
|
47
63
|
throw new Error(`No Event Definitions Found with name "${name}"`);
|
|
@@ -50,9 +66,13 @@ class EventDefinition extends MetadataType {
|
|
|
50
66
|
`Multiple Event Definitions with name "${name}"` +
|
|
51
67
|
`please rename to be unique to avoid issues`
|
|
52
68
|
);
|
|
53
|
-
} else if (event
|
|
69
|
+
} else if (event?.length === 1) {
|
|
70
|
+
const originalKey = event[0][this.definition.keyField];
|
|
54
71
|
const eventDef = JSON.parse(
|
|
55
|
-
Util.replaceByObject(
|
|
72
|
+
Util.replaceByObject(
|
|
73
|
+
JSON.stringify(this.parseMetadata(event[0])),
|
|
74
|
+
templateVariables
|
|
75
|
+
)
|
|
56
76
|
);
|
|
57
77
|
if (!eventDef.dataExtensionId) {
|
|
58
78
|
throw new Error(
|
|
@@ -65,14 +85,12 @@ class EventDefinition extends MetadataType {
|
|
|
65
85
|
|
|
66
86
|
// remove all fields listed in Definition for templating
|
|
67
87
|
this.keepTemplateFields(eventDef);
|
|
68
|
-
File.writeJSONToFile(
|
|
88
|
+
await File.writeJSONToFile(
|
|
69
89
|
[templateDir, this.definition.type].join('/'),
|
|
70
|
-
|
|
71
|
-
JSON.parse(Util.replaceByObject(JSON.stringify(eventDef),
|
|
72
|
-
);
|
|
73
|
-
Util.logger.info(
|
|
74
|
-
`EventDefinition.retrieveAsTemplate:: Written Metadata to filesystem (${name})`
|
|
90
|
+
originalKey + '.' + this.definition.type + '-meta',
|
|
91
|
+
JSON.parse(Util.replaceByObject(JSON.stringify(eventDef), templateVariables))
|
|
75
92
|
);
|
|
93
|
+
Util.logger.info(`- templated ${this.definition.type}: ${name}`);
|
|
76
94
|
return { metadata: eventDef, type: this.definition.type };
|
|
77
95
|
} else {
|
|
78
96
|
throw new Error(
|
|
@@ -89,8 +107,9 @@ class EventDefinition extends MetadataType {
|
|
|
89
107
|
|
|
90
108
|
/**
|
|
91
109
|
* manages post retrieve steps
|
|
92
|
-
*
|
|
93
|
-
* @
|
|
110
|
+
*
|
|
111
|
+
* @param {TYPE.MetadataTypeItem} eventDef a single item of Event Definition
|
|
112
|
+
* @returns {TYPE.MetadataTypeItem} metadata
|
|
94
113
|
*/
|
|
95
114
|
static postRetrieveTasks(eventDef) {
|
|
96
115
|
const val = this.parseMetadata(eventDef);
|
|
@@ -100,7 +119,8 @@ class EventDefinition extends MetadataType {
|
|
|
100
119
|
|
|
101
120
|
/**
|
|
102
121
|
* Creates a single Event Definition
|
|
103
|
-
*
|
|
122
|
+
*
|
|
123
|
+
* @param {TYPE.MetadataTypeItem} EventDefinition a single Event Definition
|
|
104
124
|
* @returns {Promise} Promise
|
|
105
125
|
*/
|
|
106
126
|
static create(EventDefinition) {
|
|
@@ -109,18 +129,22 @@ class EventDefinition extends MetadataType {
|
|
|
109
129
|
|
|
110
130
|
/**
|
|
111
131
|
* Updates a single Event Definition (using PUT method since PATCH isn't supported)
|
|
112
|
-
*
|
|
132
|
+
*
|
|
133
|
+
* @param {TYPE.MetadataTypeItem} metadataEntry a single Event Definition
|
|
113
134
|
* @returns {Promise} Promise
|
|
114
135
|
*/
|
|
115
|
-
static async update(
|
|
116
|
-
|
|
136
|
+
static async update(metadataEntry) {
|
|
137
|
+
if (metadataEntry === null || metadataEntry === undefined) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
this.removeNotUpdateableFields(metadataEntry);
|
|
117
141
|
const options = {
|
|
118
|
-
uri: '/interaction/v1/EventDefinitions/' +
|
|
119
|
-
json:
|
|
142
|
+
uri: '/interaction/v1/EventDefinitions/' + metadataEntry.id,
|
|
143
|
+
json: metadataEntry,
|
|
120
144
|
headers: {},
|
|
121
145
|
};
|
|
122
146
|
try {
|
|
123
|
-
const response = await this.client.
|
|
147
|
+
const response = await this.client.rest.put(options);
|
|
124
148
|
super.checkForErrors(response);
|
|
125
149
|
return response;
|
|
126
150
|
} catch (ex) {
|
|
@@ -129,7 +153,7 @@ class EventDefinition extends MetadataType {
|
|
|
129
153
|
this.definition.type,
|
|
130
154
|
'updateREST',
|
|
131
155
|
ex,
|
|
132
|
-
|
|
156
|
+
metadataEntry.name
|
|
133
157
|
);
|
|
134
158
|
return null;
|
|
135
159
|
}
|
|
@@ -137,12 +161,12 @@ class EventDefinition extends MetadataType {
|
|
|
137
161
|
|
|
138
162
|
/**
|
|
139
163
|
* prepares an event definition for deployment
|
|
140
|
-
*
|
|
141
|
-
* @
|
|
164
|
+
*
|
|
165
|
+
* @param {TYPE.MetadataTypeItem} metadata a single eventDefinition
|
|
166
|
+
* @returns {TYPE.MetadataTypeItem} parsed version
|
|
142
167
|
*/
|
|
143
|
-
static
|
|
144
|
-
metadata.dataExtensionId =
|
|
145
|
-
this.cache,
|
|
168
|
+
static preDeployTasks(metadata) {
|
|
169
|
+
metadata.dataExtensionId = cache.searchForField(
|
|
146
170
|
'dataExtension',
|
|
147
171
|
metadata.dataExtensionName,
|
|
148
172
|
'Name',
|
|
@@ -154,13 +178,13 @@ class EventDefinition extends MetadataType {
|
|
|
154
178
|
|
|
155
179
|
/**
|
|
156
180
|
* parses retrieved Metadata before saving
|
|
157
|
-
*
|
|
158
|
-
* @
|
|
181
|
+
*
|
|
182
|
+
* @param {TYPE.MetadataTypeItem} metadata a single event definition
|
|
183
|
+
* @returns {TYPE.MetadataTypeItem} parsed metadata
|
|
159
184
|
*/
|
|
160
185
|
static parseMetadata(metadata) {
|
|
161
186
|
try {
|
|
162
|
-
metadata.dataExtensionId =
|
|
163
|
-
this.cache,
|
|
187
|
+
metadata.dataExtensionId = cache.searchForField(
|
|
164
188
|
'dataExtension',
|
|
165
189
|
metadata.dataExtensionId,
|
|
166
190
|
'ObjectID',
|
|
@@ -168,7 +192,7 @@ class EventDefinition extends MetadataType {
|
|
|
168
192
|
);
|
|
169
193
|
metadata.arguments.dataExtensionId = metadata.dataExtensionId;
|
|
170
194
|
return JSON.parse(JSON.stringify(metadata));
|
|
171
|
-
} catch
|
|
195
|
+
} catch {
|
|
172
196
|
Util.metadataLogger(
|
|
173
197
|
'verbose',
|
|
174
198
|
this.definition.type,
|
|
@@ -182,7 +206,5 @@ class EventDefinition extends MetadataType {
|
|
|
182
206
|
|
|
183
207
|
// Assign definition to static attributes
|
|
184
208
|
EventDefinition.definition = require('../MetadataTypeDefinitions').eventDefinition;
|
|
185
|
-
EventDefinition.cache = {};
|
|
186
|
-
EventDefinition.client = undefined;
|
|
187
209
|
|
|
188
210
|
module.exports = EventDefinition;
|
|
@@ -1,86 +1,97 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
const Util = require('../util/util');
|
|
5
6
|
const File = require('../util/file');
|
|
7
|
+
const cache = require('../util/cache');
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* FileTransfer MetadataType
|
|
11
|
+
*
|
|
9
12
|
* @augments MetadataType
|
|
10
13
|
*/
|
|
11
14
|
class FileTransfer extends MetadataType {
|
|
12
15
|
/**
|
|
13
16
|
* Retrieves Metadata of FileTransfer Activity.
|
|
14
17
|
* Endpoint /automation/v1/filetransfers/ returns all File Transfers
|
|
15
|
-
*
|
|
16
|
-
* @
|
|
18
|
+
*
|
|
19
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
20
|
+
* @param {void} [_] unused parameter
|
|
21
|
+
* @param {void} [__] unused parameter
|
|
22
|
+
* @param {void} [___] unused parameter
|
|
23
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
24
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
17
25
|
*/
|
|
18
|
-
static async retrieve(retrieveDir) {
|
|
19
|
-
return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null);
|
|
26
|
+
static async retrieve(retrieveDir, _, __, ___, key) {
|
|
27
|
+
return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null, null, key);
|
|
20
28
|
}
|
|
21
29
|
/**
|
|
22
30
|
* Retrieves Metadata of FileTransfer Activity for caching
|
|
23
|
-
*
|
|
31
|
+
*
|
|
32
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
24
33
|
*/
|
|
25
34
|
static async retrieveForCache() {
|
|
26
|
-
return super.retrieveREST(null, '/automation/v1/filetransfers/'
|
|
35
|
+
return super.retrieveREST(null, '/automation/v1/filetransfers/');
|
|
27
36
|
}
|
|
28
37
|
|
|
29
38
|
/**
|
|
30
39
|
* Retrieve a specific File Transfer Definition by Name
|
|
31
|
-
*
|
|
32
|
-
* @param {
|
|
33
|
-
* @param {
|
|
34
|
-
* @
|
|
40
|
+
*
|
|
41
|
+
* @param {string} templateDir Directory where retrieved metadata directory will be saved
|
|
42
|
+
* @param {string} name name of the metadata file
|
|
43
|
+
* @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata
|
|
44
|
+
* @returns {Promise.<TYPE.MetadataTypeItemObj>} Promise
|
|
35
45
|
*/
|
|
36
|
-
static async retrieveAsTemplate(templateDir, name,
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const res = await this.client.RestClient.get(options);
|
|
42
|
-
if (res.body && Array.isArray(res.body.items) && res.body.items.length) {
|
|
46
|
+
static async retrieveAsTemplate(templateDir, name, templateVariables) {
|
|
47
|
+
const res = await this.client.rest.get(
|
|
48
|
+
'/automation/v1/filetransfers/?$filter=name%20eq%20' + encodeURIComponent(name)
|
|
49
|
+
);
|
|
50
|
+
if (Array.isArray(res?.items) && res?.items?.length) {
|
|
43
51
|
// eq-operator returns a similar, not exact match and hence might return more than 1 entry
|
|
44
|
-
const
|
|
52
|
+
const metadata = res.items.find((item) => item.name === name);
|
|
45
53
|
if (!metadata) {
|
|
46
54
|
Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
|
|
47
55
|
return;
|
|
48
56
|
}
|
|
49
57
|
|
|
50
58
|
// get full definition
|
|
51
|
-
const extended = await this.client.
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
const extended = await this.client.rest.get(
|
|
60
|
+
'/automation/v1/filetransfers/' + metadata[this.definition.idField]
|
|
61
|
+
);
|
|
62
|
+
const originalKey = extended[this.definition.keyField];
|
|
54
63
|
const val = JSON.parse(
|
|
55
|
-
Util.replaceByObject(
|
|
64
|
+
Util.replaceByObject(
|
|
65
|
+
JSON.stringify(this.parseMetadata(extended)),
|
|
66
|
+
templateVariables
|
|
67
|
+
)
|
|
56
68
|
);
|
|
57
69
|
|
|
58
70
|
// remove all fields listed in Definition for templating
|
|
59
71
|
this.keepTemplateFields(val);
|
|
60
|
-
File.writeJSONToFile(
|
|
72
|
+
await File.writeJSONToFile(
|
|
61
73
|
[templateDir, this.definition.type].join('/'),
|
|
62
|
-
|
|
63
|
-
JSON.parse(Util.replaceByObject(JSON.stringify(val),
|
|
64
|
-
);
|
|
65
|
-
Util.logger.info(
|
|
66
|
-
`FileTransfer.retrieveAsTemplate:: Written Metadata to filesystem (${name})`
|
|
74
|
+
originalKey + '.' + this.definition.type + '-meta',
|
|
75
|
+
JSON.parse(Util.replaceByObject(JSON.stringify(val), templateVariables))
|
|
67
76
|
);
|
|
77
|
+
Util.logger.info(`- templated ${this.definition.type}: ${name}`);
|
|
68
78
|
return { metadata: val, type: this.definition.type };
|
|
69
|
-
} else if (res
|
|
79
|
+
} else if (res?.items) {
|
|
70
80
|
Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
|
|
71
81
|
} else {
|
|
72
82
|
throw new Error(
|
|
73
83
|
`Encountered unknown error when retrieveing ${
|
|
74
84
|
this.definition.typeName
|
|
75
|
-
} "${name}": ${JSON.stringify(res
|
|
85
|
+
} "${name}": ${JSON.stringify(res)}`
|
|
76
86
|
);
|
|
77
87
|
}
|
|
78
88
|
}
|
|
79
89
|
|
|
80
90
|
/**
|
|
81
91
|
* manages post retrieve steps
|
|
82
|
-
*
|
|
83
|
-
* @
|
|
92
|
+
*
|
|
93
|
+
* @param {TYPE.MetadataTypeItem} metadata a single fileTransfer activity definition
|
|
94
|
+
* @returns {object[]} metadata
|
|
84
95
|
*/
|
|
85
96
|
static postRetrieveTasks(metadata) {
|
|
86
97
|
const values = this.parseMetadata(metadata);
|
|
@@ -89,7 +100,8 @@ class FileTransfer extends MetadataType {
|
|
|
89
100
|
|
|
90
101
|
/**
|
|
91
102
|
* Creates a single File Transfer
|
|
92
|
-
*
|
|
103
|
+
*
|
|
104
|
+
* @param {TYPE.MetadataTypeItem} fileTransfer a single File Transfer
|
|
93
105
|
* @returns {Promise} Promise
|
|
94
106
|
*/
|
|
95
107
|
static create(fileTransfer) {
|
|
@@ -98,7 +110,8 @@ class FileTransfer extends MetadataType {
|
|
|
98
110
|
|
|
99
111
|
/**
|
|
100
112
|
* Updates a single File Transfer
|
|
101
|
-
*
|
|
113
|
+
*
|
|
114
|
+
* @param {TYPE.MetadataTypeItem} fileTransfer a single File Transfer
|
|
102
115
|
* @returns {Promise} Promise
|
|
103
116
|
*/
|
|
104
117
|
static update(fileTransfer) {
|
|
@@ -107,40 +120,51 @@ class FileTransfer extends MetadataType {
|
|
|
107
120
|
|
|
108
121
|
/**
|
|
109
122
|
* prepares a fileTransfer for deployment
|
|
110
|
-
*
|
|
123
|
+
*
|
|
124
|
+
* @param {TYPE.MetadataTypeItem} metadata a single fileTransfer activity definition
|
|
111
125
|
* @returns {Promise} Promise
|
|
112
126
|
*/
|
|
113
127
|
static async preDeployTasks(metadata) {
|
|
114
|
-
metadata.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
if (metadata.r__ftpLocation_name) {
|
|
129
|
+
metadata.fileTransferLocationId = cache.searchForField(
|
|
130
|
+
'ftpLocation',
|
|
131
|
+
metadata.r__ftpLocation_name,
|
|
132
|
+
'name',
|
|
133
|
+
'id'
|
|
134
|
+
);
|
|
135
|
+
} else {
|
|
136
|
+
throw new Error(
|
|
137
|
+
'r__ftpLocation_name not set. Please ensure the source is properly set up and re-retrieve it first.'
|
|
138
|
+
);
|
|
139
|
+
}
|
|
121
140
|
return metadata;
|
|
122
141
|
}
|
|
123
142
|
/**
|
|
124
143
|
* parses retrieved Metadata before saving
|
|
125
|
-
*
|
|
126
|
-
* @
|
|
144
|
+
*
|
|
145
|
+
* @param {TYPE.MetadataTypeItem} metadata a single fileTransfer activity definition
|
|
146
|
+
* @returns {TYPE.MetadataTypeItem} parsed metadata
|
|
127
147
|
*/
|
|
128
148
|
static parseMetadata(metadata) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
149
|
+
try {
|
|
150
|
+
metadata.r__ftpLocation_name = cache.searchForField(
|
|
151
|
+
'ftpLocation',
|
|
152
|
+
metadata.fileTransferLocationId,
|
|
153
|
+
'id',
|
|
154
|
+
'name'
|
|
155
|
+
);
|
|
156
|
+
delete metadata.fileTransferLocationId;
|
|
157
|
+
} catch (ex) {
|
|
158
|
+
Util.logger.warn(
|
|
159
|
+
` - FileTransfer '${metadata[this.definition.keyField]}': ${ex.message}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
137
163
|
return metadata;
|
|
138
164
|
}
|
|
139
165
|
}
|
|
140
166
|
|
|
141
167
|
// Assign definition to static attributes
|
|
142
168
|
FileTransfer.definition = require('../MetadataTypeDefinitions').fileTransfer;
|
|
143
|
-
FileTransfer.cache = {};
|
|
144
|
-
FileTransfer.client = undefined;
|
|
145
169
|
|
|
146
170
|
module.exports = FileTransfer;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Filter MetadataType
|
|
8
|
+
*
|
|
7
9
|
* @augments MetadataType
|
|
8
10
|
*/
|
|
9
11
|
class Filter extends MetadataType {
|
|
@@ -12,11 +14,16 @@ class Filter extends MetadataType {
|
|
|
12
14
|
* Endpoint /automation/v1/filters/ returns all Filters,
|
|
13
15
|
* but only with some of the fields. So it is needed to loop over
|
|
14
16
|
* Filters with the endpoint /automation/v1/filters/{id}
|
|
15
|
-
*
|
|
16
|
-
* @
|
|
17
|
+
*
|
|
18
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
19
|
+
* @param {void} [_] unused parameter
|
|
20
|
+
* @param {void} [__] unused parameter
|
|
21
|
+
* @param {void} [___] unused parameter
|
|
22
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
23
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
17
24
|
*/
|
|
18
|
-
static async retrieve(retrieveDir) {
|
|
19
|
-
return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null);
|
|
25
|
+
static async retrieve(retrieveDir, _, __, ___, key) {
|
|
26
|
+
return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, null, key);
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
|