mcdev 7.0.4 → 7.1.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/.github/ISSUE_TEMPLATE/bug.yml +1 -0
- package/.husky/post-checkout +1 -1
- package/.husky/post-merge +7 -1
- package/.husky/pre-commit +2 -0
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts +3 -0
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/index.d.ts +70 -19
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +53 -16
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts +3 -0
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeSet.d.ts +5 -0
- package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +11 -0
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Campaign.d.ts +1 -0
- package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ContentArea.d.ts +1 -0
- package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +5 -2
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +3 -4
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtractType.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts +1 -0
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Discovery.d.ts +1 -0
- package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts +1 -0
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/EmailSend.d.ts +8 -0
- package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +3 -0
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileLocation.d.ts +1 -0
- package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +1 -0
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Filter.d.ts +1 -0
- package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +39 -25
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +5 -0
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +42 -3
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts +1 -0
- package/@types/lib/metadataTypes/List.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +50 -3
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileCode.d.ts +1 -0
- package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +9 -0
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +4 -0
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts +3 -0
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Role.d.ts +1 -0
- package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +3 -1
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts +3 -0
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +1 -6
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts +6 -0
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts +1 -0
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalPush.d.ts +3 -0
- package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts +4 -0
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts +6 -6
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts +1 -0
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts +3 -0
- package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +24 -14
- package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +5 -0
- package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +16 -0
- package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +8 -0
- package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +5 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +13 -0
- package/@types/lib/metadataTypes/definitions/List.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +9 -0
- package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +4 -0
- package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +4 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/User.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +3 -0
- package/@types/lib/util/cache.d.ts +10 -0
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts +3 -6
- 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/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/replaceContentBlockReference.d.ts +27 -4
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +32 -3
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +87 -0
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/boilerplate/files/.vscode/settings.json +1 -0
- package/boilerplate/forcedUpdates.json +4 -0
- package/boilerplate/gitignore-template +0 -1
- package/lib/Builder.js +13 -8
- package/lib/Deployer.js +12 -7
- package/lib/cli.js +179 -14
- package/lib/index.js +538 -205
- package/lib/metadataTypes/Asset.js +455 -210
- package/lib/metadataTypes/Automation.js +34 -0
- package/lib/metadataTypes/DataExtension.js +33 -28
- package/lib/metadataTypes/DataExtensionField.js +2 -2
- package/lib/metadataTypes/Event.js +28 -2
- package/lib/metadataTypes/Folder.js +63 -48
- package/lib/metadataTypes/Journey.js +330 -56
- package/lib/metadataTypes/MetadataType.js +269 -57
- package/lib/metadataTypes/MobileKeyword.js +12 -1
- package/lib/metadataTypes/Script.js +4 -3
- package/lib/metadataTypes/SenderProfile.js +17 -5
- package/lib/metadataTypes/TriggeredSend.js +20 -5
- package/lib/metadataTypes/definitions/Asset.definition.js +10 -2
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
- package/lib/metadataTypes/definitions/AttributeSet.definition.js +11 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +9 -0
- package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
- package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +2 -1
- package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
- package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +1 -0
- package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
- package/lib/metadataTypes/definitions/Email.definition.js +1 -0
- package/lib/metadataTypes/definitions/EmailSend.definition.js +8 -0
- package/lib/metadataTypes/definitions/Event.definition.js +1 -0
- package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -0
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +10 -8
- package/lib/metadataTypes/definitions/ImportFile.definition.js +8 -1
- package/lib/metadataTypes/definitions/Journey.definition.js +28 -0
- package/lib/metadataTypes/definitions/List.definition.js +1 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -0
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +7 -0
- package/lib/metadataTypes/definitions/MobileMessage.definition.js +9 -0
- package/lib/metadataTypes/definitions/Query.definition.js +3 -0
- package/lib/metadataTypes/definitions/Role.definition.js +1 -0
- package/lib/metadataTypes/definitions/Script.definition.js +1 -0
- package/lib/metadataTypes/definitions/SendClassification.definition.js +4 -0
- package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +7 -0
- package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +3 -0
- package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +4 -0
- package/lib/metadataTypes/definitions/TriggeredSend.definition.js +10 -3
- package/lib/metadataTypes/definitions/User.definition.js +3 -0
- package/lib/metadataTypes/definitions/Verification.definition.js +1 -0
- package/lib/util/cache.js +35 -0
- package/lib/util/cli.js +96 -139
- package/lib/util/config.js +11 -19
- package/lib/util/devops.js +41 -41
- package/lib/util/init.config.js +6 -10
- package/lib/util/init.git.js +43 -57
- package/lib/util/init.js +35 -59
- package/lib/util/replaceContentBlockReference.js +107 -60
- package/lib/util/util.js +90 -4
- package/package.json +14 -13
- package/test/general.test.js +1117 -163
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +1 -0
- package/test/resourceFactory.js +43 -11
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +364 -0
- package/test/resources/9999999/asset/{block-1157-retrieve-expected.html → build-asset_htmlblock-expected.html} +1 -1
- package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +29 -0
- package/test/resources/9999999/asset/build-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +3 -3
- package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +3 -3
- package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/template-emailTemplate-expected.json +20 -0
- package/test/resources/9999999/asset/template-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +29 -0
- package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +23 -0
- package/test/resources/9999999/asset/{block-1157-retrieve-expected.json → testExisting_asset_htmlblock-retrieve-expected.json} +3 -3
- package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +6 -6
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +1 -1
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -4
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +1 -1
- package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -4
- package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +4 -4
- package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +60 -0
- package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +60 -0
- package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +75 -0
- package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +3 -3
- package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +97 -0
- package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +1 -1
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN195,196,197,198,199,200,201,202,203,210,211,212,213,3.json +78 -2
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,207,208,209,5,214,4,215,216.json +370 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,215,216,217,218,219,220,221,222.json +243 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,207,208,209,5.json +229 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +98 -1
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN217,218,219,220,221,222,223,224,225,226,227,228.json +7 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,214,4.json +35 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228.json +7 -0
- package/test/resources/9999999/asset/v1/content/assets/query/{post-response-customerKey=mcdev-issue-1157.json → post-response-customerKey=testExisting_asset_htmlblock.json} +2 -2
- package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +24 -0
- package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +17 -0
- package/test/resources/9999999/automation/v1/scripts/get-response.json +2 -2
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +48 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml +519 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,dataexten,salesforc,shared_da,shared_da,shared_sa,synchroni,automatio,useriniti,journey,mysubs,list,publicati,queryacti,ssjsactiv,triggered,triggered-response.xml +519 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,journey-response.xml +92 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +115 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml +92 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +431 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +70 -0
- package/test/resources/9999999/dataFolder/{retrieve-response.xml → retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +32 -119
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +117 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +46 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +251 -0
- package/test/resources/9999999/dataFolder/retrieve-response-.xml +519 -0
- package/test/resources/9999999/event/build-expected.json +0 -1
- package/test/resources/9999999/event/get-expected.json +0 -1
- package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +3 -0
- package/test/resources/9999999/event/post_withExistingDE-expected.json +2 -0
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +3 -0
- package/test/resources/9999999/event/post_withSchema-expected.json +2 -0
- package/test/resources/9999999/event/put-callout-expected.json +3 -1
- package/test/resources/9999999/event/put-expected.json +2 -2
- package/test/resources/9999999/event/template-expected.json +0 -1
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +2 -1
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +2 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +2 -0
- package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +4 -4
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +4 -4
- package/test/resources/9999999/interaction/v1/interactions/publishAsync/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/post-response.json +4 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +34 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +5 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +36 -0
- package/test/resources/9999999/journey/build-expected.json +5 -5
- package/test/resources/9999999/journey/get-multistep-expected.json +1 -1
- package/test/resources/9999999/journey/get-quicksend-expected.json +5 -5
- package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +1 -1
- package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +7 -7
- package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +1 -1
- package/test/resources/9999999/journey/post-expected.json +1 -1
- package/test/resources/9999999/journey/publish-callout-expected.json +1 -0
- package/test/resources/9999999/journey/put-expected.json +1 -1
- package/test/resources/9999999/journey/template-expected.json +5 -5
- package/test/resources/9999999/mobileKeyword/build-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/get-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/post-create-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/template-expected.json +1 -0
- package/test/resources/{1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → 9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml} +10 -11
- package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +2 -2
- package/test/resources/9999999/script/get_ampscript-expected.html +1 -0
- package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +1 -0
- package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +3 -2
- package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +3 -0
- package/test/resources/9999999/script/get_mixed-expected.html +2 -2
- package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +2 -2
- package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +4 -4
- package/test/resources/9999999/senderProfile/retrieve-response.xml +1 -1
- package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +4 -4
- package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +1 -1
- package/test/type.asset.test.js +189 -39
- package/test/type.automation.test.js +134 -58
- package/test/type.dataExtract.test.js +4 -4
- package/test/type.emailSend.test.js +3 -3
- package/test/type.event.test.js +0 -2
- package/test/type.journey.test.js +322 -9
- package/test/type.query.test.js +33 -29
- package/test/type.script.test.js +61 -11
- package/test/type.senderProfile.test.js +36 -3
- package/test/type.transactionalEmail.test.js +3 -3
- package/test/type.triggeredSend.test.js +75 -6
- package/test/utils.js +13 -3
- package/types/mcdev.d.js +27 -1
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/businessUnit/{retrieve-ID=1111111-response.xml → retrieve-ID=1111111-QAA-response.xml} +0 -0
- /package/test/resources/1111111/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
- /package/test/resources/1111111/dataFolder/{retrieve-response.xml → retrieve-response-.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=asset-sharedORContentType=asset-response.xml → retrieve-ContentTypeINasset,asset-shared-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml → retrieve-ContentTypeINcontextual_suppression_list,list,mysubs,publication,suppression_list-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml → retrieve-ContentTypeINhidden,triggered_send,triggered_send_journeybuilder-response.xml} +0 -0
|
@@ -86,7 +86,7 @@ class Journey extends MetadataType {
|
|
|
86
86
|
// caching or single retrieve
|
|
87
87
|
return await super.retrieveREST(
|
|
88
88
|
retrieveDir,
|
|
89
|
-
`${uri}${singleKey}?extras=${extras}`,
|
|
89
|
+
`${uri}${singleKey}?extras=${extras}${key && key.includes('/') ? '&versionNumber=' + key.split('/')[1] : ''}`,
|
|
90
90
|
null,
|
|
91
91
|
key
|
|
92
92
|
);
|
|
@@ -106,46 +106,52 @@ class Journey extends MetadataType {
|
|
|
106
106
|
}
|
|
107
107
|
// full details for retrieve
|
|
108
108
|
const extras = extrasDefault;
|
|
109
|
+
let parsed;
|
|
110
|
+
if (retrieveDir) {
|
|
111
|
+
// get extra details for saving this
|
|
112
|
+
const details = results.items
|
|
113
|
+
? await Promise.all(
|
|
114
|
+
results.items.map(async (a) => {
|
|
115
|
+
try {
|
|
116
|
+
return await this.client.rest.get(
|
|
117
|
+
`${uri}key:${a[this.definition.keyField]}?extras=${extras}` +
|
|
118
|
+
`&versionNumber=${a.version}`
|
|
119
|
+
);
|
|
120
|
+
} catch (ex) {
|
|
121
|
+
// if we do get here, we should log the error and continue instead of failing to download all automations
|
|
122
|
+
Util.logger.warn(
|
|
123
|
+
` ☇ skipping ${this.definition.type} ${
|
|
124
|
+
a[this.definition.nameField]
|
|
125
|
+
} (${a[this.definition.keyField]}): ${ex.message} (${
|
|
126
|
+
ex.code
|
|
127
|
+
})${
|
|
128
|
+
ex.endpoint
|
|
129
|
+
? Util.getGrayMsg(
|
|
130
|
+
' - ' +
|
|
131
|
+
ex.endpoint.split(
|
|
132
|
+
'rest.marketingcloudapis.com'
|
|
133
|
+
)[1]
|
|
134
|
+
)
|
|
135
|
+
: ''
|
|
136
|
+
}`
|
|
137
|
+
);
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
)
|
|
142
|
+
: [];
|
|
143
|
+
parsed = this.parseResponseBody({ items: details.filter(Boolean) });
|
|
144
|
+
// * retrieveDir is mandatory in this method as it is not used for caching (there is a seperate method for that)
|
|
145
|
+
const savedMetadata = await this.saveResults(parsed, retrieveDir, null, null);
|
|
146
|
+
Util.logger.info(
|
|
147
|
+
`Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})` +
|
|
148
|
+
Util.getKeysString(key)
|
|
149
|
+
);
|
|
150
|
+
} else {
|
|
151
|
+
// limit to main details for caching
|
|
152
|
+
parsed = this.parseResponseBody(results);
|
|
153
|
+
}
|
|
109
154
|
|
|
110
|
-
const details = results.items
|
|
111
|
-
? await Promise.all(
|
|
112
|
-
results.items.map(async (a) => {
|
|
113
|
-
try {
|
|
114
|
-
return await this.client.rest.get(
|
|
115
|
-
`${uri}key:${a[this.definition.keyField]}?extras=${extras}` +
|
|
116
|
-
`&versionNumber=${a.version}`
|
|
117
|
-
);
|
|
118
|
-
} catch (ex) {
|
|
119
|
-
// if we do get here, we should log the error and continue instead of failing to download all automations
|
|
120
|
-
Util.logger.warn(
|
|
121
|
-
` ☇ skipping ${this.definition.type} ${
|
|
122
|
-
a[this.definition.nameField]
|
|
123
|
-
} (${a[this.definition.keyField]}): ${ex.message} (${
|
|
124
|
-
ex.code
|
|
125
|
-
})${
|
|
126
|
-
ex.endpoint
|
|
127
|
-
? Util.getGrayMsg(
|
|
128
|
-
' - ' +
|
|
129
|
-
ex.endpoint.split(
|
|
130
|
-
'rest.marketingcloudapis.com'
|
|
131
|
-
)[1]
|
|
132
|
-
)
|
|
133
|
-
: ''
|
|
134
|
-
}`
|
|
135
|
-
);
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
})
|
|
139
|
-
)
|
|
140
|
-
: [];
|
|
141
|
-
const parsed = this.parseResponseBody({ items: details.filter(Boolean) });
|
|
142
|
-
|
|
143
|
-
// * retrieveDir is mandatory in this method as it is not used for caching (there is a seperate method for that)
|
|
144
|
-
const savedMetadata = await this.saveResults(parsed, retrieveDir, null, null);
|
|
145
|
-
Util.logger.info(
|
|
146
|
-
`Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})` +
|
|
147
|
-
Util.getKeysString(key)
|
|
148
|
-
);
|
|
149
155
|
return {
|
|
150
156
|
metadata: parsed,
|
|
151
157
|
type: this.definition.type,
|
|
@@ -332,7 +338,7 @@ class Journey extends MetadataType {
|
|
|
332
338
|
// event / definitionType==='Multistep' && channel==='' && triggers[].type === 'EmailAudience'|'APIEvent'
|
|
333
339
|
if (
|
|
334
340
|
metadata.triggers?.length > 0 &&
|
|
335
|
-
metadata.triggers[0].metaData?.
|
|
341
|
+
metadata.triggers[0].metaData?.eventDefinitionId
|
|
336
342
|
) {
|
|
337
343
|
// trigger found; there can only be one entry in this array
|
|
338
344
|
try {
|
|
@@ -346,8 +352,10 @@ class Journey extends MetadataType {
|
|
|
346
352
|
Util.logger.debug(
|
|
347
353
|
`eventDefinitionKey not matching eventDefinitionId. Overwriting '${metadata.triggers[0].metaData.eventDefinitionKey}' with the correct key '${edKey}'.`
|
|
348
354
|
);
|
|
349
|
-
metadata.triggers[0].metaData.eventDefinitionKey = edKey;
|
|
350
355
|
}
|
|
356
|
+
metadata.triggers[0].metaData.r__event_key = edKey;
|
|
357
|
+
|
|
358
|
+
delete metadata.triggers[0].metaData.eventDefinitionKey;
|
|
351
359
|
delete metadata.triggers[0].metaData.eventDefinitionId;
|
|
352
360
|
} catch (ex) {
|
|
353
361
|
Util.logger.warn(
|
|
@@ -486,6 +494,7 @@ class Journey extends MetadataType {
|
|
|
486
494
|
const configurationArguments = activity.configurationArguments;
|
|
487
495
|
if (configurationArguments) {
|
|
488
496
|
try {
|
|
497
|
+
// configurationArguments.triggeredSendKey && configurationArguments.triggeredSendId are only set on a running journey; if a journey is new, they do not exist
|
|
489
498
|
if (configurationArguments.triggeredSendId) {
|
|
490
499
|
// triggeredSendKey is not always set but triggeredSendId is
|
|
491
500
|
const tsKey = cache.searchForField(
|
|
@@ -536,6 +545,38 @@ class Journey extends MetadataType {
|
|
|
536
545
|
if (triggeredSend) {
|
|
537
546
|
// this section is likely only relevant for QuickSends and not for Multi-Step Journeys
|
|
538
547
|
|
|
548
|
+
// triggeredSend key
|
|
549
|
+
if (triggeredSend.id) {
|
|
550
|
+
// triggeredSendKey is not always set but id is
|
|
551
|
+
const tsKey = cache.searchForField(
|
|
552
|
+
'triggeredSend',
|
|
553
|
+
triggeredSend.id,
|
|
554
|
+
'ObjectID',
|
|
555
|
+
'CustomerKey'
|
|
556
|
+
);
|
|
557
|
+
if (triggeredSend.key != tsKey) {
|
|
558
|
+
Util.logger.debug(
|
|
559
|
+
`key not matching id. Overwriting '${triggeredSend.key}' with the correct key '${tsKey}'.`
|
|
560
|
+
);
|
|
561
|
+
triggeredSend.key = tsKey;
|
|
562
|
+
}
|
|
563
|
+
triggeredSend.r__triggeredSend_key = triggeredSend.key;
|
|
564
|
+
delete triggeredSend.key;
|
|
565
|
+
delete triggeredSend.id;
|
|
566
|
+
} else if (triggeredSend.key) {
|
|
567
|
+
// very rare case but it's been seen that no id was saved
|
|
568
|
+
Util.logger.debug(
|
|
569
|
+
`key found on triggeredSend but no id present on journey activity. Checking key directly...`
|
|
570
|
+
);
|
|
571
|
+
triggeredSend.r__triggeredSend_key = cache.searchForField(
|
|
572
|
+
'triggeredSend',
|
|
573
|
+
triggeredSend.key,
|
|
574
|
+
'CustomerKey',
|
|
575
|
+
'CustomerKey'
|
|
576
|
+
);
|
|
577
|
+
delete triggeredSend.key;
|
|
578
|
+
}
|
|
579
|
+
|
|
539
580
|
// List (optional)
|
|
540
581
|
triggeredSend.r__list_PathName = {};
|
|
541
582
|
if (triggeredSend.publicationListId) {
|
|
@@ -838,17 +879,17 @@ class Journey extends MetadataType {
|
|
|
838
879
|
// ~~~ TRIGGERS ~~~~
|
|
839
880
|
|
|
840
881
|
// event / definitionType==='Multistep' && channel==='' && triggers[].type === 'EmailAudience'|'APIEvent'
|
|
841
|
-
if (
|
|
842
|
-
metadata.triggers?.length > 0 &&
|
|
843
|
-
metadata.triggers[0].metaData?.eventDefinitionKey
|
|
844
|
-
) {
|
|
882
|
+
if (metadata.triggers?.length > 0 && metadata.triggers[0].metaData?.r__event_key) {
|
|
845
883
|
// trigger found; there can only be one entry in this array
|
|
846
884
|
metadata.triggers[0].metaData.eventDefinitionId = cache.searchForField(
|
|
847
885
|
'event',
|
|
848
|
-
metadata.triggers[0].metaData.
|
|
886
|
+
metadata.triggers[0].metaData.r__event_key,
|
|
849
887
|
'eventDefinitionKey',
|
|
850
888
|
'id'
|
|
851
889
|
);
|
|
890
|
+
metadata.triggers[0].metaData.eventDefinitionKey =
|
|
891
|
+
metadata.triggers[0].metaData.r__event_key;
|
|
892
|
+
delete metadata.triggers[0].metaData.r__event_key;
|
|
852
893
|
}
|
|
853
894
|
|
|
854
895
|
// transactionalEmail / definitionType==='Transactional' && channel==='email' && triggers[].type === 'transactional-api'
|
|
@@ -949,7 +990,7 @@ class Journey extends MetadataType {
|
|
|
949
990
|
// triggeredSend + email+asset
|
|
950
991
|
// TODO email / asset
|
|
951
992
|
const configurationArguments = activity.configurationArguments;
|
|
952
|
-
if (configurationArguments
|
|
993
|
+
if (configurationArguments?.r__triggeredSend_key) {
|
|
953
994
|
// triggeredSendKey is not always set but triggeredSendId is
|
|
954
995
|
configurationArguments.triggeredSendId = cache.searchForField(
|
|
955
996
|
'triggeredSend',
|
|
@@ -963,6 +1004,19 @@ class Journey extends MetadataType {
|
|
|
963
1004
|
}
|
|
964
1005
|
const triggeredSend = configurationArguments?.triggeredSend;
|
|
965
1006
|
if (triggeredSend) {
|
|
1007
|
+
// triggeredSend key
|
|
1008
|
+
if (triggeredSend.r__triggeredSend_key) {
|
|
1009
|
+
// key is not always set but id is
|
|
1010
|
+
triggeredSend.id = cache.searchForField(
|
|
1011
|
+
'triggeredSend',
|
|
1012
|
+
triggeredSend.r__triggeredSend_key,
|
|
1013
|
+
'CustomerKey',
|
|
1014
|
+
'ObjectID'
|
|
1015
|
+
);
|
|
1016
|
+
triggeredSend.key = triggeredSend.r__triggeredSend_key;
|
|
1017
|
+
delete triggeredSend.r__triggeredSend_key;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
966
1020
|
// List (optional)
|
|
967
1021
|
if (triggeredSend.r__list_PathName) {
|
|
968
1022
|
if (triggeredSend.r__list_PathName.publicationList) {
|
|
@@ -1175,9 +1229,11 @@ class Journey extends MetadataType {
|
|
|
1175
1229
|
/**
|
|
1176
1230
|
*
|
|
1177
1231
|
* @param {MetadataTypeItem} item single metadata item
|
|
1232
|
+
* @param {string} [_] parameter not used
|
|
1233
|
+
* @param {Set.<string>} [findAssetKeys] list of keys that were found referenced via ContentBlockByX; if set, method only gets keys and runs no updates
|
|
1178
1234
|
* @returns {Promise.<MetadataTypeItem>} key of the item that was updated
|
|
1179
1235
|
*/
|
|
1180
|
-
static async replaceCbReference(item) {
|
|
1236
|
+
static async replaceCbReference(item, _, findAssetKeys) {
|
|
1181
1237
|
const parentName = `${this.definition.type} ${item[this.definition.keyField]}`;
|
|
1182
1238
|
let changes = false;
|
|
1183
1239
|
let error;
|
|
@@ -1198,7 +1254,8 @@ class Journey extends MetadataType {
|
|
|
1198
1254
|
try {
|
|
1199
1255
|
activity.arguments.emailSubjectDataBound = ReplaceCbReference.replaceReference(
|
|
1200
1256
|
activity.arguments.emailSubjectDataBound,
|
|
1201
|
-
parentName
|
|
1257
|
+
parentName,
|
|
1258
|
+
findAssetKeys
|
|
1202
1259
|
);
|
|
1203
1260
|
changes = true;
|
|
1204
1261
|
} catch (ex) {
|
|
@@ -1213,7 +1270,8 @@ class Journey extends MetadataType {
|
|
|
1213
1270
|
try {
|
|
1214
1271
|
triggeredSend.bccEmail = ReplaceCbReference.replaceReference(
|
|
1215
1272
|
triggeredSend.bccEmail,
|
|
1216
|
-
parentName
|
|
1273
|
+
parentName,
|
|
1274
|
+
findAssetKeys
|
|
1217
1275
|
);
|
|
1218
1276
|
changes = true;
|
|
1219
1277
|
} catch (ex) {
|
|
@@ -1224,7 +1282,8 @@ class Journey extends MetadataType {
|
|
|
1224
1282
|
try {
|
|
1225
1283
|
triggeredSend.ccEmail = ReplaceCbReference.replaceReference(
|
|
1226
1284
|
triggeredSend.ccEmail,
|
|
1227
|
-
parentName
|
|
1285
|
+
parentName,
|
|
1286
|
+
findAssetKeys
|
|
1228
1287
|
);
|
|
1229
1288
|
changes = true;
|
|
1230
1289
|
} catch (ex) {
|
|
@@ -1235,7 +1294,8 @@ class Journey extends MetadataType {
|
|
|
1235
1294
|
try {
|
|
1236
1295
|
triggeredSend.dynamicEmailSubject = ReplaceCbReference.replaceReference(
|
|
1237
1296
|
triggeredSend.dynamicEmailSubject,
|
|
1238
|
-
parentName
|
|
1297
|
+
parentName,
|
|
1298
|
+
findAssetKeys
|
|
1239
1299
|
);
|
|
1240
1300
|
changes = true;
|
|
1241
1301
|
} catch (ex) {
|
|
@@ -1246,7 +1306,8 @@ class Journey extends MetadataType {
|
|
|
1246
1306
|
try {
|
|
1247
1307
|
triggeredSend.emailSubject = ReplaceCbReference.replaceReference(
|
|
1248
1308
|
triggeredSend.emailSubject,
|
|
1249
|
-
parentName
|
|
1309
|
+
parentName,
|
|
1310
|
+
findAssetKeys
|
|
1250
1311
|
);
|
|
1251
1312
|
changes = true;
|
|
1252
1313
|
} catch (ex) {
|
|
@@ -1257,7 +1318,8 @@ class Journey extends MetadataType {
|
|
|
1257
1318
|
try {
|
|
1258
1319
|
triggeredSend.preHeader = ReplaceCbReference.replaceReference(
|
|
1259
1320
|
triggeredSend.preHeader,
|
|
1260
|
-
parentName
|
|
1321
|
+
parentName,
|
|
1322
|
+
findAssetKeys
|
|
1261
1323
|
);
|
|
1262
1324
|
changes = true;
|
|
1263
1325
|
} catch (ex) {
|
|
@@ -1268,7 +1330,8 @@ class Journey extends MetadataType {
|
|
|
1268
1330
|
try {
|
|
1269
1331
|
triggeredSend.exclusionFilter = ReplaceCbReference.replaceReference(
|
|
1270
1332
|
triggeredSend.exclusionFilter,
|
|
1271
|
-
parentName
|
|
1333
|
+
parentName,
|
|
1334
|
+
findAssetKeys
|
|
1272
1335
|
);
|
|
1273
1336
|
changes = true;
|
|
1274
1337
|
} catch (ex) {
|
|
@@ -1295,6 +1358,217 @@ class Journey extends MetadataType {
|
|
|
1295
1358
|
// no error means we have a new item to deploy and need to update the item in our retrieve folder
|
|
1296
1359
|
return item;
|
|
1297
1360
|
}
|
|
1361
|
+
/**
|
|
1362
|
+
* Gets executed after deployment of metadata type
|
|
1363
|
+
*
|
|
1364
|
+
* @param {MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create
|
|
1365
|
+
*/
|
|
1366
|
+
static async postDeployTasks(upsertResults) {
|
|
1367
|
+
if (Util.OPTIONS.publish) {
|
|
1368
|
+
Util.logger.info(`Publishing: ${this.definition.type}`);
|
|
1369
|
+
// pubslih
|
|
1370
|
+
const idArr = Object.values(upsertResults).map(
|
|
1371
|
+
(item) => 'id:' + item.id + '/' + item.version
|
|
1372
|
+
);
|
|
1373
|
+
await this.publish(idArr);
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
/**
|
|
1377
|
+
* a function to publish the journey via API
|
|
1378
|
+
*
|
|
1379
|
+
* @param {string[]} keyArr keys or ids of the metadata
|
|
1380
|
+
* @returns {Promise.<string[]>} Returns list of updated keys/ids that were published. Success could only be seen with a delay in the UI because the publish-endpoint is async
|
|
1381
|
+
*/
|
|
1382
|
+
static async publish(keyArr) {
|
|
1383
|
+
const results = [];
|
|
1384
|
+
// works only with objectId
|
|
1385
|
+
let objectId;
|
|
1386
|
+
let idFound = false;
|
|
1387
|
+
let versionFound = false;
|
|
1388
|
+
const statusUrls = [];
|
|
1389
|
+
for (let key of keyArr) {
|
|
1390
|
+
let version;
|
|
1391
|
+
if (key) {
|
|
1392
|
+
if (key.startsWith('%23')) {
|
|
1393
|
+
// if the key started with %23 assume an ID was copied from the URL but the user forgot to prefix it with id:
|
|
1394
|
+
// correct the format
|
|
1395
|
+
key = 'id:' + key.slice(3);
|
|
1396
|
+
}
|
|
1397
|
+
if (key.startsWith('id:')) {
|
|
1398
|
+
idFound = true;
|
|
1399
|
+
// ! allow selecting journeys by ID because that's what users see in the URL
|
|
1400
|
+
// remove id
|
|
1401
|
+
objectId = key.slice(3);
|
|
1402
|
+
if (objectId.startsWith('%23')) {
|
|
1403
|
+
// in the journey URL the Id is prefixed with an HTML-encoded "#" which could accidentally be copied by users
|
|
1404
|
+
// despite the slicing above, this still needs testing here because users might have prefixed the ID with id: but did not know to remove the #23
|
|
1405
|
+
objectId = objectId.slice(3);
|
|
1406
|
+
// correct the format to ensure we show sth readable in the "Downloaded" log
|
|
1407
|
+
objectId = 'id:' + objectId;
|
|
1408
|
+
// update this here to show it in the log
|
|
1409
|
+
key = objectId;
|
|
1410
|
+
}
|
|
1411
|
+
if (objectId.includes('/')) {
|
|
1412
|
+
versionFound = true;
|
|
1413
|
+
version = objectId.split('/')[1];
|
|
1414
|
+
// in the journey URL the version is appended after the ID, separated by a forward-slash. Needs to be removed from the ID for caching as we always aim to retrieve the latest version only
|
|
1415
|
+
objectId = objectId.split('/')[0];
|
|
1416
|
+
} else {
|
|
1417
|
+
// if we didn't find a version we need to cache this from the API after all
|
|
1418
|
+
objectId = null;
|
|
1419
|
+
if (key.includes('/')) {
|
|
1420
|
+
// in the journey URL the version is appended after the ID, separated by a forward-slash. Needs to be removed from the key for caching as we always aim to retrieve the latest version only
|
|
1421
|
+
key = key.split('/')[0];
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
if (!objectId) {
|
|
1426
|
+
Util.logger.info(
|
|
1427
|
+
` - getting${!idFound && !versionFound ? ' ID and' : ''} latest version from server`
|
|
1428
|
+
);
|
|
1429
|
+
const metadataMap = await this.retrieveForCache(undefined, undefined, key);
|
|
1430
|
+
const journey = Object.values(metadataMap.metadata);
|
|
1431
|
+
if (!journey.length) {
|
|
1432
|
+
Util.logger.info(`Skipping ${key} - did not find an item with such key`);
|
|
1433
|
+
continue;
|
|
1434
|
+
}
|
|
1435
|
+
objectId = journey[0].id;
|
|
1436
|
+
version = journey[0].version;
|
|
1437
|
+
if (!objectId || !version) {
|
|
1438
|
+
Util.logger.info(`Skipping ${key} - did not find an item with such key`);
|
|
1439
|
+
continue;
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
results.push(
|
|
1445
|
+
(async () => {
|
|
1446
|
+
try {
|
|
1447
|
+
const response = await this.client.rest.post(
|
|
1448
|
+
`/interaction/v1/interactions/publishAsync/${objectId}?versionNumber=${version}`,
|
|
1449
|
+
{}
|
|
1450
|
+
); // payload is empty for this request
|
|
1451
|
+
if (response.statusUrl && response.statusId) {
|
|
1452
|
+
Util.logger.info(
|
|
1453
|
+
` - queued for publishing ${this.definition.type}: ${key}`
|
|
1454
|
+
);
|
|
1455
|
+
statusUrls.push({ key, statusUrl: response.statusUrl });
|
|
1456
|
+
} else {
|
|
1457
|
+
throw new Error(response);
|
|
1458
|
+
}
|
|
1459
|
+
return key;
|
|
1460
|
+
} catch (ex) {
|
|
1461
|
+
if (ex.message === 'Cannot publish interaction in Published status.') {
|
|
1462
|
+
Util.logger.info(
|
|
1463
|
+
` - ${this.definition.type} ${key} is already published`
|
|
1464
|
+
);
|
|
1465
|
+
} else if (ex.message === 'Cannot publish interaction in Stopped status.') {
|
|
1466
|
+
Util.logger.warn(
|
|
1467
|
+
` - ${this.definition.type} ${key} is already published but stopped. Please resume it manually.`
|
|
1468
|
+
);
|
|
1469
|
+
} else {
|
|
1470
|
+
Util.logger.error(
|
|
1471
|
+
`Failed to publish ${this.definition.type} ${key}: ${ex.message}`
|
|
1472
|
+
);
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
})()
|
|
1476
|
+
);
|
|
1477
|
+
}
|
|
1478
|
+
const executedKeyArr = (await Promise.all(results)).filter(Boolean);
|
|
1479
|
+
|
|
1480
|
+
if (!Util.OPTIONS.skipStatusCheck && statusUrls.length) {
|
|
1481
|
+
Util.logger.info(
|
|
1482
|
+
`Checking status of ${statusUrls.length} published item${statusUrls.length === 1 ? '' : 's'}`
|
|
1483
|
+
);
|
|
1484
|
+
executedKeyArr.length = 0;
|
|
1485
|
+
await Util.sleep(5000);
|
|
1486
|
+
for (const item of statusUrls) {
|
|
1487
|
+
executedKeyArr.push(await this._checkPublishStatus(item.statusUrl, item.key));
|
|
1488
|
+
}
|
|
1489
|
+
// return executedKeyArr;
|
|
1490
|
+
}
|
|
1491
|
+
Util.logger.info(
|
|
1492
|
+
`Published ${executedKeyArr.filter(Boolean).length} of ${keyArr.length} items`
|
|
1493
|
+
);
|
|
1494
|
+
return executedKeyArr.filter(Boolean);
|
|
1495
|
+
}
|
|
1496
|
+
/**
|
|
1497
|
+
* helper for {@link Journey.publish}
|
|
1498
|
+
*
|
|
1499
|
+
* @param {string} statusUrl URL to check the status of the publish request
|
|
1500
|
+
* @param {string} key key or id for log messages
|
|
1501
|
+
* @param {number} [tries] number of tries used to check the status
|
|
1502
|
+
* @returns {Promise.<string>} key of the item that was published successfully
|
|
1503
|
+
*/
|
|
1504
|
+
static async _checkPublishStatus(statusUrl, key, tries = 1) {
|
|
1505
|
+
try {
|
|
1506
|
+
const response = await this.client.rest.get(statusUrl);
|
|
1507
|
+
switch (response.status) {
|
|
1508
|
+
case 'PublishCompleted': {
|
|
1509
|
+
Util.logger.info(` - ${this.definition.type} ${key}: publishing succeeded`);
|
|
1510
|
+
this._showPublishStatusDetails(response);
|
|
1511
|
+
return key;
|
|
1512
|
+
}
|
|
1513
|
+
case 'PublishInProcess': {
|
|
1514
|
+
Util.logger.info(
|
|
1515
|
+
` - ${this.definition.type} ${key}: publishing still in progress`
|
|
1516
|
+
);
|
|
1517
|
+
if (tries < 50) {
|
|
1518
|
+
await (tries < 10 ? Util.sleep(2000) : Util.sleep(5000));
|
|
1519
|
+
return await this._checkPublishStatus(statusUrl, key, tries + 1);
|
|
1520
|
+
} else {
|
|
1521
|
+
return;
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
case 'Error': {
|
|
1525
|
+
Util.logger.error(` - ${this.definition.type} ${key}: publishing failed.`);
|
|
1526
|
+
this._showPublishStatusDetails(response);
|
|
1527
|
+
return;
|
|
1528
|
+
}
|
|
1529
|
+
// No default
|
|
1530
|
+
}
|
|
1531
|
+
} catch (ex) {
|
|
1532
|
+
Util.logger.error(`Failed to check status of ${key}: ${ex.message}`);
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
/**
|
|
1537
|
+
* helper for {@link Journey._checkPublishStatus}
|
|
1538
|
+
*
|
|
1539
|
+
* @param {{status:string, errors:Array, warnings:Array}} response publishStatus response
|
|
1540
|
+
*/
|
|
1541
|
+
static _showPublishStatusDetails(response) {
|
|
1542
|
+
const types = { errors: 'Errors', warnings: 'Warnings' };
|
|
1543
|
+
const messages = { errors: [], warnings: [] };
|
|
1544
|
+
for (const type in types) {
|
|
1545
|
+
let counter = 1;
|
|
1546
|
+
if (response[type] && response[type].length) {
|
|
1547
|
+
messages[type].push(` ${types[type]}:`);
|
|
1548
|
+
for (const msg of response[type]) {
|
|
1549
|
+
messages[type].push(
|
|
1550
|
+
` #${counter++}`,
|
|
1551
|
+
` Code: ${msg.errorCode}`,
|
|
1552
|
+
` Details: ${msg.errorDetail}`
|
|
1553
|
+
);
|
|
1554
|
+
if (msg.additionalInfo && Object.keys(msg.additionalInfo).length) {
|
|
1555
|
+
messages[type].push(` Additional Info:`);
|
|
1556
|
+
for (const key in msg.additionalInfo) {
|
|
1557
|
+
messages[type].push(` ${key}: ${msg.additionalInfo[key]}`);
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
// add spacer line
|
|
1561
|
+
messages[type].push('');
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
for (const msg of messages.errors) {
|
|
1566
|
+
Util.logger.error(msg);
|
|
1567
|
+
}
|
|
1568
|
+
for (const msg of messages.warnings) {
|
|
1569
|
+
Util.logger.warn(' ' + msg);
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1298
1572
|
}
|
|
1299
1573
|
|
|
1300
1574
|
// Assign definition to static attributes
|