mcdev 7.6.3 → 7.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/ISSUE_TEMPLATE/task.md +1 -1
- package/.github/workflows/coverage-base-update.yml +2 -2
- package/.github/workflows/coverage-develop-branch.yml +3 -1
- package/.github/workflows/coverage-main-branch.yml +3 -1
- package/.github/workflows/coverage.yml +5 -3
- package/.mcdev-validations.js +0 -0
- package/@types/lib/Builder.d.ts +14 -0
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/MetadataTypeDefinitions.d.ts +2 -0
- package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
- package/@types/lib/MetadataTypeInfo.d.ts +2 -0
- package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
- package/@types/lib/index.d.ts +17 -8
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +11 -3
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DomainVerification.d.ts +180 -0
- package/@types/lib/metadataTypes/DomainVerification.d.ts.map +1 -0
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +7 -4
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +15 -7
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +2 -10
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +2 -10
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +7 -0
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts +2 -2
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts +8 -0
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts +0 -9
- package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/DomainVerification.definition.d.ts +100 -0
- package/@types/lib/metadataTypes/definitions/DomainVerification.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +1 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts +2 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +42 -1
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/lib/util/validations.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +34 -0
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/boilerplate/config.json +11 -0
- package/boilerplate/files/eslint.config.js +98 -3
- package/boilerplate/forcedUpdates.json +4 -0
- package/boilerplate/gitignore-template +1 -1
- package/boilerplate/npm-dependencies.json +1 -0
- package/eslint.config.js +4 -3
- package/lib/Builder.js +114 -54
- package/lib/Deployer.js +2 -2
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/cli.js +127 -3
- package/lib/index.js +217 -164
- package/lib/metadataTypes/Asset.js +76 -22
- package/lib/metadataTypes/DataExtension.js +10 -2
- package/lib/metadataTypes/DomainVerification.js +246 -0
- package/lib/metadataTypes/Event.js +21 -9
- package/lib/metadataTypes/Journey.js +339 -223
- package/lib/metadataTypes/MetadataType.js +153 -106
- package/lib/metadataTypes/MobileKeyword.js +5 -2
- package/lib/metadataTypes/MobileMessage.js +5 -2
- package/lib/metadataTypes/SendClassification.js +5 -0
- package/lib/metadataTypes/SenderProfile.js +102 -3
- package/lib/metadataTypes/TransactionalEmail.js +3 -1
- package/lib/metadataTypes/Verification.js +3 -1
- package/lib/metadataTypes/definitions/DomainVerification.definition.js +71 -0
- package/lib/metadataTypes/definitions/Journey.definition.js +7 -1
- package/lib/metadataTypes/definitions/SendClassification.definition.js +2 -2
- package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -1
- package/lib/util/config.js +6 -0
- package/lib/util/devops.js +130 -154
- package/lib/util/file.js +3 -3
- package/lib/util/replaceContentBlockReference.js +10 -3
- package/lib/util/util.js +96 -14
- package/lib/util/validations.js +34 -14
- package/package.json +10 -10
- package/test/general.test.js +339 -96
- package/test/mockRoot/.mcdev-validations.js +66 -0
- package/test/mockRoot/.mcdevrc.json +30 -2
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.html +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.html +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.html +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/testNew_assetMessage.asset-message-meta.json +435 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/views.html.content.asset-message-meta.html +150 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/testNew_asset_templatebasedemail.asset-message-meta.json +305 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/views.html.content.asset-message-meta.html +150 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/content.asset-template-meta.html +150 -0
- package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/testNew_asset_template.asset-template-meta.json +116 -0
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld.New@accenture.com.domainVerification-meta.json +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld@accenture.com.domainVerification-meta.json +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/mcdev.accenture.com.domainVerification-meta.json +6 -0
- package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_temail_notPublished.journey-meta.json +213 -0
- package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +1 -0
- package/test/resourceFactory.js +7 -24
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_assetMessage.json +441 -0
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_htmlblock.json +59 -0
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_template.json +147 -0
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_templatebasedemail.json +322 -0
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_notexisting.json +59 -0
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_preexisting.json +59 -0
- package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.html +1 -0
- package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.json +39 -0
- package/test/resources/9999999/automation/clone-expected.json +61 -0
- package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testExisting_dataExtension-response.xml +52 -0
- package/test/resources/9999999/dataExtension-deploy/testBlacklist_dataExtension.dataExtension-meta.json +20 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +137 -0
- package/test/resources/9999999/domainVerification/create-expected.json +3 -0
- package/test/resources/9999999/domainVerification/get-sap-expected.json +6 -0
- package/test/resources/9999999/domainVerification/update-expected.json +6 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +219 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testNew_temail_notPublished/get-response.json +218 -0
- package/test/resources/9999999/interaction/v1/interactions/post-response.json +216 -0
- package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +217 -0
- package/test/resources/9999999/messaging/v1/domainverification/delete/post-response.txt +1 -0
- package/test/resources/9999999/messaging/v1/domainverification/get-response.json +43 -0
- package/test/resources/9999999/messaging/v1/domainverification/post-response.txt +1 -0
- package/test/resources/9999999/messaging/v1/domainverification/update/post-response.txt +1 -0
- package/test/resources/9999999/messaging/v1/email/definitions/get-response.json +7 -0
- package/test/resources/9999999/messaging/v1/email/definitions/testNew_temail_notPublished/get-response.json +26 -0
- package/test/resources/9999999/query/clone-expected.json +8 -0
- package/test/resources/9999999/query/clone-expected.sql +7 -0
- package/test/resources/9999999/senderProfile/create-response.xml +1 -1
- package/test/resources/9999999/senderProfile/post-expected.json +1 -1
- package/test/resources/9999999/transactionalEmail/create-publish-expected.json +20 -0
- package/test/type.asset.test.js +216 -9
- package/test/type.automation.test.js +1 -1
- package/test/type.domainVerification.test.js +169 -0
- package/test/type.journey.test.js +107 -21
- package/test/type.script.test.js +1 -1
- package/test/type.sendClassification.test.js +3 -3
- package/test/type.senderProfile.test.js +26 -6
- package/test/type.transactionalEmail.test.js +5 -5
- package/test/type.triggeredSend.test.js +1 -1
- package/test/utils.js +8 -0
- package/types/mcdev.d.js +12 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import MetadataType from './MetadataType.js';
|
|
4
|
+
import File from '../util/file.js';
|
|
5
|
+
import DomainVerification from './DomainVerification.js';
|
|
4
6
|
import cache from '../util/cache.js';
|
|
5
7
|
import { Util } from '../util/util.js';
|
|
6
8
|
import ReplaceCbReference from '../util/replaceContentBlockReference.js';
|
|
@@ -119,9 +121,56 @@ class SenderProfile extends MetadataType {
|
|
|
119
121
|
|
|
120
122
|
delete metadata.Client;
|
|
121
123
|
}
|
|
124
|
+
|
|
125
|
+
// check if email address is verified. Otherwise this SenderProfile (and Send Classifications using it) will not be usable in Journey Builder
|
|
126
|
+
this.verifySenderEmailAddresses(metadata);
|
|
127
|
+
|
|
122
128
|
return metadata;
|
|
123
129
|
}
|
|
124
130
|
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param {MetadataTypeItem} metadata a single item
|
|
134
|
+
* @param {MetadataTypeItem} [metadataCaller] if called from SendClassification this can be used to adjust logs
|
|
135
|
+
* @param {any} [definition] type defintiion from SendClassification
|
|
136
|
+
*/
|
|
137
|
+
static verifySenderEmailAddresses(metadata, metadataCaller, definition) {
|
|
138
|
+
if (!metadataCaller) {
|
|
139
|
+
metadataCaller = metadata;
|
|
140
|
+
}
|
|
141
|
+
if (!definition) {
|
|
142
|
+
definition = this.definition;
|
|
143
|
+
}
|
|
144
|
+
const emailsToCheck = {
|
|
145
|
+
FromAddress: metadata.FromAddress.trim() + '',
|
|
146
|
+
FallbackFromAddress: metadata.FallbackFromAddress.trim() + '',
|
|
147
|
+
};
|
|
148
|
+
for (const [field, email] of Object.entries(emailsToCheck)) {
|
|
149
|
+
if (email && !email.startsWith('%%') && email.includes('@')) {
|
|
150
|
+
const domainVerification = cache.getByKey('domainVerification', email);
|
|
151
|
+
if (domainVerification) {
|
|
152
|
+
if (domainVerification.status !== 'Verified') {
|
|
153
|
+
Util.logger.warn(
|
|
154
|
+
Util.getMsgPrefix(definition, metadataCaller) +
|
|
155
|
+
`: ${field} ${email} is currently in status ${domainVerification.status}. This ${definition.typeName} will not be usable in Journey Builder. To fix, please go to Setup > Feature Settings > Email Studio > From Address Management to verify the email.`
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
if (domainVerification.isSendable === false) {
|
|
159
|
+
Util.logger.warn(
|
|
160
|
+
Util.getMsgPrefix(definition, metadataCaller) +
|
|
161
|
+
`: ${field} ${email} is currently not sendable. This ${definition.typeName} will not be usable in Journey Builder. To auto-fix run any update on senderProfile:"${metadata[this.definition.keyField]}" via mcdev.`
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
} else {
|
|
165
|
+
Util.logger.warn(
|
|
166
|
+
Util.getMsgPrefix(definition, metadataCaller) +
|
|
167
|
+
`: ${field} ${email} is not verified. This ${definition.typeName} will not be usable in Journey Builder. To auto-fix run any update on senderProfile:"${metadata[this.definition.keyField]}" via mcdev. Alternatively, please go to Setup > Feature Settings > Email Studio > From Address Management.`
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
125
174
|
/**
|
|
126
175
|
* prepares a single item for deployment
|
|
127
176
|
*
|
|
@@ -138,9 +187,8 @@ class SenderProfile extends MetadataType {
|
|
|
138
187
|
(metadata.AutoForwardToEmailAddress !== '' || metadata.AutoForwardToName !== '')
|
|
139
188
|
) {
|
|
140
189
|
Util.logger.warn(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}): AutoForwardToEmailAddress and AutoForwardToName will be ignored because UseDefaultRMMRules is set to true; setting UseDefaultRMMRules to false`
|
|
190
|
+
Util.getMsgPrefix(this.definition, metadata) +
|
|
191
|
+
`AutoForwardToEmailAddress and AutoForwardToName will be ignored because UseDefaultRMMRules is set to true; setting UseDefaultRMMRules to false`
|
|
144
192
|
);
|
|
145
193
|
metadata.UseDefaultRMMRules = false;
|
|
146
194
|
}
|
|
@@ -173,12 +221,63 @@ class SenderProfile extends MetadataType {
|
|
|
173
221
|
Util.logger.debug(
|
|
174
222
|
`Caching all ${this.definition.type} post-deploy to ensure we have all fields`
|
|
175
223
|
);
|
|
224
|
+
const domainVerificationEmails = new Set();
|
|
225
|
+
|
|
176
226
|
const typeCache = await this.retrieveForCache();
|
|
177
227
|
// update values in upsertResults with retrieved values before saving to disk
|
|
178
228
|
for (const key of Object.keys(upsertResults)) {
|
|
179
229
|
if (typeCache.metadata[key]) {
|
|
180
230
|
upsertResults[key] = typeCache.metadata[key];
|
|
181
231
|
}
|
|
232
|
+
|
|
233
|
+
// ensure the FromAddress is verified or else attempt to create it
|
|
234
|
+
const emailsToCheck = [
|
|
235
|
+
upsertResults[key].FromAddress.trim() + '',
|
|
236
|
+
upsertResults[key].FallbackFromAddress.trim() + '',
|
|
237
|
+
];
|
|
238
|
+
|
|
239
|
+
for (const email of emailsToCheck) {
|
|
240
|
+
if (email && !email.startsWith('%%') && email.includes('@')) {
|
|
241
|
+
const domainVerification = cache.getByKey('domainVerification', email);
|
|
242
|
+
if (!domainVerification) {
|
|
243
|
+
domainVerificationEmails.add(email);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (domainVerificationEmails.size) {
|
|
250
|
+
Util.logger.info(
|
|
251
|
+
Util.getGrayMsg(`Setting up required E-Mail Addresses for Sender Profiles:`)
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
const domainVerificationCreateMap = {};
|
|
255
|
+
for (const email of domainVerificationEmails) {
|
|
256
|
+
domainVerificationCreateMap[email] = {
|
|
257
|
+
domain: email,
|
|
258
|
+
isSendable: true,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const deployDir = File.normalizePath([
|
|
263
|
+
this.properties.directories.deploy,
|
|
264
|
+
this.buObject.credential,
|
|
265
|
+
this.buObject.businessUnit,
|
|
266
|
+
]);
|
|
267
|
+
const retrieveDir = File.normalizePath([
|
|
268
|
+
this.properties.directories.retrieve,
|
|
269
|
+
this.buObject.credential,
|
|
270
|
+
this.buObject.businessUnit,
|
|
271
|
+
]);
|
|
272
|
+
DomainVerification.buObject = this.buObject;
|
|
273
|
+
DomainVerification.client = this.client;
|
|
274
|
+
DomainVerification.properties = this.properties;
|
|
275
|
+
const domainVerificationCreateResult = await DomainVerification.deploy(
|
|
276
|
+
domainVerificationCreateMap,
|
|
277
|
+
deployDir,
|
|
278
|
+
retrieveDir
|
|
279
|
+
);
|
|
280
|
+
cache.mergeMetadata('domainVerification', domainVerificationCreateResult);
|
|
182
281
|
}
|
|
183
282
|
}
|
|
184
283
|
|
|
@@ -129,7 +129,7 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
129
129
|
*
|
|
130
130
|
* @param {MetadataTypeItem} _ not used
|
|
131
131
|
* @param {object} apiResponse varies depending on the API call
|
|
132
|
-
* @returns {Promise.<
|
|
132
|
+
* @returns {Promise.<object>} apiResponse
|
|
133
133
|
*/
|
|
134
134
|
static async postCreateTasks(_, apiResponse) {
|
|
135
135
|
if (apiResponse.journey?.interactionKey) {
|
|
@@ -144,6 +144,8 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
144
144
|
apiResponse.r__journey_key = apiResponse.journey.interactionKey;
|
|
145
145
|
delete apiResponse.journey;
|
|
146
146
|
}
|
|
147
|
+
|
|
148
|
+
return apiResponse;
|
|
147
149
|
}
|
|
148
150
|
|
|
149
151
|
/**
|
|
@@ -155,7 +155,7 @@ class Verification extends MetadataType {
|
|
|
155
155
|
* @param {MetadataTypeItem} metadataEntry a single metadata Entry
|
|
156
156
|
* @param {object} apiResponse varies depending on the API call
|
|
157
157
|
* @param {MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped
|
|
158
|
-
* @returns {Promise.<
|
|
158
|
+
* @returns {Promise.<object>} apiResponse
|
|
159
159
|
*/
|
|
160
160
|
static async postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) {
|
|
161
161
|
if (!apiResponse?.[this.definition.idField]) {
|
|
@@ -178,6 +178,8 @@ class Verification extends MetadataType {
|
|
|
178
178
|
Automation.createdKeyMap[buName][this.definition.type][
|
|
179
179
|
metadataEntryWithAllFields[this.definition.idField]
|
|
180
180
|
] = metadataEntry[this.definition.idField];
|
|
181
|
+
|
|
182
|
+
return apiResponse;
|
|
181
183
|
}
|
|
182
184
|
|
|
183
185
|
/**
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
bodyIteratorField: 'items',
|
|
3
|
+
dependencies: [],
|
|
4
|
+
dependencyGraph: null,
|
|
5
|
+
hasExtended: false,
|
|
6
|
+
idField: 'domain',
|
|
7
|
+
keyIsFixed: true, // you can only change the "isSendable" property
|
|
8
|
+
keyField: 'domain',
|
|
9
|
+
createdDateField: null,
|
|
10
|
+
createdNameField: null,
|
|
11
|
+
lastmodDateField: null,
|
|
12
|
+
lastmodNameField: null,
|
|
13
|
+
nameField: 'domain',
|
|
14
|
+
restPagination: true,
|
|
15
|
+
maxKeyLength: 254, // assumed max length
|
|
16
|
+
type: 'domainVerification',
|
|
17
|
+
typeDescription: 'Domains emails that are verified for sending',
|
|
18
|
+
typeRetrieveByDefault: true,
|
|
19
|
+
typeName: 'Domain Verification',
|
|
20
|
+
fields: {
|
|
21
|
+
domain: {
|
|
22
|
+
isCreateable: true,
|
|
23
|
+
isUpdateable: false,
|
|
24
|
+
retrieving: true,
|
|
25
|
+
template: true,
|
|
26
|
+
},
|
|
27
|
+
emailAddress: {
|
|
28
|
+
// this is the same as domain, but the update API uses this field name instead
|
|
29
|
+
isCreateable: false,
|
|
30
|
+
isUpdateable: true,
|
|
31
|
+
retrieving: false,
|
|
32
|
+
template: false,
|
|
33
|
+
},
|
|
34
|
+
enterpriseId: {
|
|
35
|
+
isCreateable: false,
|
|
36
|
+
isUpdateable: false,
|
|
37
|
+
retrieving: false,
|
|
38
|
+
template: false,
|
|
39
|
+
},
|
|
40
|
+
memberId: {
|
|
41
|
+
isCreateable: false,
|
|
42
|
+
isUpdateable: false,
|
|
43
|
+
retrieving: false,
|
|
44
|
+
template: false,
|
|
45
|
+
},
|
|
46
|
+
domainType: {
|
|
47
|
+
isCreateable: false,
|
|
48
|
+
isUpdateable: false,
|
|
49
|
+
retrieving: true,
|
|
50
|
+
template: true,
|
|
51
|
+
},
|
|
52
|
+
isSendable: {
|
|
53
|
+
isCreateable: false,
|
|
54
|
+
isUpdateable: true,
|
|
55
|
+
retrieving: true,
|
|
56
|
+
template: true,
|
|
57
|
+
},
|
|
58
|
+
status: {
|
|
59
|
+
isCreateable: false,
|
|
60
|
+
isUpdateable: false,
|
|
61
|
+
retrieving: true,
|
|
62
|
+
template: false,
|
|
63
|
+
},
|
|
64
|
+
emailSendTime: {
|
|
65
|
+
isCreateable: false,
|
|
66
|
+
isUpdateable: false,
|
|
67
|
+
retrieving: false,
|
|
68
|
+
template: false,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
@@ -358,7 +358,7 @@ export default {
|
|
|
358
358
|
retrieving: true,
|
|
359
359
|
template: true,
|
|
360
360
|
},
|
|
361
|
-
'
|
|
361
|
+
'activities[].configurationArguments.triggeredSend.sendClassificationId': {
|
|
362
362
|
isCreateable: true,
|
|
363
363
|
isUpdateable: true,
|
|
364
364
|
retrieving: true,
|
|
@@ -990,6 +990,12 @@ export default {
|
|
|
990
990
|
retrieving: true,
|
|
991
991
|
template: true,
|
|
992
992
|
},
|
|
993
|
+
'triggers[].metaData.scheduleState': {
|
|
994
|
+
isCreateable: true,
|
|
995
|
+
isUpdateable: true,
|
|
996
|
+
retrieving: true,
|
|
997
|
+
template: true,
|
|
998
|
+
},
|
|
993
999
|
version: {
|
|
994
1000
|
isCreateable: false,
|
|
995
1001
|
isUpdateable: true,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/sendclassification.html
|
|
2
2
|
export default {
|
|
3
3
|
bodyIteratorField: 'Results',
|
|
4
|
-
dependencies: ['senderProfile', 'deliveryProfile'],
|
|
4
|
+
dependencies: ['senderProfile', 'deliveryProfile', 'domainVerification'],
|
|
5
5
|
dependencyGraph: {
|
|
6
6
|
senderProfile: ['r__senderProfile_key'],
|
|
7
7
|
// deliveryProfile: ['r__deliveryProfile_key'], // deliveryProfile cannot be deployed
|
|
@@ -21,7 +21,7 @@ export default {
|
|
|
21
21
|
type: 'sendClassification',
|
|
22
22
|
typeDescription:
|
|
23
23
|
'Lets admins define Delivery Profile, Sender Profile and CAN-SPAM for an email job in a central location.',
|
|
24
|
-
typeRetrieveByDefault:
|
|
24
|
+
typeRetrieveByDefault: true,
|
|
25
25
|
typeName: 'Send Classification',
|
|
26
26
|
sendClassificationTypeMapping: {
|
|
27
27
|
Commercial: 'Marketing',
|
package/lib/util/config.js
CHANGED
|
@@ -46,6 +46,9 @@ const config = {
|
|
|
46
46
|
if (await File.pathExists(Util.configFileName)) {
|
|
47
47
|
try {
|
|
48
48
|
config.properties = await File.readJSON(Util.configFileName);
|
|
49
|
+
if (!isInit && !(await this.checkProperties(config.properties, silent))) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
49
52
|
} catch (ex) {
|
|
50
53
|
Util.logger.error(`${ex.code}: ${ex.message}`);
|
|
51
54
|
return;
|
|
@@ -94,6 +97,9 @@ const config = {
|
|
|
94
97
|
);
|
|
95
98
|
return;
|
|
96
99
|
}
|
|
100
|
+
} else if (!silent && !isInit) {
|
|
101
|
+
Util.logger.error(`Could not find ${Util.configFileName} in ${process.cwd()}.`);
|
|
102
|
+
Util.logger.error(`Run 'mcdev init' to initialize your project.\n`);
|
|
97
103
|
}
|
|
98
104
|
return config.properties;
|
|
99
105
|
},
|