mcdev 7.1.3 → 7.2.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/.fork/custom-commands.json +123 -21
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/dependabot.yml +1 -0
- package/.husky/post-checkout +6 -1
- package/.husky/post-merge +5 -0
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/cli.d.ts.map +1 -1
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +0 -1
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +0 -1
- package/@types/lib/util/auth.d.ts.map +1 -1
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts.map +1 -1
- package/@types/lib/util/config.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/file.d.ts.map +1 -1
- package/@types/lib/util/init.config.d.ts.map +1 -1
- package/@types/lib/util/init.d.ts.map +1 -1
- package/@types/lib/util/init.git.d.ts.map +1 -1
- package/@types/lib/util/init.npm.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/lib/Builder.js +4 -0
- package/lib/Deployer.js +2 -0
- package/lib/cli.js +1 -0
- package/lib/index.js +31 -0
- package/lib/metadataTypes/Asset.js +30 -0
- package/lib/metadataTypes/AttributeGroup.js +2 -0
- package/lib/metadataTypes/AttributeSet.js +3 -0
- package/lib/metadataTypes/Automation.js +15 -0
- package/lib/metadataTypes/Campaign.js +1 -0
- package/lib/metadataTypes/ContentArea.js +2 -0
- package/lib/metadataTypes/DataExtension.js +12 -0
- package/lib/metadataTypes/DataExtensionField.js +8 -0
- package/lib/metadataTypes/DataExtract.js +3 -0
- package/lib/metadataTypes/DataExtractType.js +1 -0
- package/lib/metadataTypes/Discovery.js +1 -0
- package/lib/metadataTypes/Email.js +2 -0
- package/lib/metadataTypes/Event.js +4 -0
- package/lib/metadataTypes/FileTransfer.js +1 -0
- package/lib/metadataTypes/Folder.js +14 -2
- package/lib/metadataTypes/ImportFile.js +2 -0
- package/lib/metadataTypes/Journey.js +288 -141
- package/lib/metadataTypes/List.js +2 -0
- package/lib/metadataTypes/MetadataType.js +34 -0
- package/lib/metadataTypes/MobileKeyword.js +8 -0
- package/lib/metadataTypes/MobileMessage.js +7 -0
- package/lib/metadataTypes/Query.js +9 -0
- package/lib/metadataTypes/Role.js +1 -0
- package/lib/metadataTypes/Script.js +7 -0
- package/lib/metadataTypes/SendClassification.js +2 -0
- package/lib/metadataTypes/SenderProfile.js +2 -0
- package/lib/metadataTypes/TransactionalEmail.js +23 -3
- package/lib/metadataTypes/TransactionalMessage.js +3 -0
- package/lib/metadataTypes/TransactionalPush.js +1 -0
- package/lib/metadataTypes/TransactionalSMS.js +8 -0
- package/lib/metadataTypes/TriggeredSend.js +4 -0
- package/lib/metadataTypes/User.js +10 -0
- package/lib/metadataTypes/Verification.js +3 -0
- package/lib/metadataTypes/definitions/Journey.definition.js +0 -1
- package/lib/retrieveChangelog.js +1 -0
- package/lib/util/auth.js +3 -0
- package/lib/util/cache.js +8 -0
- package/lib/util/cli.js +8 -0
- package/lib/util/config.js +2 -0
- package/lib/util/devops.js +2 -0
- package/lib/util/file.js +65 -49
- package/lib/util/init.config.js +5 -0
- package/lib/util/init.git.js +4 -0
- package/lib/util/init.js +4 -0
- package/lib/util/init.npm.js +1 -0
- package/lib/util/replaceContentBlockReference.js +1 -0
- package/lib/util/util.js +29 -0
- package/package.json +15 -15
- package/test/general.test.js +13 -13
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/resourceFactory.js +27 -4
- package/test/resources/9999999/dataExtension/retrieve-response.xml +29 -0
- package/test/resources/9999999/dataFolder/+retrieve-QAA-response.xml +387 -0
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=my,ParentFolderID=2-response.xml +33 -0
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=path,ParentFolderID=862002-response.xml +33 -0
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=sub,ParentFolderID=862001-response.xml +33 -0
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=subpath,ParentFolderID=862003-response.xml +33 -0
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=290937,name=my,catType=automations.json +7 -0
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862100,name=sub,catType=automations.json +7 -0
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862101,name=path,catType=automations.json +7 -0
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862102,name=subpath,catType=automations.json +7 -0
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path/subpath.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/Data Extensions/my.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/my automations/my/sub/path/subpath.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/my automations/my/sub/path.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/my automations/my/sub.folder-meta.json +9 -0
- package/test/resources/9999999/folder-deploy/my automations/my.folder-meta.json +9 -0
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +38 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response.json +226 -0
- package/test/resources/9999999/interaction/v1/interactions/transactional/create/post-response.json +3 -0
- package/test/resources/9999999/messaging/v1/email/definitions/get-response.json +7 -0
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail_notPublished/get-response.json +26 -0
- package/test/type.asset.test.js +4 -0
- package/test/type.automation.test.js +1 -1
- package/test/type.dataExtension.test.js +4 -4
- package/test/type.folder.test.js +97 -0
- package/test/type.journey.test.js +84 -21
- package/test/type.transactionalEmail.test.js +7 -7
- package/test/utils.js +44 -5
- package/types/mcdev.d.js +27 -0
- /package/test/resources/9999999/dataFolder/{retrieve-response-.xml → +retrieve-response.xml} +0 -0
|
@@ -215,6 +215,7 @@ class MetadataType {
|
|
|
215
215
|
static postRetrieveTasks(metadata, targetDir, isTemplating) {
|
|
216
216
|
return structuredClone(metadata);
|
|
217
217
|
}
|
|
218
|
+
|
|
218
219
|
/**
|
|
219
220
|
* generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
|
|
220
221
|
*
|
|
@@ -240,6 +241,7 @@ class MetadataType {
|
|
|
240
241
|
);
|
|
241
242
|
}
|
|
242
243
|
}
|
|
244
|
+
|
|
243
245
|
/**
|
|
244
246
|
* generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy
|
|
245
247
|
*
|
|
@@ -272,6 +274,7 @@ class MetadataType {
|
|
|
272
274
|
const metadata = {};
|
|
273
275
|
return { metadata: {}, type: this.definition.type };
|
|
274
276
|
}
|
|
277
|
+
|
|
275
278
|
/**
|
|
276
279
|
* Gets metadata from Marketing Cloud
|
|
277
280
|
*
|
|
@@ -294,6 +297,7 @@ class MetadataType {
|
|
|
294
297
|
static async retrieveForCache(additionalFields, subTypeArr, key) {
|
|
295
298
|
return this.retrieve(null, additionalFields, subTypeArr, key);
|
|
296
299
|
}
|
|
300
|
+
|
|
297
301
|
/**
|
|
298
302
|
* Gets metadata cache with limited fields and does not store value to disk
|
|
299
303
|
*
|
|
@@ -313,6 +317,7 @@ class MetadataType {
|
|
|
313
317
|
);
|
|
314
318
|
return { metadata: null, type: this.definition.type };
|
|
315
319
|
}
|
|
320
|
+
|
|
316
321
|
/**
|
|
317
322
|
* Retrieve a specific Script by Name
|
|
318
323
|
*
|
|
@@ -468,6 +473,7 @@ class MetadataType {
|
|
|
468
473
|
);
|
|
469
474
|
return;
|
|
470
475
|
}
|
|
476
|
+
|
|
471
477
|
/**
|
|
472
478
|
* Abstract refresh method that needs to be implemented in child metadata type
|
|
473
479
|
*
|
|
@@ -500,6 +506,7 @@ class MetadataType {
|
|
|
500
506
|
await this.replaceCbReferenceLoop(metadataMap, retrieveDir, findAssetKeys);
|
|
501
507
|
return findAssetKeys;
|
|
502
508
|
}
|
|
509
|
+
|
|
503
510
|
/**
|
|
504
511
|
* this iterates over all items found in the retrieve folder and executes the type-specific method for replacing references
|
|
505
512
|
*
|
|
@@ -573,6 +580,7 @@ class MetadataType {
|
|
|
573
580
|
}
|
|
574
581
|
return keysForDeploy;
|
|
575
582
|
}
|
|
583
|
+
|
|
576
584
|
/**
|
|
577
585
|
* Abstract execute method that needs to be implemented in child metadata type
|
|
578
586
|
*
|
|
@@ -600,6 +608,7 @@ class MetadataType {
|
|
|
600
608
|
);
|
|
601
609
|
return [];
|
|
602
610
|
}
|
|
611
|
+
|
|
603
612
|
/**
|
|
604
613
|
* Abstract pause method that needs to be implemented in child metadata type
|
|
605
614
|
*
|
|
@@ -625,6 +634,7 @@ class MetadataType {
|
|
|
625
634
|
// should be set up type by type but the *_generic version is likely a good start for many types
|
|
626
635
|
return true;
|
|
627
636
|
}
|
|
637
|
+
|
|
628
638
|
/**
|
|
629
639
|
* test if metadata was actually changed or not to potentially skip it during deployment
|
|
630
640
|
*
|
|
@@ -681,6 +691,7 @@ class MetadataType {
|
|
|
681
691
|
}
|
|
682
692
|
return false;
|
|
683
693
|
}
|
|
694
|
+
|
|
684
695
|
/**
|
|
685
696
|
* MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed.
|
|
686
697
|
*
|
|
@@ -1200,6 +1211,7 @@ class MetadataType {
|
|
|
1200
1211
|
return null;
|
|
1201
1212
|
}
|
|
1202
1213
|
}
|
|
1214
|
+
|
|
1203
1215
|
/**
|
|
1204
1216
|
*
|
|
1205
1217
|
* @param {SOAPError} ex error that occured
|
|
@@ -1216,6 +1228,7 @@ class MetadataType {
|
|
|
1216
1228
|
Util.logger.error(` ☇ error ${msg} ${this.definition.type}${name}: ${errorMsg}`);
|
|
1217
1229
|
}
|
|
1218
1230
|
}
|
|
1231
|
+
|
|
1219
1232
|
/**
|
|
1220
1233
|
* helper for {@link MetadataType._handleSOAPErrors}
|
|
1221
1234
|
*
|
|
@@ -1232,6 +1245,7 @@ class MetadataType {
|
|
|
1232
1245
|
}
|
|
1233
1246
|
return ex.message;
|
|
1234
1247
|
}
|
|
1248
|
+
|
|
1235
1249
|
/**
|
|
1236
1250
|
* Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
1237
1251
|
*
|
|
@@ -1321,6 +1335,7 @@ class MetadataType {
|
|
|
1321
1335
|
type: this.definition.type,
|
|
1322
1336
|
};
|
|
1323
1337
|
}
|
|
1338
|
+
|
|
1324
1339
|
/**
|
|
1325
1340
|
*
|
|
1326
1341
|
* @param {object[]} urlArray {uri: string, id: string} combo of URL and ID/key of metadata
|
|
@@ -1377,6 +1392,7 @@ class MetadataType {
|
|
|
1377
1392
|
|
|
1378
1393
|
return null;
|
|
1379
1394
|
}
|
|
1395
|
+
|
|
1380
1396
|
/**
|
|
1381
1397
|
* Used to execute a query/automation etc.
|
|
1382
1398
|
*
|
|
@@ -1588,6 +1604,7 @@ class MetadataType {
|
|
|
1588
1604
|
}, metadataEntry);
|
|
1589
1605
|
}
|
|
1590
1606
|
}
|
|
1607
|
+
|
|
1591
1608
|
/**
|
|
1592
1609
|
* Remove fields from metadata entry that are not createable
|
|
1593
1610
|
*
|
|
@@ -1681,6 +1698,7 @@ class MetadataType {
|
|
|
1681
1698
|
// this metadata type has no filters defined or no match was found
|
|
1682
1699
|
return false;
|
|
1683
1700
|
}
|
|
1701
|
+
|
|
1684
1702
|
/**
|
|
1685
1703
|
* optionally filter by what folder something is in
|
|
1686
1704
|
*
|
|
@@ -1750,6 +1768,7 @@ class MetadataType {
|
|
|
1750
1768
|
// this metadata type has no filters defined or no match was found
|
|
1751
1769
|
return false;
|
|
1752
1770
|
}
|
|
1771
|
+
|
|
1753
1772
|
/**
|
|
1754
1773
|
* internal helper
|
|
1755
1774
|
*
|
|
@@ -1780,6 +1799,7 @@ class MetadataType {
|
|
|
1780
1799
|
// no filters matched
|
|
1781
1800
|
return false;
|
|
1782
1801
|
}
|
|
1802
|
+
|
|
1783
1803
|
/**
|
|
1784
1804
|
* internal helper
|
|
1785
1805
|
*
|
|
@@ -1993,6 +2013,7 @@ class MetadataType {
|
|
|
1993
2013
|
|
|
1994
2014
|
return saveClone;
|
|
1995
2015
|
}
|
|
2016
|
+
|
|
1996
2017
|
/**
|
|
1997
2018
|
* helper for {@link MetadataType.buildDefinitionForNested}
|
|
1998
2019
|
* searches extracted file for template variable names and applies the market values
|
|
@@ -2005,6 +2026,7 @@ class MetadataType {
|
|
|
2005
2026
|
// replace template variables with their values
|
|
2006
2027
|
return Mustache.render(code, templateVariables, {}, ['{{{', '}}}']);
|
|
2007
2028
|
}
|
|
2029
|
+
|
|
2008
2030
|
/**
|
|
2009
2031
|
* helper for {@link MetadataType.buildTemplateForNested}
|
|
2010
2032
|
* searches extracted file for template variable values and applies the market variable names
|
|
@@ -2017,6 +2039,7 @@ class MetadataType {
|
|
|
2017
2039
|
// replace template variables with their values
|
|
2018
2040
|
return Util.replaceByObject(code, templateVariables);
|
|
2019
2041
|
}
|
|
2042
|
+
|
|
2020
2043
|
/**
|
|
2021
2044
|
* helper for {@link MetadataType.buildDefinition}
|
|
2022
2045
|
* handles extracted code if any are found for complex types (e.g script, asset, query)
|
|
@@ -2038,6 +2061,7 @@ class MetadataType {
|
|
|
2038
2061
|
// generic version here does nothing. actual cases handled in type classes
|
|
2039
2062
|
return null;
|
|
2040
2063
|
}
|
|
2064
|
+
|
|
2041
2065
|
/**
|
|
2042
2066
|
* helper for {@link MetadataType.buildTemplate}
|
|
2043
2067
|
* handles extracted code if any are found for complex types
|
|
@@ -2059,6 +2083,7 @@ class MetadataType {
|
|
|
2059
2083
|
// generic version here does nothing. actual cases handled in type classes
|
|
2060
2084
|
return null;
|
|
2061
2085
|
}
|
|
2086
|
+
|
|
2062
2087
|
/**
|
|
2063
2088
|
* check template directory for complex types that open subfolders for their subtypes
|
|
2064
2089
|
*
|
|
@@ -2069,6 +2094,7 @@ class MetadataType {
|
|
|
2069
2094
|
static async findSubType(templateDir, templateName) {
|
|
2070
2095
|
return null;
|
|
2071
2096
|
}
|
|
2097
|
+
|
|
2072
2098
|
/**
|
|
2073
2099
|
* optional method used for some types to try a different folder structure
|
|
2074
2100
|
*
|
|
@@ -2083,6 +2109,7 @@ class MetadataType {
|
|
|
2083
2109
|
// we just want to push the method into the catch here
|
|
2084
2110
|
return;
|
|
2085
2111
|
}
|
|
2112
|
+
|
|
2086
2113
|
/**
|
|
2087
2114
|
* Builds definition based on template
|
|
2088
2115
|
* NOTE: Most metadata files should use this generic method, unless custom
|
|
@@ -2196,6 +2223,7 @@ class MetadataType {
|
|
|
2196
2223
|
throw new Error(`${this.definition.type}:: ${ex.message}`);
|
|
2197
2224
|
}
|
|
2198
2225
|
}
|
|
2226
|
+
|
|
2199
2227
|
/**
|
|
2200
2228
|
* Standardizes a check for multiple messages
|
|
2201
2229
|
*
|
|
@@ -2270,6 +2298,7 @@ class MetadataType {
|
|
|
2270
2298
|
Util.logger.error(`Deletion is not yet supported for ${this.definition.typeName}!`);
|
|
2271
2299
|
return false;
|
|
2272
2300
|
}
|
|
2301
|
+
|
|
2273
2302
|
/**
|
|
2274
2303
|
* clean up after deleting a metadata item
|
|
2275
2304
|
*
|
|
@@ -2327,6 +2356,7 @@ class MetadataType {
|
|
|
2327
2356
|
return false;
|
|
2328
2357
|
}
|
|
2329
2358
|
}
|
|
2359
|
+
|
|
2330
2360
|
/**
|
|
2331
2361
|
* Delete a data extension from the specified business unit
|
|
2332
2362
|
*
|
|
@@ -2354,6 +2384,7 @@ class MetadataType {
|
|
|
2354
2384
|
return false;
|
|
2355
2385
|
}
|
|
2356
2386
|
}
|
|
2387
|
+
|
|
2357
2388
|
/**
|
|
2358
2389
|
* Returns metadata of a business unit that is saved locally
|
|
2359
2390
|
*
|
|
@@ -2377,6 +2408,7 @@ class MetadataType {
|
|
|
2377
2408
|
throw new Error(ex.message);
|
|
2378
2409
|
}
|
|
2379
2410
|
}
|
|
2411
|
+
|
|
2380
2412
|
/**
|
|
2381
2413
|
* should return only the json for all but asset, query and script that are saved as multiple files
|
|
2382
2414
|
* additionally, the documentation for dataExtension and automation should be returned
|
|
@@ -2396,6 +2428,7 @@ class MetadataType {
|
|
|
2396
2428
|
const fileList = keyArr.map((key) => File.normalizePath([path, key + typeExtension]));
|
|
2397
2429
|
return fileList;
|
|
2398
2430
|
}
|
|
2431
|
+
|
|
2399
2432
|
/**
|
|
2400
2433
|
*
|
|
2401
2434
|
* @param {string[]} keyArr customerkey of the metadata
|
|
@@ -2632,6 +2665,7 @@ class MetadataType {
|
|
|
2632
2665
|
}
|
|
2633
2666
|
return keysForDeploy;
|
|
2634
2667
|
}
|
|
2668
|
+
|
|
2635
2669
|
/**
|
|
2636
2670
|
* helper for getKeysForFixing and createOrUpdate
|
|
2637
2671
|
*
|
|
@@ -252,6 +252,7 @@ class MobileKeyword extends MetadataType {
|
|
|
252
252
|
static create(metadata) {
|
|
253
253
|
return super.createREST(metadata, '/legacy/v1/beta/mobile/keyword/');
|
|
254
254
|
}
|
|
255
|
+
|
|
255
256
|
/**
|
|
256
257
|
* Updates a single item
|
|
257
258
|
*
|
|
@@ -307,6 +308,7 @@ class MobileKeyword extends MetadataType {
|
|
|
307
308
|
return metadata;
|
|
308
309
|
}
|
|
309
310
|
}
|
|
311
|
+
|
|
310
312
|
/**
|
|
311
313
|
* helper for {@link MobileKeyword.postRetrieveTasks} and {@link MobileKeyword._buildForNested}
|
|
312
314
|
*
|
|
@@ -319,6 +321,7 @@ class MobileKeyword extends MetadataType {
|
|
|
319
321
|
|
|
320
322
|
return { fileExt, code };
|
|
321
323
|
}
|
|
324
|
+
|
|
322
325
|
/**
|
|
323
326
|
* helper for {@link MetadataType.buildDefinition}
|
|
324
327
|
* handles extracted code if any are found for complex types
|
|
@@ -346,6 +349,7 @@ class MobileKeyword extends MetadataType {
|
|
|
346
349
|
'definition'
|
|
347
350
|
);
|
|
348
351
|
}
|
|
352
|
+
|
|
349
353
|
/**
|
|
350
354
|
* helper for {@link MetadataType.buildTemplate}
|
|
351
355
|
* handles extracted code if any are found for complex types
|
|
@@ -471,6 +475,7 @@ class MobileKeyword extends MetadataType {
|
|
|
471
475
|
this.#setCodeAndKeyword(metadata);
|
|
472
476
|
return metadata;
|
|
473
477
|
}
|
|
478
|
+
|
|
474
479
|
/**
|
|
475
480
|
* helper for {@link MetadataType.createREST}
|
|
476
481
|
*
|
|
@@ -481,6 +486,7 @@ class MobileKeyword extends MetadataType {
|
|
|
481
486
|
static async postCreateTasks(metadataEntry, apiResponse) {
|
|
482
487
|
await super.postDeployTasks_legacyApi(metadataEntry, apiResponse);
|
|
483
488
|
}
|
|
489
|
+
|
|
484
490
|
/**
|
|
485
491
|
* helper for {@link MetadataType.updateREST}
|
|
486
492
|
*
|
|
@@ -520,6 +526,7 @@ class MobileKeyword extends MetadataType {
|
|
|
520
526
|
return null;
|
|
521
527
|
}
|
|
522
528
|
}
|
|
529
|
+
|
|
523
530
|
/**
|
|
524
531
|
* Delete a metadata item from the specified business unit
|
|
525
532
|
*
|
|
@@ -552,6 +559,7 @@ class MobileKeyword extends MetadataType {
|
|
|
552
559
|
// delete local copy: retrieve/cred/bu/type/...-meta.amp
|
|
553
560
|
super.postDeleteTasks(customerKey, [`${this.definition.type}-meta.amp`]);
|
|
554
561
|
}
|
|
562
|
+
|
|
555
563
|
/**
|
|
556
564
|
* should return only the json for all but asset, query and script that are saved as multiple files
|
|
557
565
|
* additionally, the documentation for dataExtension and automation should be returned
|
|
@@ -95,6 +95,7 @@ class MobileMessage extends MetadataType {
|
|
|
95
95
|
static create(metadata) {
|
|
96
96
|
return super.createREST(metadata, '/legacy/v1/beta/mobile/message/');
|
|
97
97
|
}
|
|
98
|
+
|
|
98
99
|
/**
|
|
99
100
|
* helper for {@link MobileMessage.preDeployTasks} that loads extracted code content back into JSON
|
|
100
101
|
*
|
|
@@ -122,6 +123,7 @@ class MobileMessage extends MetadataType {
|
|
|
122
123
|
throw new Error(`Could not find ${codePath}.${fileExtension}`);
|
|
123
124
|
}
|
|
124
125
|
}
|
|
126
|
+
|
|
125
127
|
/**
|
|
126
128
|
* helper for {@link MobileMessage.postRetrieveTasks} and {@link MobileMessage._buildForNested}
|
|
127
129
|
*
|
|
@@ -330,6 +332,7 @@ class MobileMessage extends MetadataType {
|
|
|
330
332
|
|
|
331
333
|
return metadata;
|
|
332
334
|
}
|
|
335
|
+
|
|
333
336
|
/**
|
|
334
337
|
* helper for {@link MetadataType.createREST}
|
|
335
338
|
*
|
|
@@ -340,6 +343,7 @@ class MobileMessage extends MetadataType {
|
|
|
340
343
|
static async postCreateTasks(metadataEntry, apiResponse) {
|
|
341
344
|
await super.postDeployTasks_legacyApi(metadataEntry, apiResponse);
|
|
342
345
|
}
|
|
346
|
+
|
|
343
347
|
/**
|
|
344
348
|
* helper for {@link MetadataType.updateREST}
|
|
345
349
|
*
|
|
@@ -350,6 +354,7 @@ class MobileMessage extends MetadataType {
|
|
|
350
354
|
static async postUpdateTasks(metadataEntry, apiResponse) {
|
|
351
355
|
await super.postDeployTasks_legacyApi(metadataEntry, apiResponse);
|
|
352
356
|
}
|
|
357
|
+
|
|
353
358
|
/**
|
|
354
359
|
* helper for {@link MetadataType.buildDefinition}
|
|
355
360
|
* handles extracted code if any are found for complex types
|
|
@@ -377,6 +382,7 @@ class MobileMessage extends MetadataType {
|
|
|
377
382
|
'definition'
|
|
378
383
|
);
|
|
379
384
|
}
|
|
385
|
+
|
|
380
386
|
/**
|
|
381
387
|
* helper for {@link MetadataType.buildTemplate}
|
|
382
388
|
* handles extracted code if any are found for complex types
|
|
@@ -471,6 +477,7 @@ class MobileMessage extends MetadataType {
|
|
|
471
477
|
}
|
|
472
478
|
return nestedFilePaths;
|
|
473
479
|
}
|
|
480
|
+
|
|
474
481
|
/**
|
|
475
482
|
* Delete a metadata item from the specified business unit
|
|
476
483
|
* ! the endpoint expects the ID and not a key but for mcdev in this case key==id
|
|
@@ -59,6 +59,7 @@ class Query extends MetadataType {
|
|
|
59
59
|
key
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
|
+
|
|
62
63
|
/**
|
|
63
64
|
* a function to start query execution via API
|
|
64
65
|
*
|
|
@@ -87,6 +88,7 @@ class Query extends MetadataType {
|
|
|
87
88
|
Util.logger.info(`Executed ${executedKeyArr.length} of ${keyArr.length} items`);
|
|
88
89
|
return executedKeyArr;
|
|
89
90
|
}
|
|
91
|
+
|
|
90
92
|
/**
|
|
91
93
|
* helper to allow us to select single metadata entries via REST
|
|
92
94
|
*
|
|
@@ -261,6 +263,7 @@ class Query extends MetadataType {
|
|
|
261
263
|
this.definition.targetUpdateTypeMapping[metadata.targetUpdateTypeName];
|
|
262
264
|
return metadata;
|
|
263
265
|
}
|
|
266
|
+
|
|
264
267
|
/**
|
|
265
268
|
* helper for {@link Query.buildDefinitionForNested}
|
|
266
269
|
* searches extracted SQL file for template variables and applies the market values
|
|
@@ -284,6 +287,7 @@ class Query extends MetadataType {
|
|
|
284
287
|
// replace template variables with their values
|
|
285
288
|
return super.applyTemplateValues(code, templateVariables);
|
|
286
289
|
}
|
|
290
|
+
|
|
287
291
|
/**
|
|
288
292
|
* helper for {@link MetadataType.buildDefinition}
|
|
289
293
|
* handles extracted code if any are found for complex types
|
|
@@ -311,6 +315,7 @@ class Query extends MetadataType {
|
|
|
311
315
|
'definition'
|
|
312
316
|
);
|
|
313
317
|
}
|
|
318
|
+
|
|
314
319
|
/**
|
|
315
320
|
* helper for {@link MetadataType.buildTemplate}
|
|
316
321
|
* handles extracted code if any are found for complex types
|
|
@@ -339,6 +344,7 @@ class Query extends MetadataType {
|
|
|
339
344
|
'template'
|
|
340
345
|
);
|
|
341
346
|
}
|
|
347
|
+
|
|
342
348
|
/**
|
|
343
349
|
* helper for {@link Query.buildTemplateForNested} / {@link Query.buildDefinitionForNested}
|
|
344
350
|
* handles extracted code if any are found for complex types
|
|
@@ -439,6 +445,7 @@ class Query extends MetadataType {
|
|
|
439
445
|
}
|
|
440
446
|
return errors;
|
|
441
447
|
}
|
|
448
|
+
|
|
442
449
|
/**
|
|
443
450
|
* Delete a metadata item from the specified business unit
|
|
444
451
|
*
|
|
@@ -454,6 +461,7 @@ class Query extends MetadataType {
|
|
|
454
461
|
}
|
|
455
462
|
return super.deleteByKeyREST('/automation/v1/queries/' + objectId, customerKey);
|
|
456
463
|
}
|
|
464
|
+
|
|
457
465
|
/**
|
|
458
466
|
* clean up after deleting a metadata item
|
|
459
467
|
*
|
|
@@ -465,6 +473,7 @@ class Query extends MetadataType {
|
|
|
465
473
|
// delete local copy: retrieve/cred/bu/.../...-meta.sql
|
|
466
474
|
await super.postDeleteTasks(customerKey, [`${this.definition.type}-meta.sql`]);
|
|
467
475
|
}
|
|
476
|
+
|
|
468
477
|
/**
|
|
469
478
|
* Gets executed after deployment of metadata type
|
|
470
479
|
*
|
|
@@ -44,6 +44,7 @@ class Script extends MetadataType {
|
|
|
44
44
|
await File.initPrettier('ssjs');
|
|
45
45
|
return super.retrieveREST(retrieveDir, '/automation/v1/scripts/', null, key);
|
|
46
46
|
}
|
|
47
|
+
|
|
47
48
|
/**
|
|
48
49
|
* Retrieves script metadata for caching
|
|
49
50
|
*
|
|
@@ -125,6 +126,7 @@ class Script extends MetadataType {
|
|
|
125
126
|
}
|
|
126
127
|
return code;
|
|
127
128
|
}
|
|
129
|
+
|
|
128
130
|
/**
|
|
129
131
|
* prepares a Script for deployment
|
|
130
132
|
*
|
|
@@ -141,6 +143,7 @@ class Script extends MetadataType {
|
|
|
141
143
|
|
|
142
144
|
return metadata;
|
|
143
145
|
}
|
|
146
|
+
|
|
144
147
|
/**
|
|
145
148
|
* helper for {@link MetadataType.buildDefinition}
|
|
146
149
|
* handles extracted code if any are found for complex types
|
|
@@ -168,6 +171,7 @@ class Script extends MetadataType {
|
|
|
168
171
|
'definition'
|
|
169
172
|
);
|
|
170
173
|
}
|
|
174
|
+
|
|
171
175
|
/**
|
|
172
176
|
* helper for {@link MetadataType.buildTemplate}
|
|
173
177
|
* handles extracted code if any are found for complex types
|
|
@@ -275,6 +279,7 @@ class Script extends MetadataType {
|
|
|
275
279
|
|
|
276
280
|
return this.getCodeExtractItem(metadata);
|
|
277
281
|
}
|
|
282
|
+
|
|
278
283
|
/**
|
|
279
284
|
* manages post retrieve steps
|
|
280
285
|
*
|
|
@@ -343,6 +348,7 @@ class Script extends MetadataType {
|
|
|
343
348
|
]);
|
|
344
349
|
return fileList;
|
|
345
350
|
}
|
|
351
|
+
|
|
346
352
|
/**
|
|
347
353
|
* helper to allow us to select single metadata entries via REST
|
|
348
354
|
*
|
|
@@ -378,6 +384,7 @@ class Script extends MetadataType {
|
|
|
378
384
|
}
|
|
379
385
|
return super.deleteByKeyREST('/automation/v1/scripts/' + objectId, customerKey);
|
|
380
386
|
}
|
|
387
|
+
|
|
381
388
|
/**
|
|
382
389
|
* clean up after deleting a metadata item
|
|
383
390
|
*
|
|
@@ -46,6 +46,7 @@ class SendClassification extends MetadataType {
|
|
|
46
46
|
}
|
|
47
47
|
return super.retrieveSOAP(retrieveDir, requestParams, key);
|
|
48
48
|
}
|
|
49
|
+
|
|
49
50
|
/**
|
|
50
51
|
* Updates a single item
|
|
51
52
|
*
|
|
@@ -75,6 +76,7 @@ class SendClassification extends MetadataType {
|
|
|
75
76
|
static deleteByKey(customerKey) {
|
|
76
77
|
return super.deleteByKeySOAP(customerKey);
|
|
77
78
|
}
|
|
79
|
+
|
|
78
80
|
/**
|
|
79
81
|
* prepares a import definition for deployment
|
|
80
82
|
*
|
|
@@ -46,6 +46,7 @@ class SenderProfile extends MetadataType {
|
|
|
46
46
|
}
|
|
47
47
|
return super.retrieveSOAP(retrieveDir, requestParams, key);
|
|
48
48
|
}
|
|
49
|
+
|
|
49
50
|
/**
|
|
50
51
|
* Updates a single item
|
|
51
52
|
*
|
|
@@ -106,6 +107,7 @@ class SenderProfile extends MetadataType {
|
|
|
106
107
|
}
|
|
107
108
|
return metadata;
|
|
108
109
|
}
|
|
110
|
+
|
|
109
111
|
/**
|
|
110
112
|
*
|
|
111
113
|
* @param {MetadataTypeItem} item single metadata item
|
|
@@ -47,6 +47,24 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
47
47
|
return super.update(metadata);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Updates a single item
|
|
52
|
+
*
|
|
53
|
+
* @param {MetadataTypeItem} metadata how the item shall look after the update
|
|
54
|
+
* @returns {Promise} Promise
|
|
55
|
+
*/
|
|
56
|
+
static create(metadata) {
|
|
57
|
+
if (metadata.definitionType === 'Transactional' && metadata.channel === 'email') {
|
|
58
|
+
// only send this during create or else we might end up with an unexpected outcome
|
|
59
|
+
Util.logger.warn(
|
|
60
|
+
` - ${this.definition.type} ${metadata[this.definition.nameField]} (${
|
|
61
|
+
metadata[this.definition.keyField]
|
|
62
|
+
}): While possible, it is not recommended to create transactional journeys via transactionalEmail. Instead, create the journey and then publish it (mcdev deploy cred/bu journey --publish)`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return super.create(metadata);
|
|
66
|
+
}
|
|
67
|
+
|
|
50
68
|
/**
|
|
51
69
|
* prepares for deployment
|
|
52
70
|
*
|
|
@@ -93,6 +111,7 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
93
111
|
|
|
94
112
|
return metadata;
|
|
95
113
|
}
|
|
114
|
+
|
|
96
115
|
/**
|
|
97
116
|
* helper for {@link TransactionalEmail.createREST}
|
|
98
117
|
*
|
|
@@ -114,6 +133,7 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
114
133
|
delete apiResponse.journey;
|
|
115
134
|
}
|
|
116
135
|
}
|
|
136
|
+
|
|
117
137
|
/**
|
|
118
138
|
* Gets executed after deployment of metadata type
|
|
119
139
|
*
|
|
@@ -122,9 +142,8 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
122
142
|
static async postDeployTasks() {
|
|
123
143
|
if (this._createdJourneyKeys?.length) {
|
|
124
144
|
Util.logger.warn(
|
|
125
|
-
`Please download related journeys via: mcdev
|
|
126
|
-
|
|
127
|
-
} journey "${this._createdJourneyKeys.join(',')}"`
|
|
145
|
+
`Please download related journeys via: mcdev retrieve ${this.buObject.credential}/${this.buObject.businessUnit} -m
|
|
146
|
+
${this._createdJourneyKeys.map((el) => `"journey:${el}"`).join(' ')}`
|
|
128
147
|
);
|
|
129
148
|
}
|
|
130
149
|
delete this._createdJourneyKeys;
|
|
@@ -218,6 +237,7 @@ class TransactionalEmail extends TransactionalMessage {
|
|
|
218
237
|
|
|
219
238
|
return metadata;
|
|
220
239
|
}
|
|
240
|
+
|
|
221
241
|
/**
|
|
222
242
|
* Delete a metadata item from the specified business unit
|
|
223
243
|
*
|
|
@@ -24,6 +24,7 @@ import { Util } from '../util/util.js';
|
|
|
24
24
|
class TransactionalMessage extends MetadataType {
|
|
25
25
|
// define this.subType as string here for intellisense; requires to be redefined in child class
|
|
26
26
|
static subType;
|
|
27
|
+
|
|
27
28
|
/**
|
|
28
29
|
* Retrieves Metadata
|
|
29
30
|
*
|
|
@@ -90,6 +91,7 @@ class TransactionalMessage extends MetadataType {
|
|
|
90
91
|
// we should therefore use the already defined retrieve method
|
|
91
92
|
return this.retrieve(undefined, undefined, undefined, key);
|
|
92
93
|
}
|
|
94
|
+
|
|
93
95
|
/**
|
|
94
96
|
* Updates a single item
|
|
95
97
|
*
|
|
@@ -112,6 +114,7 @@ class TransactionalMessage extends MetadataType {
|
|
|
112
114
|
static create(metadata) {
|
|
113
115
|
return super.createREST(metadata, '/messaging/v1/' + this.subType + '/definitions');
|
|
114
116
|
}
|
|
117
|
+
|
|
115
118
|
/**
|
|
116
119
|
* Delete a metadata item from the specified business unit
|
|
117
120
|
*
|
|
@@ -25,6 +25,7 @@ import cache from '../util/cache.js';
|
|
|
25
25
|
*/
|
|
26
26
|
class TransactionalSMS extends TransactionalMessage {
|
|
27
27
|
static subType = 'sms';
|
|
28
|
+
|
|
28
29
|
/**
|
|
29
30
|
* clean up after deleting a metadata item
|
|
30
31
|
*
|
|
@@ -88,6 +89,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
88
89
|
|
|
89
90
|
return metadata;
|
|
90
91
|
}
|
|
92
|
+
|
|
91
93
|
/**
|
|
92
94
|
* helper for {@link TransactionalSMS.preDeployTasks} that loads extracted code content back into JSON
|
|
93
95
|
*
|
|
@@ -114,6 +116,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
114
116
|
throw new Error(`Could not find ${codePath}.amp`);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
119
|
+
|
|
117
120
|
/**
|
|
118
121
|
* manages post retrieve steps
|
|
119
122
|
*
|
|
@@ -188,6 +191,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
188
191
|
|
|
189
192
|
return { json: metadata, codeArr: codeArr, subFolder: null };
|
|
190
193
|
}
|
|
194
|
+
|
|
191
195
|
/**
|
|
192
196
|
* helper for {@link TransactionalSMS.postRetrieveTasks} and {@link TransactionalSMS._buildForNested}
|
|
193
197
|
*
|
|
@@ -200,6 +204,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
200
204
|
|
|
201
205
|
return { fileExt, code };
|
|
202
206
|
}
|
|
207
|
+
|
|
203
208
|
/**
|
|
204
209
|
* helper for {@link TransactionalMessage.buildDefinition}
|
|
205
210
|
* handles extracted code if any are found for complex types
|
|
@@ -227,6 +232,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
227
232
|
'definition'
|
|
228
233
|
);
|
|
229
234
|
}
|
|
235
|
+
|
|
230
236
|
/**
|
|
231
237
|
* helper for {@link TransactionalMessage.buildTemplate}
|
|
232
238
|
* handles extracted code if any are found for complex types
|
|
@@ -320,6 +326,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
320
326
|
}
|
|
321
327
|
return nestedFilePaths;
|
|
322
328
|
}
|
|
329
|
+
|
|
323
330
|
/**
|
|
324
331
|
* very simplified test for HTML code in our SMS
|
|
325
332
|
*
|
|
@@ -329,6 +336,7 @@ class TransactionalSMS extends TransactionalMessage {
|
|
|
329
336
|
static _isHTML(code) {
|
|
330
337
|
return /(<([^>]+)>)/gi.test(code);
|
|
331
338
|
}
|
|
339
|
+
|
|
332
340
|
/**
|
|
333
341
|
* should return only the json for all but asset, query and script that are saved as multiple files
|
|
334
342
|
* additionally, the documentation for dataExtension and automation should be returned
|