mcdev 7.0.3 → 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 +2 -0
- package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +1 -0
- package/.github/workflows/code-test.yml +48 -0
- package/.husky/post-checkout +1 -1
- package/.husky/post-merge +7 -1
- package/.husky/pre-commit +3 -1
- package/@types/lib/Builder.d.ts +13 -13
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts +19 -16
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts +15 -15
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/cli.d.ts +1 -1
- package/@types/lib/cli.d.ts.map +1 -1
- package/@types/lib/index.d.ts +102 -51
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +71 -59
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts +6 -8
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeSet.d.ts +10 -21
- package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +47 -49
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Campaign.d.ts +12 -18
- package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ContentArea.d.ts +13 -31
- package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +28 -33
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +15 -22
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +12 -11
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +13 -28
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtractType.d.ts +11 -10
- package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts +11 -10
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Discovery.d.ts +11 -10
- package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts +14 -34
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/EmailSend.d.ts +18 -10
- package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +22 -16
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileLocation.d.ts +11 -10
- package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +12 -18
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Filter.d.ts +11 -10
- package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +49 -35
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +16 -15
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +55 -35
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts +13 -12
- package/@types/lib/metadataTypes/List.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +73 -26
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileCode.d.ts +12 -20
- package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +23 -14
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +18 -42
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts +15 -12
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Role.d.ts +12 -11
- package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +18 -25
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts +13 -10
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +12 -25
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts +18 -12
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts +12 -32
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalPush.d.ts +15 -21
- package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts +16 -18
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts +19 -24
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts +23 -40
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts +16 -13
- 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 +10 -1
- 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/auth.d.ts +19 -18
- package/@types/lib/util/auth.d.ts.map +1 -1
- package/@types/lib/util/businessUnit.d.ts +17 -17
- package/@types/lib/util/businessUnit.d.ts.map +1 -1
- package/@types/lib/util/cache.d.ts +34 -32
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts +30 -33
- package/@types/lib/util/cli.d.ts.map +1 -1
- package/@types/lib/util/config.d.ts +20 -20
- package/@types/lib/util/config.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts +21 -21
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/file.d.ts +179 -18
- package/@types/lib/util/file.d.ts.map +1 -1
- package/@types/lib/util/init.config.d.ts +19 -19
- package/@types/lib/util/init.config.d.ts.map +1 -1
- package/@types/lib/util/init.d.ts +20 -20
- package/@types/lib/util/init.d.ts.map +1 -1
- package/@types/lib/util/init.git.d.ts +2 -2
- package/@types/lib/util/init.git.d.ts.map +1 -1
- package/@types/lib/util/init.npm.d.ts +2 -2
- package/@types/lib/util/init.npm.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts +55 -32
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +64 -39
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +160 -52
- 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/eslint.config.js +0 -1
- package/lib/Builder.js +13 -8
- package/lib/Deployer.js +13 -8
- package/lib/Retriever.js +4 -1
- package/lib/cli.js +384 -288
- package/lib/index.js +620 -241
- package/lib/metadataTypes/Asset.js +455 -209
- package/lib/metadataTypes/Automation.js +34 -0
- package/lib/metadataTypes/DataExtension.js +36 -31
- package/lib/metadataTypes/DataExtensionField.js +2 -3
- package/lib/metadataTypes/Event.js +227 -37
- package/lib/metadataTypes/Folder.js +64 -49
- package/lib/metadataTypes/Journey.js +340 -58
- package/lib/metadataTypes/MetadataType.js +272 -61
- package/lib/metadataTypes/MobileKeyword.js +12 -1
- package/lib/metadataTypes/Role.js +9 -7
- package/lib/metadataTypes/Script.js +4 -3
- package/lib/metadataTypes/SenderProfile.js +18 -5
- package/lib/metadataTypes/TransactionalEmail.js +2 -2
- package/lib/metadataTypes/TriggeredSend.js +21 -5
- package/lib/metadataTypes/User.js +31 -27
- 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 +9 -8
- 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/auth.js +0 -1
- package/lib/util/cache.js +35 -0
- package/lib/util/cli.js +96 -140
- package/lib/util/config.js +11 -19
- package/lib/util/devops.js +42 -43
- package/lib/util/file.js +7 -10
- 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 +110 -61
- package/lib/util/util.js +90 -4
- package/package.json +22 -19
- package/test/general.test.js +1144 -172
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +201 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +233 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +194 -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/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +50 -0
- package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +50 -0
- package/test/resources/9999999/dataExtension/retrieve-response.xml +48 -0
- package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +219 -0
- package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +55 -0
- package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +461 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +133 -0
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +870 -0
- 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 +227 -0
- package/test/resources/9999999/event/get-expected.json +234 -0
- package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +20 -0
- package/test/resources/9999999/event/post_withExistingDE-expected.json +23 -0
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +199 -0
- package/test/resources/9999999/event/post_withSchema-expected.json +234 -0
- package/test/resources/9999999/event/put-callout-expected.json +204 -0
- package/test/resources/9999999/event/put-expected.json +233 -0
- package/test/resources/9999999/event/template-expected.json +227 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +252 -2
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/delete-response.txt +0 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +242 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +28 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +243 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +1 -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 -42
- package/test/type.automation.test.js +135 -59
- package/test/type.dataExtension.test.js +4 -4
- package/test/type.dataExtract.test.js +4 -4
- package/test/type.emailSend.test.js +3 -3
- package/test/type.event.test.js +286 -7
- package/test/type.journey.test.js +335 -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/type.user.test.js +1 -1
- package/test/utils.js +31 -9
- package/tsconfig.json +6 -1
- package/{jsconfig.json → tsconfig.npmScripts.json} +1 -1
- package/tsconfig.precommit.json +26 -0
- package/types/mcdev.d.js +39 -14
- /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
|
@@ -19,6 +19,7 @@ import pLimit from 'p-limit';
|
|
|
19
19
|
* @typedef {import('../../types/mcdev.d.js').SDKError} SDKError
|
|
20
20
|
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
21
21
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
22
|
+
* @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
|
|
22
23
|
*/
|
|
23
24
|
/**
|
|
24
25
|
* @typedef {import('../../types/mcdev.d.js').AutomationItem} AutomationItem
|
|
@@ -1620,6 +1621,39 @@ class Automation extends MetadataType {
|
|
|
1620
1621
|
// delete local copy: retrieve/cred/bu/.../...-doc.md
|
|
1621
1622
|
await super.postDeleteTasks(customerKey, [`${this.definition.type}-doc.md`]);
|
|
1622
1623
|
}
|
|
1624
|
+
|
|
1625
|
+
/**
|
|
1626
|
+
* helper for {@link MetadataType.getNestedValue} - adjusted for automation activities
|
|
1627
|
+
*
|
|
1628
|
+
* @param {any} obj the metadataItem to search in (or the result)
|
|
1629
|
+
* @param {string[]} nestedKeyParts key in dot-notation split into parts
|
|
1630
|
+
* @param {string} dependentType used for types that need custom handling
|
|
1631
|
+
* @returns {(string) | (string)[]} result
|
|
1632
|
+
*/
|
|
1633
|
+
static getNestedValueHelper(obj, nestedKeyParts, dependentType) {
|
|
1634
|
+
if (nestedKeyParts.length == 0) {
|
|
1635
|
+
// key was found; append '' to ensure we always return a string
|
|
1636
|
+
return obj + '';
|
|
1637
|
+
}
|
|
1638
|
+
// get most left key
|
|
1639
|
+
const key = nestedKeyParts.shift();
|
|
1640
|
+
if (!obj[key]) {
|
|
1641
|
+
// key was not found
|
|
1642
|
+
return;
|
|
1643
|
+
}
|
|
1644
|
+
if (Array.isArray(obj[key])) {
|
|
1645
|
+
return obj[key].flatMap((x) =>
|
|
1646
|
+
this.getNestedValueHelper(x, [...nestedKeyParts], dependentType)
|
|
1647
|
+
);
|
|
1648
|
+
} else {
|
|
1649
|
+
if (nestedKeyParts.length == 0) {
|
|
1650
|
+
// key was found if length is 0 and search field (r__type) is equal the current type, else, keep going
|
|
1651
|
+
return obj[key] === dependentType ? obj.r__key : undefined;
|
|
1652
|
+
} else {
|
|
1653
|
+
return this.getNestedValueHelper(obj[key], [...nestedKeyParts], dependentType);
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1623
1657
|
}
|
|
1624
1658
|
|
|
1625
1659
|
// Assign definition to static attributes
|
|
@@ -10,7 +10,7 @@ import File from '../util/file.js';
|
|
|
10
10
|
import auth from '../util/auth.js';
|
|
11
11
|
import cache from '../util/cache.js';
|
|
12
12
|
import pLimit from 'p-limit';
|
|
13
|
-
import
|
|
13
|
+
import { checkbox } from '@inquirer/prompts';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
@@ -33,7 +33,7 @@ import inquirer from 'inquirer';
|
|
|
33
33
|
* @augments MetadataType
|
|
34
34
|
*/
|
|
35
35
|
class DataExtension extends MetadataType {
|
|
36
|
-
/** @type {DataExtensionFieldMap} */
|
|
36
|
+
/** @type {Object.<string, DataExtensionFieldMap>} key: deKey, value: deFieldMap */
|
|
37
37
|
static oldFields;
|
|
38
38
|
/**
|
|
39
39
|
* Upserts dataExtensions after retrieving them from source and target to compare
|
|
@@ -100,16 +100,26 @@ class DataExtension extends MetadataType {
|
|
|
100
100
|
.filter((r) => r !== undefined && r !== null)
|
|
101
101
|
.filter(this.#filterUpsertResults);
|
|
102
102
|
|
|
103
|
+
if (Util.OPTIONS.noUpdate && metadataToUpdate.length > 0) {
|
|
104
|
+
Util.logger.info(
|
|
105
|
+
` ☇ skipping update of ${metadataToUpdate.length} ${this.definition.type}${metadataToUpdate.length == 1 ? '' : 's'}: --noUpdate flag is set`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
103
109
|
const updateLimit = pLimit(10);
|
|
104
|
-
const updateResults =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
const updateResults = Util.OPTIONS.noUpdate
|
|
111
|
+
? []
|
|
112
|
+
: (
|
|
113
|
+
await Promise.allSettled(
|
|
114
|
+
metadataToUpdate
|
|
115
|
+
.filter((r) => r !== undefined && r !== null)
|
|
116
|
+
.map((metadataEntry) =>
|
|
117
|
+
updateLimit(() => this.update(metadataEntry.after))
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
.filter((r) => r !== undefined && r !== null)
|
|
122
|
+
.filter(this.#filterUpsertResults);
|
|
113
123
|
|
|
114
124
|
const successfulResults = [...createResults, ...updateResults];
|
|
115
125
|
Util.logger.info(
|
|
@@ -119,8 +129,8 @@ class DataExtension extends MetadataType {
|
|
|
119
129
|
let upsertResults;
|
|
120
130
|
if (successfulResults.length > 0) {
|
|
121
131
|
const metadataResults = successfulResults
|
|
122
|
-
|
|
123
|
-
.
|
|
132
|
+
.map((r) => (r.status === 'fulfilled' ? r.value.Results[0].Object : null))
|
|
133
|
+
.filter(Boolean)
|
|
124
134
|
.map((r) => {
|
|
125
135
|
// if only one fields added will return object otherwise array
|
|
126
136
|
if (Array.isArray(r?.Fields?.Field)) {
|
|
@@ -172,7 +182,6 @@ class DataExtension extends MetadataType {
|
|
|
172
182
|
DataExtensionField.client = this.client;
|
|
173
183
|
DataExtensionField.properties = this.properties;
|
|
174
184
|
DataExtension.oldFields ||= {};
|
|
175
|
-
// @ts-expect-error not sure why this produces a type error. looks 100% correct
|
|
176
185
|
DataExtension.oldFields[metadataMap[metadataKey][this.definition.keyField]] =
|
|
177
186
|
await DataExtensionField.prepareDeployColumnsOnUpdate(
|
|
178
187
|
metadataMap[metadataKey].Fields,
|
|
@@ -278,10 +287,11 @@ class DataExtension extends MetadataType {
|
|
|
278
287
|
* Updates a single dataExtension. Also updates their columns in 'dataExtension.columns'
|
|
279
288
|
*
|
|
280
289
|
* @param {DataExtensionItem} metadata single metadata entry
|
|
290
|
+
* @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method
|
|
281
291
|
* @returns {Promise} Promise
|
|
282
292
|
*/
|
|
283
|
-
static async update(metadata) {
|
|
284
|
-
return super.updateSOAP(metadata);
|
|
293
|
+
static async update(metadata, handleOutside) {
|
|
294
|
+
return super.updateSOAP(metadata, handleOutside);
|
|
285
295
|
}
|
|
286
296
|
/**
|
|
287
297
|
* Gets executed after deployment of metadata type
|
|
@@ -485,24 +495,19 @@ class DataExtension extends MetadataType {
|
|
|
485
495
|
value: name,
|
|
486
496
|
checked: fixBuPreselected.includes(name),
|
|
487
497
|
}));
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
498
|
+
let answer = null;
|
|
499
|
+
|
|
500
|
+
try {
|
|
501
|
+
answer = await checkbox({
|
|
492
502
|
message:
|
|
493
503
|
'Please select BUs that have access to the updated Shared Data Extensions:',
|
|
494
504
|
pageSize: 10,
|
|
495
505
|
choices: buList,
|
|
496
|
-
}
|
|
497
|
-
];
|
|
498
|
-
let responses = null;
|
|
499
|
-
|
|
500
|
-
try {
|
|
501
|
-
responses = await inquirer.prompt(questions);
|
|
506
|
+
});
|
|
502
507
|
} catch (ex) {
|
|
503
508
|
Util.logger.info(ex);
|
|
504
509
|
}
|
|
505
|
-
return
|
|
510
|
+
return answer;
|
|
506
511
|
}
|
|
507
512
|
|
|
508
513
|
/**
|
|
@@ -678,7 +683,6 @@ class DataExtension extends MetadataType {
|
|
|
678
683
|
],
|
|
679
684
|
},
|
|
680
685
|
};
|
|
681
|
-
// @ts-expect-error SFMC-SDK typing error
|
|
682
686
|
await this.client.soap.update(Util.capitalizeFirstLetter(soapType), payload, null);
|
|
683
687
|
return randomSuffix;
|
|
684
688
|
}
|
|
@@ -821,9 +825,10 @@ class DataExtension extends MetadataType {
|
|
|
821
825
|
// get shared folders to match our shared / synched Data Extensions
|
|
822
826
|
const subTypeArr = this.definition.dependencies
|
|
823
827
|
.filter((item) => item.startsWith('folder-'))
|
|
824
|
-
.map((item) => item.slice(7))
|
|
828
|
+
.map((item) => item.slice(7))
|
|
829
|
+
.filter((item) => Folder.definition.folderTypesFromParent.includes(item));
|
|
825
830
|
Util.logger.info(' - Caching dependent Metadata: folder (shared via _ParentBU_)');
|
|
826
|
-
Util.logSubtypes(subTypeArr);
|
|
831
|
+
Util.logSubtypes(subTypeArr, ' ');
|
|
827
832
|
Folder.client = this.client;
|
|
828
833
|
Folder.buObject = this.buObject;
|
|
829
834
|
Folder.properties = this.properties;
|
|
@@ -1325,7 +1330,7 @@ class DataExtension extends MetadataType {
|
|
|
1325
1330
|
newJsonElement[field] = element[field];
|
|
1326
1331
|
}
|
|
1327
1332
|
}
|
|
1328
|
-
// @ts-ignore
|
|
1333
|
+
// @ts-ignore for document the fields have less values and that leads to an error here.
|
|
1329
1334
|
newJson.push(newJsonElement);
|
|
1330
1335
|
}
|
|
1331
1336
|
fieldsJson = newJson;
|
|
@@ -97,7 +97,7 @@ class DataExtensionField extends MetadataType {
|
|
|
97
97
|
*
|
|
98
98
|
* @param {DataExtensionFieldItem[]} deployColumns Columns of data extension that will be deployed
|
|
99
99
|
* @param {string} deKey external/customer key of Data Extension
|
|
100
|
-
* @returns {Promise.<
|
|
100
|
+
* @returns {Promise.<DataExtensionFieldMap>} existing fields by their original name to allow re-adding FieldType after update
|
|
101
101
|
*/
|
|
102
102
|
static async prepareDeployColumnsOnUpdate(deployColumns, deKey) {
|
|
103
103
|
// create list of DE keys that had changes to their fields to be able to use it as a filter in the --fixShared logic
|
|
@@ -132,7 +132,7 @@ class DataExtensionField extends MetadataType {
|
|
|
132
132
|
const fieldsObj = response.metadata;
|
|
133
133
|
|
|
134
134
|
// ensure fields can be updated properly by their adding ObjectId based on Name-matching
|
|
135
|
-
/** @type {
|
|
135
|
+
/** @type {DataExtensionFieldMap} */
|
|
136
136
|
const existingFieldByName = {};
|
|
137
137
|
|
|
138
138
|
for (const key of Object.keys(fieldsObj)) {
|
|
@@ -315,7 +315,6 @@ class DataExtensionField extends MetadataType {
|
|
|
315
315
|
};
|
|
316
316
|
try {
|
|
317
317
|
// ! we really do need to delete from DataExtension not DataExtensionField here!
|
|
318
|
-
// @ts-expect-error wrong jsdoc for 2nd parameter in SFMC-SDK
|
|
319
318
|
this.client.soap.delete('DataExtension', keyObj, null);
|
|
320
319
|
|
|
321
320
|
if (!fieldId) {
|
|
@@ -4,6 +4,7 @@ import MetadataType from './MetadataType.js';
|
|
|
4
4
|
import { Util } from '../util/util.js';
|
|
5
5
|
import File from '../util/file.js';
|
|
6
6
|
import cache from '../util/cache.js';
|
|
7
|
+
import deepEqual from 'deep-equal';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
@@ -24,6 +25,7 @@ import cache from '../util/cache.js';
|
|
|
24
25
|
* @augments MetadataType
|
|
25
26
|
*/
|
|
26
27
|
class Event extends MetadataType {
|
|
28
|
+
static reCacheDataExtensions = [];
|
|
27
29
|
/**
|
|
28
30
|
* Retrieves Metadata of Event Definition.
|
|
29
31
|
* Endpoint /interaction/v1/eventDefinitions return all Event Definitions with all details.
|
|
@@ -92,30 +94,26 @@ class Event extends MetadataType {
|
|
|
92
94
|
);
|
|
93
95
|
} else if (event?.length === 1) {
|
|
94
96
|
const originalKey = event[0][this.definition.keyField];
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
templateVariables
|
|
99
|
-
)
|
|
97
|
+
const metadataItemTemplated = Util.replaceByObject(
|
|
98
|
+
this.postRetrieveTasks(event[0]),
|
|
99
|
+
templateVariables
|
|
100
100
|
);
|
|
101
|
-
|
|
101
|
+
|
|
102
|
+
if (!metadataItemTemplated.r__dataExtension_key) {
|
|
102
103
|
throw new Error(
|
|
103
|
-
`Event.postRetrieveTasks::
|
|
104
|
-
`No Data Extension found for ` +
|
|
105
|
-
`event: ${eventDef.name}. ` +
|
|
106
|
-
`This cannot be templated`
|
|
104
|
+
`Event.postRetrieveTasks:: No Data Extension found for ${this.definition.type}: ${metadataItemTemplated.name}. This cannot be templated.`
|
|
107
105
|
);
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
// remove all fields listed in Definition for templating
|
|
111
|
-
this.keepTemplateFields(
|
|
109
|
+
this.keepTemplateFields(metadataItemTemplated);
|
|
112
110
|
await File.writeJSONToFile(
|
|
113
111
|
[templateDir, this.definition.type].join('/'),
|
|
114
112
|
originalKey + '.' + this.definition.type + '-meta',
|
|
115
|
-
|
|
113
|
+
metadataItemTemplated
|
|
116
114
|
);
|
|
117
|
-
Util.logger.info(
|
|
118
|
-
return { metadata:
|
|
115
|
+
Util.logger.info(` - templated ${this.definition.type}: ${name}`);
|
|
116
|
+
return { metadata: metadataItemTemplated, type: this.definition.type };
|
|
119
117
|
} else {
|
|
120
118
|
throw new Error(
|
|
121
119
|
`Encountered unknown error when retrieveing ${
|
|
@@ -175,7 +173,8 @@ class Event extends MetadataType {
|
|
|
175
173
|
static async update(metadataEntry) {
|
|
176
174
|
return super.updateREST(
|
|
177
175
|
metadataEntry,
|
|
178
|
-
'/interaction/v1/eventDefinitions/' +
|
|
176
|
+
'/interaction/v1/eventDefinitions/key:' +
|
|
177
|
+
encodeURIComponent(metadataEntry[this.definition.keyField]),
|
|
179
178
|
'put'
|
|
180
179
|
);
|
|
181
180
|
}
|
|
@@ -187,33 +186,216 @@ class Event extends MetadataType {
|
|
|
187
186
|
* @returns {MetadataTypeItem} parsed version
|
|
188
187
|
*/
|
|
189
188
|
static preDeployTasks(metadata) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
'dataExtension',
|
|
193
|
-
metadata.r__dataExtension_key,
|
|
194
|
-
'CustomerKey',
|
|
195
|
-
'ObjectID'
|
|
196
|
-
);
|
|
197
|
-
metadata.dataExtensionName = cache.searchForField(
|
|
198
|
-
'dataExtension',
|
|
199
|
-
metadata.r__dataExtension_key,
|
|
200
|
-
'CustomerKey',
|
|
201
|
-
'Name'
|
|
202
|
-
);
|
|
203
|
-
metadata.arguments.dataExtensionId = metadata.dataExtensionId;
|
|
204
|
-
if (metadata.schema) {
|
|
205
|
-
metadata.schema.id = metadata.dataExtensionId;
|
|
206
|
-
metadata.schema.name = metadata.dataExtensionName;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
189
|
+
// Note: lots has to be done in createOrUpdate based on what action is required
|
|
190
|
+
metadata.arguments ||= {};
|
|
209
191
|
metadata.arguments.eventDefinitionKey = metadata.eventDefinitionKey;
|
|
210
192
|
|
|
211
193
|
// standard values
|
|
212
194
|
metadata.isVisibleInPicker ||= false;
|
|
213
|
-
metadata.
|
|
214
|
-
|
|
195
|
+
if (metadata.isVisibleInPicker && !metadata.sourceApplicationExtensionId) {
|
|
196
|
+
Util.logger.warn(
|
|
197
|
+
` - ${this.definition.type} ${metadata[this.definition.keyField]}: isVisibleInPicker is true but sourceApplicationExtensionId is missing. Setting isVisibleInPicker to false.`
|
|
198
|
+
);
|
|
199
|
+
metadata.isVisibleInPicker = false;
|
|
200
|
+
}
|
|
201
|
+
metadata.isPlatformObject ||= false;
|
|
202
|
+
metadata.mode ||= 'Production';
|
|
203
|
+
switch (metadata.type) {
|
|
204
|
+
case 'APIEvent': {
|
|
205
|
+
metadata.entrySourceGroupConfigUrl ||=
|
|
206
|
+
'jb:///data/entry/api-event/entrysourcegroupconfig.json';
|
|
207
|
+
metadata.iconUrl ||= '/images/icon_journeyBuilder-event-api-blue.svg';
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'SalesforceObjectTriggerV2': {
|
|
211
|
+
metadata.iconUrl ||= '/jbint-events/events/SalesforceData/images/SF-Event-Icon.svg';
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
215
216
|
return metadata;
|
|
216
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* helper for {@link MetadataType.upsert}
|
|
220
|
+
*
|
|
221
|
+
* @param {MetadataTypeMap} metadataMap list of metadata
|
|
222
|
+
* @param {string} metadataKey key of item we are looking at
|
|
223
|
+
* @param {boolean} hasError error flag from previous code
|
|
224
|
+
* @param {MetadataTypeItemDiff[]} metadataToUpdate list of items to update
|
|
225
|
+
* @param {MetadataTypeItem[]} metadataToCreate list of items to create
|
|
226
|
+
* @returns {Promise.<'create'|'update'|'skip'>} action to take
|
|
227
|
+
*/
|
|
228
|
+
static async createOrUpdate(
|
|
229
|
+
metadataMap,
|
|
230
|
+
metadataKey,
|
|
231
|
+
hasError,
|
|
232
|
+
metadataToUpdate,
|
|
233
|
+
metadataToCreate
|
|
234
|
+
) {
|
|
235
|
+
const createOrUpdateAction = await super.createOrUpdate(
|
|
236
|
+
metadataMap,
|
|
237
|
+
metadataKey,
|
|
238
|
+
hasError,
|
|
239
|
+
metadataToUpdate,
|
|
240
|
+
metadataToCreate
|
|
241
|
+
);
|
|
242
|
+
const metadataItem = metadataMap[metadataKey];
|
|
243
|
+
if (createOrUpdateAction === 'update') {
|
|
244
|
+
if (metadataItem.r__dataExtension_key) {
|
|
245
|
+
metadataItem.dataExtensionId = cache.searchForField(
|
|
246
|
+
'dataExtension',
|
|
247
|
+
metadataItem.r__dataExtension_key,
|
|
248
|
+
'CustomerKey',
|
|
249
|
+
'ObjectID'
|
|
250
|
+
);
|
|
251
|
+
metadataItem.dataExtensionName = cache.searchForField(
|
|
252
|
+
'dataExtension',
|
|
253
|
+
metadataItem.r__dataExtension_key,
|
|
254
|
+
'CustomerKey',
|
|
255
|
+
'Name'
|
|
256
|
+
);
|
|
257
|
+
metadataItem.arguments.dataExtensionId = metadataItem.dataExtensionId;
|
|
258
|
+
if (metadataItem.schema) {
|
|
259
|
+
metadataItem.schema.id = metadataItem.dataExtensionId;
|
|
260
|
+
metadataItem.schema.name = metadataItem.dataExtensionName;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (metadataItem.schema?.fields?.length) {
|
|
264
|
+
const normalizedKey = File.reverseFilterIllegalFilenames(
|
|
265
|
+
metadataMap[metadataKey][this.definition.keyField]
|
|
266
|
+
);
|
|
267
|
+
const cachedVersion = cache.getByKey(this.definition.type, normalizedKey);
|
|
268
|
+
if (cachedVersion?.schema?.fields?.length) {
|
|
269
|
+
const cacheClone = structuredClone(cachedVersion);
|
|
270
|
+
cacheClone.schema.fields = cacheClone.schema.fields.map((field) => {
|
|
271
|
+
delete field.isDevicePreference;
|
|
272
|
+
return field;
|
|
273
|
+
});
|
|
274
|
+
if (!deepEqual(metadataItem?.schema?.fields, cacheClone?.schema?.fields)) {
|
|
275
|
+
Util.logger.warn(
|
|
276
|
+
` - ${this.definition.type} ${metadataItem[this.definition.keyField]}: schema fields differ from server version. Resetting as this will not be reflected on dataExtension.`
|
|
277
|
+
);
|
|
278
|
+
metadataItem.schema.fields = cacheClone.schema.fields;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
} else if (createOrUpdateAction === 'create') {
|
|
283
|
+
try {
|
|
284
|
+
if (metadataItem.r__dataExtension_key) {
|
|
285
|
+
metadataItem.dataExtensionId = cache.searchForField(
|
|
286
|
+
'dataExtension',
|
|
287
|
+
metadataItem.r__dataExtension_key,
|
|
288
|
+
'CustomerKey',
|
|
289
|
+
'ObjectID'
|
|
290
|
+
);
|
|
291
|
+
metadataItem.dataExtensionName = cache.searchForField(
|
|
292
|
+
'dataExtension',
|
|
293
|
+
metadataItem.r__dataExtension_key,
|
|
294
|
+
'CustomerKey',
|
|
295
|
+
'Name'
|
|
296
|
+
);
|
|
297
|
+
if (metadataItem.schema) {
|
|
298
|
+
delete metadataItem.schema;
|
|
299
|
+
Util.logger.info(
|
|
300
|
+
` - ${this.definition.type} ${metadataItem[this.definition.keyField]}: dataExtension ${metadataItem.r__dataExtension_key} found, ignoring schema-section in ${this.definition.type} json`
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
} catch {
|
|
305
|
+
// no action
|
|
306
|
+
}
|
|
307
|
+
if (metadataItem.schema) {
|
|
308
|
+
if (metadataItem.r__dataExtension_key) {
|
|
309
|
+
metadataItem.schema.name = metadataItem.r__dataExtension_key;
|
|
310
|
+
}
|
|
311
|
+
Util.logger.warn(
|
|
312
|
+
`Data Extension ${metadataItem.schema.name || metadataItem[this.definition.keyField]} not found on BU. Creating it automatically based on schema-definition.`
|
|
313
|
+
);
|
|
314
|
+
// we want the event api to create the DE for us based on the schema
|
|
315
|
+
this.reCacheDataExtensions.push({
|
|
316
|
+
eventKey: metadataItem[this.definition.keyField],
|
|
317
|
+
deKey: metadataItem.schema.name || metadataItem[this.definition.keyField],
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return createOrUpdateAction;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Gets executed after deployment of metadata type
|
|
325
|
+
*
|
|
326
|
+
* @param {MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create
|
|
327
|
+
* @param {MetadataTypeMap} originalMetadata metadata to be updated (contains additioanl fields)
|
|
328
|
+
* @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates
|
|
329
|
+
* @returns {Promise.<void>} -
|
|
330
|
+
*/
|
|
331
|
+
static async postDeployTasks(upsertResults, originalMetadata, createdUpdated) {
|
|
332
|
+
// CREATE ONLY - if dataExtensions were auto-
|
|
333
|
+
if (this.reCacheDataExtensions.length && createdUpdated.created > 0) {
|
|
334
|
+
Util.logger.warn(' - Re-caching dependent Metadata: dataExtension');
|
|
335
|
+
const deRetrieve = await DataExtension.retrieveForCache();
|
|
336
|
+
cache.setMetadata('dataExtension', deRetrieve.metadata);
|
|
337
|
+
const reDownloadDeKeys = [];
|
|
338
|
+
// try to update key & name of the auto-generated dataExtension
|
|
339
|
+
for (const { eventKey, deKey } of this.reCacheDataExtensions) {
|
|
340
|
+
if (!upsertResults[eventKey]) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
const eventItem = upsertResults[eventKey];
|
|
344
|
+
const newDeKey = cache.searchForField(
|
|
345
|
+
'dataExtension',
|
|
346
|
+
eventItem.dataExtensionId,
|
|
347
|
+
'ObjectID',
|
|
348
|
+
'CustomerKey'
|
|
349
|
+
);
|
|
350
|
+
// get dataExtension from cache which conveniently already has the ObjectID set
|
|
351
|
+
const deObj = cache.getByKey('dataExtension', newDeKey);
|
|
352
|
+
const oldName = deObj[DataExtension.definition.nameField];
|
|
353
|
+
// prepare a clone of the DE to update name & key to match the event
|
|
354
|
+
const clone = structuredClone(deObj);
|
|
355
|
+
clone[DataExtension.definition.keyField] = deKey;
|
|
356
|
+
clone[DataExtension.definition.nameField] = deKey;
|
|
357
|
+
try {
|
|
358
|
+
// update DE on server
|
|
359
|
+
await DataExtension.update(clone, true);
|
|
360
|
+
Util.logger.info(
|
|
361
|
+
` - changed dataExtension ${newDeKey} (${oldName}) key/name to ${deKey}`
|
|
362
|
+
);
|
|
363
|
+
// update cache
|
|
364
|
+
deObj[DataExtension.definition.keyField] = deKey;
|
|
365
|
+
deObj[DataExtension.definition.nameField] = deKey;
|
|
366
|
+
|
|
367
|
+
reDownloadDeKeys.push(deObj[DataExtension.definition.keyField]);
|
|
368
|
+
} catch {
|
|
369
|
+
// fallback, set DE key to value of DE name
|
|
370
|
+
const clone = structuredClone(deObj);
|
|
371
|
+
clone[DataExtension.definition.keyField] = oldName;
|
|
372
|
+
try {
|
|
373
|
+
// update DE on server
|
|
374
|
+
await DataExtension.update(clone, true);
|
|
375
|
+
Util.logger.info(
|
|
376
|
+
` - changed dataExtension ${newDeKey} (${oldName}) key to ${oldName}`
|
|
377
|
+
);
|
|
378
|
+
// update cache
|
|
379
|
+
deObj[DataExtension.definition.keyField] =
|
|
380
|
+
deObj[DataExtension.definition.nameField];
|
|
381
|
+
|
|
382
|
+
reDownloadDeKeys.push(deObj[DataExtension.definition.keyField]);
|
|
383
|
+
} catch {
|
|
384
|
+
Util.logger.debug(
|
|
385
|
+
` - failed to change dataExtension ${newDeKey} (${oldName}) key/name`
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
this.reCacheDataExtensions.length = 0;
|
|
391
|
+
|
|
392
|
+
// ensure we have downloaded auto-created DEs
|
|
393
|
+
if (reDownloadDeKeys.length) {
|
|
394
|
+
const retriever = new Retriever(this.properties, this.buObject);
|
|
395
|
+
await retriever.retrieve(['dataExtension'], reDownloadDeKeys);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
217
399
|
|
|
218
400
|
/**
|
|
219
401
|
* parses retrieved Metadata before saving
|
|
@@ -234,7 +416,6 @@ class Event extends MetadataType {
|
|
|
234
416
|
delete metadata.arguments.dataExtensionId;
|
|
235
417
|
if (metadata.schema) {
|
|
236
418
|
delete metadata.schema.id;
|
|
237
|
-
delete metadata.schema.name;
|
|
238
419
|
}
|
|
239
420
|
} catch (ex) {
|
|
240
421
|
Util.logger.verbose(
|
|
@@ -243,12 +424,21 @@ class Event extends MetadataType {
|
|
|
243
424
|
}): ${ex.message}.`
|
|
244
425
|
);
|
|
245
426
|
}
|
|
427
|
+
if (!metadata.isPlatformObject) {
|
|
428
|
+
delete metadata.isPlatformObject;
|
|
429
|
+
}
|
|
430
|
+
if (metadata.mode === 'Production') {
|
|
431
|
+
delete metadata.mode;
|
|
432
|
+
}
|
|
433
|
+
|
|
246
434
|
return metadata;
|
|
247
435
|
}
|
|
248
436
|
}
|
|
249
437
|
|
|
250
438
|
// Assign definition to static attributes
|
|
251
439
|
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
440
|
+
import DataExtension from './DataExtension.js';
|
|
441
|
+
import Retriever from './../Retriever.js';
|
|
252
442
|
Event.definition = MetadataTypeDefinitions.event;
|
|
253
443
|
|
|
254
444
|
export default Event;
|