mcdev 9.0.2 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/lib/Builder.d.ts +13 -14
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts +16 -17
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/MetadataTypeDefinitions.d.ts +4 -0
- package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
- package/@types/lib/MetadataTypeInfo.d.ts +4 -0
- package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts +16 -21
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/cli.d.ts.map +1 -1
- package/@types/lib/index.d.ts +64 -36
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +159 -84
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +2 -12
- 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/DataExtension.d.ts +4 -24
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +25 -0
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +1 -10
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataFilter.d.ts +6 -19
- package/@types/lib/metadataTypes/DataFilter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DomainVerification.d.ts +1 -0
- package/@types/lib/metadataTypes/DomainVerification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts +0 -2
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +6 -16
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +1 -10
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Filter.d.ts +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +4 -4
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +2 -12
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +4 -4
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +33 -36
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileApplication.d.ts +189 -0
- package/@types/lib/metadataTypes/MobileApplication.d.ts.map +1 -0
- package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +1 -11
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +23 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobilePush.d.ts +407 -0
- package/@types/lib/metadataTypes/MobilePush.d.ts.map +1 -0
- package/@types/lib/metadataTypes/MobilePushApp.d.ts +189 -0
- package/@types/lib/metadataTypes/MobilePushApp.d.ts.map +1 -0
- package/@types/lib/metadataTypes/Query.d.ts +1 -13
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +1 -13
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +7 -2
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +51 -41
- package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DomainVerification.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 -1
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +2 -0
- package/@types/lib/metadataTypes/definitions/MobileApplication.definition.d.ts +122 -0
- package/@types/lib/metadataTypes/definitions/MobileApplication.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/MobilePush.definition.d.ts +467 -0
- package/@types/lib/metadataTypes/definitions/MobilePush.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/MobilePushApp.definition.d.ts +122 -0
- package/@types/lib/metadataTypes/definitions/MobilePushApp.definition.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
- package/@types/lib/util/auth.d.ts +30 -23
- package/@types/lib/util/auth.d.ts.map +1 -1
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts.map +1 -1
- package/@types/lib/util/config.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts +9 -0
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/file.d.ts +32 -18
- package/@types/lib/util/file.d.ts.map +1 -1
- package/@types/lib/util/git.d.ts +155 -0
- package/@types/lib/util/git.d.ts.map +1 -0
- package/@types/lib/util/init.config.d.ts +30 -14
- 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 +10 -0
- package/@types/lib/util/init.git.d.ts.map +1 -1
- package/@types/lib/util/init.npm.d.ts +9 -14
- package/@types/lib/util/init.npm.d.ts.map +1 -1
- package/@types/lib/util/isDeepEqual.d.ts +9 -0
- package/@types/lib/util/isDeepEqual.d.ts.map +1 -0
- package/@types/lib/util/jsonToTable.d.ts +9 -0
- package/@types/lib/util/jsonToTable.d.ts.map +1 -0
- package/@types/lib/util/migrations/assetV10.d.ts +70 -0
- package/@types/lib/util/migrations/assetV10.d.ts.map +1 -0
- package/@types/lib/util/progress.d.ts +249 -0
- package/@types/lib/util/progress.d.ts.map +1 -0
- package/@types/lib/util/sessionStore.d.ts +25 -0
- package/@types/lib/util/sessionStore.d.ts.map +1 -0
- package/@types/lib/util/topological-sort.d.ts +22 -0
- package/@types/lib/util/topological-sort.d.ts.map +1 -0
- package/@types/lib/util/util.d.ts +124 -83
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/lib/util/validations.d.ts +15 -3
- package/@types/lib/util/validations.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +35 -22
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/README.md +6 -2
- package/boilerplate/files/.prettierignore +7 -0
- package/boilerplate/files/.prettierrc +1 -23
- package/boilerplate/files/.vscode/extensions.json +14 -13
- package/boilerplate/files/.vscode/settings.json +14 -8
- package/boilerplate/files/eslint.config.js +44 -175
- package/boilerplate/forcedUpdates.json +11 -0
- package/boilerplate/npm-dependencies.json +3 -5
- package/boilerplate/npmrc-template +1 -0
- package/lib/Builder.js +4 -12
- package/lib/Deployer.js +32 -29
- package/lib/MetadataTypeDefinitions.js +4 -0
- package/lib/MetadataTypeInfo.js +4 -0
- package/lib/Retriever.js +8 -32
- package/lib/cli.js +101 -82
- package/lib/index.js +225 -166
- package/lib/metadataTypes/Asset.js +958 -307
- package/lib/metadataTypes/AttributeGroup.js +1 -6
- package/lib/metadataTypes/AttributeSet.js +1 -1
- package/lib/metadataTypes/Automation.js +95 -162
- package/lib/metadataTypes/Campaign.js +1 -6
- package/lib/metadataTypes/DataExtension.js +92 -132
- package/lib/metadataTypes/DataExtensionField.js +115 -1
- package/lib/metadataTypes/DataExtract.js +1 -56
- package/lib/metadataTypes/DataExtractType.js +1 -1
- package/lib/metadataTypes/DataFilter.js +23 -9
- package/lib/metadataTypes/DeliveryProfile.js +1 -6
- package/lib/metadataTypes/DomainVerification.js +1 -1
- package/lib/metadataTypes/Email.js +2 -4
- package/lib/metadataTypes/Event.js +7 -66
- package/lib/metadataTypes/FileLocation.js +1 -7
- package/lib/metadataTypes/FileTransfer.js +1 -56
- package/lib/metadataTypes/Filter.js +1 -1
- package/lib/metadataTypes/Folder.js +9 -9
- package/lib/metadataTypes/ImportFile.js +4 -59
- package/lib/metadataTypes/Journey.js +408 -168
- package/lib/metadataTypes/MetadataType.js +180 -182
- package/lib/metadataTypes/MobileCode.js +0 -1
- package/lib/metadataTypes/MobileKeyword.js +6 -39
- package/lib/metadataTypes/MobileMessage.js +111 -13
- package/lib/metadataTypes/MobilePush.js +456 -0
- package/lib/metadataTypes/MobilePushApp.js +118 -0
- package/lib/metadataTypes/Query.js +11 -37
- package/lib/metadataTypes/Script.js +1 -20
- package/lib/metadataTypes/SenderProfile.js +27 -23
- package/lib/metadataTypes/TransactionalMessage.js +1 -1
- package/lib/metadataTypes/TransactionalSMS.js +1 -1
- package/lib/metadataTypes/TriggeredSend.js +1 -1
- package/lib/metadataTypes/User.js +27 -23
- package/lib/metadataTypes/Verification.js +2 -2
- package/lib/metadataTypes/definitions/Asset.definition.js +94 -61
- package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
- package/lib/metadataTypes/definitions/DomainVerification.definition.js +1 -0
- package/lib/metadataTypes/definitions/EmailSend.definition.js +2 -2
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +1 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +2 -3
- package/lib/metadataTypes/definitions/Journey.definition.js +7 -3
- package/lib/metadataTypes/definitions/MobileMessage.definition.js +6 -0
- package/lib/metadataTypes/definitions/MobilePush.definition.js +308 -0
- package/lib/metadataTypes/definitions/MobilePushApp.definition.js +121 -0
- package/lib/metadataTypes/definitions/Query.definition.js +1 -0
- package/lib/metadataTypes/definitions/Script.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +1 -1
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -1
- package/lib/metadataTypes/definitions/TriggeredSend.definition.js +2 -2
- package/lib/retrieveChangelog.js +28 -26
- package/lib/util/auth.js +127 -83
- package/lib/util/businessUnit.js +1 -1
- package/lib/util/cache.js +4 -6
- package/lib/util/cli.js +19 -19
- package/lib/util/config.js +22 -21
- package/lib/util/devops.js +162 -77
- package/lib/util/file.js +213 -199
- package/lib/util/git.js +278 -0
- package/lib/util/init.config.js +149 -169
- package/lib/util/init.git.js +37 -13
- package/lib/util/init.js +24 -15
- package/lib/util/init.npm.js +103 -120
- package/lib/util/isDeepEqual.js +48 -0
- package/lib/util/jsonToTable.js +76 -0
- package/lib/util/migrations/assetV10.js +367 -0
- package/lib/util/progress.js +609 -0
- package/lib/util/sessionStore.js +219 -0
- package/lib/util/topological-sort.js +114 -0
- package/lib/util/util.js +203 -118
- package/lib/util/validations.js +17 -11
- package/package.json +121 -126
- package/scripts/verify-packed-package.mjs +90 -0
- package/scripts/verify-progress-fixture.mjs +362 -0
- package/types/init-declarations.type-test.js +10 -0
- package/types/mcdev.d.js +18 -12
- package/.beautyamp.json +0 -13
- package/.bitbucket/PULL_REQUEST_TEMPLATE.md +0 -19
- package/.coverage-comment-template.svelte +0 -194
- package/.editorconfig +0 -9
- package/.fork/.prettierrc +0 -6
- package/.fork/custom-commands.json +0 -140
- package/.gitattributes +0 -7
- package/.github/ISSUE_TEMPLATE/bug.yml +0 -149
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/ISSUE_TEMPLATE/task.md +0 -10
- package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +0 -28
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -16
- package/.github/dependabot.yml +0 -23
- package/.github/pr-labeler.yml +0 -3
- package/.github/workflows/close_issues_on_merge.yml +0 -23
- package/.github/workflows/code-test.yml +0 -41
- package/.github/workflows/coverage-base-update.yml +0 -61
- package/.github/workflows/coverage-develop-branch.yml +0 -42
- package/.github/workflows/coverage-main-branch.yml +0 -42
- package/.github/workflows/coverage.yml +0 -82
- package/.github/workflows/npm-publish.yml +0 -36
- package/.github/workflows/pr-labeler.yml +0 -19
- package/.husky/commit-msg +0 -8
- package/.husky/post-checkout +0 -38
- package/.husky/post-merge +0 -24
- package/.husky/pre-commit +0 -8
- package/.issuetracker +0 -15
- package/.markdownlint.json +0 -16
- package/.markdownlint.md +0 -4
- package/.nycrc.json +0 -5
- package/.prettierignore +0 -3
- package/.prettierrc +0 -33
- package/.vscode/extensions.json +0 -28
- package/.vscode/launch.json +0 -15
- package/.vscode/settings.json +0 -92
- package/.vsls.json +0 -6
- package/CONTRIBUTING.md +0 -22
- package/boilerplate/files/.beautyamp.json +0 -13
- package/docs/dist/considerations.md +0 -66
- package/eslint.config.js +0 -144
- package/img/README.md/cdp-1.jpg +0 -0
- package/img/README.md/troubleshoot-authentication.jpg +0 -0
- package/img/README.md/troubleshoot-execution_policy-2.png +0 -0
- package/img/README.md/troubleshoot-execution_policy.jpg +0 -0
- package/img/README.md/troubleshoot-mac-sudo.png +0 -0
- package/img/README.md/troubleshoot-nodejs-index.jpg +0 -0
- package/img/README.md/troubleshoot-nodejs-permission.jpg +0 -0
- package/img/README.md/troubleshoot-ssh.jpg +0 -0
- package/img/README.md/vscode-eslint-allow_everywhere.jpg +0 -0
- package/img/README.md/vscode-recommendations-1.png +0 -0
- package/img/README.md/vscode-recommendations-2.png +0 -0
- package/prepare-release.js +0 -37
- package/test/general.test.js +0 -2709
- package/test/mockRoot/.mcdev-auth.json +0 -8
- package/test/mockRoot/.mcdev-validations.js +0 -93
- package/test/mockRoot/.mcdevrc.json +0 -182
- package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +0 -58
- package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +0 -20
- package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.sql +0 -4
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testBlocked_user.user-meta.json +0 -23
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testExisting_user.user-meta.json +0 -31
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testNew_user.user-meta.json +0 -27
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNamFail.asset-block-meta.html +0 -23
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNamFail.asset-block-meta.json +0 -41
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchName.asset-block-meta.html +0 -23
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchName.asset-block-meta.json +0 -41
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNameAdd.asset-block-meta.html +0 -23
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testExisting_asset_html-matchNameAdd.asset-block-meta.json +0 -41
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.html +0 -12
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.json +0 -39
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.html +0 -1
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.json +0 -39
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.html +0 -4
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.json +0 -39
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.html +0 -4
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.json +0 -39
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.html +0 -12
- package/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.json +0 -29
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/testNew_assetMessage.asset-message-meta.json +0 -435
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/views.html.content.asset-message-meta.html +0 -150
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/testNew_asset_templatebasedemail.asset-message-meta.json +0 -305
- package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/views.html.content.asset-message-meta.html +0 -150
- package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/content.asset-template-meta.html +0 -150
- package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/testNew_asset_template.asset-template-meta.json +0 -116
- package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +0 -52
- package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +0 -49
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +0 -59
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testNew_dataExtension.dataExtension-meta.json +0 -20
- package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +0 -35
- package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +0 -35
- package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testExisting_dataFilter.dataFilter-meta.json +0 -19
- package/test/mockRoot/deploy/testInstance/testBU/dataFilter/testNew_dataFilter.dataFilter-meta.json +0 -19
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld.New@accenture.com.domainVerification-meta.json +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld@accenture.com.domainVerification-meta.json +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/domainVerification/mcdev.accenture.com.domainVerification-meta.json +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/emailSend/testExisting_emailSend.emailSend-meta.json +0 -36
- package/test/mockRoot/deploy/testInstance/testBU/emailSend/testNew_emailSend.emailSend-meta.json +0 -36
- package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +0 -201
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +0 -233
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +0 -194
- package/test/mockRoot/deploy/testInstance/testBU/fileLocation/ExactTarget Enhanced FTP.fileLocation-meta.json +0 -5
- package/test/mockRoot/deploy/testInstance/testBU/fileLocation/testExisting_fileLocation_aws.fileLocation-meta.json +0 -14
- package/test/mockRoot/deploy/testInstance/testBU/fileLocation/testExisting_fileLocation_exsftp.fileLocation-meta.json +0 -12
- package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +0 -17
- package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +0 -17
- package/test/mockRoot/deploy/testInstance/testBU/filter/testExisting_filter.filter-meta.json +0 -10
- package/test/mockRoot/deploy/testInstance/testBU/filter/testNew_filter.filter-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +0 -36
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +0 -34
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Multistep.journey-meta.json +0 -418
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Quicksend.journey-meta.json +0 -232
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_updatecontact.journey-meta.json +0 -108
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_temail.journey-meta.json +0 -212
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_temail_notPublished.journey-meta.json +0 -217
- package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_temail_notPublished.journey-meta.json +0 -213
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.amp +0 -2
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +0 -8
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.amp +0 -2
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +0 -8
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.amp +0 -1
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +0 -59
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.amp +0 -1
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +0 -58
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.sql +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.sql +0 -4
- package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +0 -1
- package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +0 -6
- package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +0 -1
- package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testExisting_sendClassification.sendClassification-meta.json +0 -8
- package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testNew_sendClassification.sendClassification-meta.json +0 -8
- package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +0 -15
- package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +0 -15
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +0 -20
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +0 -19
- package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testExisting_tpush.transactionalPush-meta.json +0 -16
- package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testNew_tpush.transactionalPush-meta.json +0 -16
- package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.amp +0 -4
- package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.json +0 -14
- package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.amp +0 -4
- package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.json +0 -14
- package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +0 -27
- package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +0 -27
- package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_automation__s1.7.verification-meta.json +0 -11
- package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_automation__s1.7.verification-meta.json +0 -11
- package/test/resourceFactory.js +0 -494
- package/test/resources/1111111/accountUser/configure-response.xml +0 -70
- package/test/resources/1111111/accountUser/create-response.xml +0 -97
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml +0 -27
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml +0 -156
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml +0 -156
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml +0 -87
- package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml +0 -156
- package/test/resources/1111111/accountUser/update-response.xml +0 -111
- package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +0 -60
- package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml +0 -77
- package/test/resources/1111111/automation/v1/queries/get-response.json +0 -6
- package/test/resources/1111111/automation/v1/queries/post-response.json +0 -18
- package/test/resources/1111111/businessUnit/retrieve-ID=1111111-QAA-response.xml +0 -33
- package/test/resources/1111111/data/v1/customobjectdata/key/testExisting_dataExtensionShared/rowset/get-response.json +0 -13
- package/test/resources/1111111/dataExtension/create-expected.json +0 -20
- package/test/resources/1111111/dataExtension/create-response.xml +0 -59
- package/test/resources/1111111/dataExtension/retrieve-expected.json +0 -53
- package/test/resources/1111111/dataExtension/retrieve-expected.md +0 -23
- package/test/resources/1111111/dataExtension/retrieve-response.xml +0 -52
- package/test/resources/1111111/dataExtension/update-expected.json +0 -55
- package/test/resources/1111111/dataExtension/update-response.xml +0 -59
- package/test/resources/1111111/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtensionShared].[TriggerUpdate_randomNumber_]-response.xml +0 -45
- package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +0 -98
- package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionSharedORDataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +0 -98
- package/test/resources/1111111/dataExtensionField/retrieve-response.xml +0 -98
- package/test/resources/1111111/dataExtensionTemplate/retrieve-response.xml +0 -303
- package/test/resources/1111111/dataFolder/retrieve-ContentType=queryactivity-response.xml +0 -48
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -26
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -387
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -364
- package/test/resources/1111111/dataFolder/retrieve-response-.xml +0 -387
- package/test/resources/1111111/list/retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml +0 -39
- package/test/resources/1111111/platform/v1/setup/quickflow/data/get-response.json +0 -455
- package/test/resources/1111111/query/patch_keySuffix-expected.json +0 -11
- package/test/resources/1111111/query/patch_keySuffix-expected.sql +0 -4
- package/test/resources/1111111/role/retrieve-IsPrivate=false-response.xml +0 -76
- package/test/resources/1111111/user/build-expected.json +0 -16
- package/test/resources/1111111/user/create-expected.json +0 -21
- package/test/resources/1111111/user/retrieve-expected.json +0 -24
- package/test/resources/1111111/user/retrieve-expected.md +0 -21
- package/test/resources/1111111/user/template-expected.json +0 -16
- package/test/resources/1111111/user/update-expected.json +0 -21
- package/test/resources/9999999/accountUser/retrieve-response.xml +0 -104
- package/test/resources/9999999/asset/build-asset_htmlblock-expected.html +0 -23
- package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +0 -29
- package/test/resources/9999999/asset/build-templatebasedemail-expected.json +0 -145
- package/test/resources/9999999/asset/build-templatebasedemail-html-expected.html +0 -20
- package/test/resources/9999999/asset/build-templatebasedemail-preheader-expected.amp +0 -1
- package/test/resources/9999999/asset/create-expected.json +0 -18
- package/test/resources/9999999/asset/resolveId-1234-notFound-expected.json +0 -1
- package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +0 -8
- package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +0 -8
- package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +0 -148
- package/test/resources/9999999/asset/retrieve-templatebasedemail-html-expected.html +0 -20
- package/test/resources/9999999/asset/retrieve-templatebasedemail-preheader-expected.amp +0 -1
- package/test/resources/9999999/asset/template-emailTemplate-expected.json +0 -20
- package/test/resources/9999999/asset/template-templatebasedemail-expected.json +0 -145
- package/test/resources/9999999/asset/template-templatebasedemail-html-expected.html +0 -20
- package/test/resources/9999999/asset/template-templatebasedemail-preheader-expected.amp +0 -1
- package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +0 -29
- package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +0 -23
- package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.json +0 -41
- package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-id-expected.html +0 -33
- package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +0 -33
- package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-name-expected.html +0 -35
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +0 -4
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +0 -4
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +0 -4
- package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-id-expected.amp +0 -4
- package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +0 -4
- package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-name-expected.amp +0 -4
- package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.js +0 -1
- package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.json +0 -45
- package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +0 -45
- package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.jsonc +0 -1
- package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.json +0 -44
- package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +0 -1
- package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +0 -41
- package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +0 -40
- package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +0 -41
- package/test/resources/9999999/asset/v1/content/assets/1209971/get-response.json +0 -61
- package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/1295064/patch-response.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/1295067/get-response.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/16992/get-response.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/5286/get-response.json +0 -48
- package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +0 -273
- package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +0 -185
- package/test/resources/9999999/asset/v1/content/assets/9451/get-response.json +0 -61
- package/test/resources/9999999/asset/v1/content/assets/9456/get-response.json +0 -56
- package/test/resources/9999999/asset/v1/content/assets/9458/get-response.json +0 -56
- package/test/resources/9999999/asset/v1/content/assets/9460/get-response.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/9463/get-response.json +0 -61
- package/test/resources/9999999/asset/v1/content/assets/9465/get-response.json +0 -54
- package/test/resources/9999999/asset/v1/content/assets/950143/delete-response.txt +0 -1
- package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +0 -97
- package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +0 -105
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_assetMessage.json +0 -441
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_htmlblock.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_template.json +0 -147
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_templatebasedemail.json +0 -322
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_notexisting.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_preexisting.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/post-response-key=test_slash.json +0 -60
- package/test/resources/9999999/asset/v1/content/assets/post-response.json +0 -59
- package/test/resources/9999999/asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json +0 -198
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,205,206,230,232.json +0 -129
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,215,216,217,218,219,220,221,222,223,224.json +0 -257
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,214,215,216,217,218,219,220,221,222.json +0 -377
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,5,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,217,218.json +0 -460
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,5,205,206,207,208,209,230,232.json +0 -229
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN14,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192.json +0 -7
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN15,193,194.json +0 -7
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN215,216,217,218,219,220,221,222,223,224,225,226,227,228.json +0 -7
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232,240,241,242,243,244,245.json +0 -168
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,230,232.json +0 -32
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN225,226,227,228,230,232.json +0 -7
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN240,241,242,243,244,245.json +0 -144
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN246,247,248,249.json +0 -132
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213.json +0 -160
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN4,214.json +0 -35
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN5,207,208,209.json +0 -108
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-customerKey=testExisting_asset_htmlblock.json +0 -46
- package/test/resources/9999999/asset/v1/content/categories/post-response.json +0 -9
- package/test/resources/9999999/asset-deploy/block/testNew_asset_badExtension.bad-type-extension.json +0 -39
- package/test/resources/9999999/asset-deploy/block/testNew_asset_badName_bad.asset-block-meta.json +0 -39
- package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.html +0 -1
- package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.json +0 -39
- package/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.html +0 -12
- package/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.json +0 -29
- package/test/resources/9999999/attributeGroup/retrieve-expected.json +0 -25
- package/test/resources/9999999/attributeSet/retrieve-expected.json +0 -143
- package/test/resources/9999999/automation/build-expected.json +0 -61
- package/test/resources/9999999/automation/clone-expected.json +0 -61
- package/test/resources/9999999/automation/create-callout-expected.json +0 -66
- package/test/resources/9999999/automation/create-expected.json +0 -50
- package/test/resources/9999999/automation/create-testNew_automation-expected.md +0 -29
- package/test/resources/9999999/automation/delete-response.xml +0 -40
- package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +0 -44
- package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +0 -44
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -42
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +0 -42
- package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +0 -42
- package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -42
- package/test/resources/9999999/automation/retrieve-expected.json +0 -67
- package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +0 -31
- package/test/resources/9999999/automation/retrieve-wait-expected.json +0 -81
- package/test/resources/9999999/automation/retrieve-wait-expected.md +0 -18
- package/test/resources/9999999/automation/template-expected.json +0 -61
- package/test/resources/9999999/automation/update-callout-expected.json +0 -68
- package/test/resources/9999999/automation/update-expected.json +0 -67
- package/test/resources/9999999/automation/update-testExisting_automation-expected.md +0 -31
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +0 -92
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/patch-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +0 -86
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +0 -86
- package/test/resources/9999999/automation/v1/automations/0fc2ac96-14ba-495a-8db9-3ddd4f8ac444-wait/get-response.json +0 -114
- package/test/resources/9999999/automation/v1/automations/8f82c2a7-0bae-45a9-bdee-e631ab25c0d5/get-response.json +0 -44
- package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +0 -85
- package/test/resources/9999999/automation/v1/automations/post-response.json +0 -93
- package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/delete-response.txt +0 -1
- package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/get-response.json +0 -38
- package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +0 -38
- package/test/resources/9999999/automation/v1/dataextracts/get-response.json +0 -20
- package/test/resources/9999999/automation/v1/dataextracts/post-response.json +0 -38
- package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +0 -50
- package/test/resources/9999999/automation/v1/dataverifications/post-response.json +0 -12
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/delete-response.json +0 -0
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/get-response.json +0 -12
- package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/patch-response.json +0 -12
- package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/delete-response.json +0 -1
- package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/get-response.json +0 -18
- package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +0 -18
- package/test/resources/9999999/automation/v1/filetransfers/get-response.json +0 -15
- package/test/resources/9999999/automation/v1/filetransfers/post-response.json +0 -18
- package/test/resources/9999999/automation/v1/filters/a0f1a1bc-4ea1-44b3-8fe1-ce40ef35c1c0/patch-response.json +0 -18
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/delete-response.txt +0 -0
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/get-response.json +0 -15
- package/test/resources/9999999/automation/v1/filters/f018f237-f7ef-40b0-afc8-39ea2e5dcca4/patch-response.json +0 -15
- package/test/resources/9999999/automation/v1/filters/get-response.json +0 -22
- package/test/resources/9999999/automation/v1/ftplocations/get-response.json +0 -43
- package/test/resources/9999999/automation/v1/imports/1ebf557b-372e-eb11-b81b-48df37d1dbd7/get-response.json +0 -78
- package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/delete-response.txt +0 -0
- package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/get-response.json +0 -35
- package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +0 -35
- package/test/resources/9999999/automation/v1/imports/d2474efb-a449-ef11-b876-f40343c95928/get-response.json +0 -37
- package/test/resources/9999999/automation/v1/imports/get-response.json +0 -146
- package/test/resources/9999999/automation/v1/imports/post-response.json +0 -30
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +0 -1
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/actions/start/post-response.txt +0 -1
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/delete-response.json +0 -1
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +0 -17
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +0 -18
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +0 -17
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +0 -18
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/get-response.json +0 -17
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/patch-response.json +0 -18
- package/test/resources/9999999/automation/v1/queries/abcde-607c-4940-afef-437965094dat/get-response.json +0 -17
- package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +0 -24
- package/test/resources/9999999/automation/v1/queries/get-response.json +0 -75
- package/test/resources/9999999/automation/v1/queries/post-response.json +0 -18
- package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/delete-response.txt +0 -1
- package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/get-response.json +0 -10
- package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +0 -10
- package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +0 -17
- package/test/resources/9999999/automation/v1/scripts/get-response.json +0 -57
- package/test/resources/9999999/automation/v1/scripts/post-response.json +0 -10
- package/test/resources/9999999/data/v1/customobjectdata/key/testExisting_dataExtension/rowset/get-response.json +0 -13
- package/test/resources/9999999/data/v1/filetransferlocation/Salesforce%20Objects%20%26%20Reports/get-response.json +0 -4
- package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_aws/patch-response.json +0 -18
- package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_azure/delete-response.json +0 -4
- package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_azure/get-response.json +0 -18
- package/test/resources/9999999/data/v1/filetransferlocation/testExisting_fileLocation_exsftp/patch-response.json +0 -16
- package/test/resources/9999999/data/v1/filetransferlocations/get-response.json +0 -59
- package/test/resources/9999999/dataExtension/build-expected.json +0 -66
- package/test/resources/9999999/dataExtension/create-expected.json +0 -20
- package/test/resources/9999999/dataExtension/create-response.xml +0 -59
- package/test/resources/9999999/dataExtension/delete-response.xml +0 -42
- package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testExisting_dataExtension-response.xml +0 -52
- package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +0 -50
- package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +0 -52
- package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +0 -50
- package/test/resources/9999999/dataExtension/retrieve-expected.json +0 -66
- package/test/resources/9999999/dataExtension/retrieve-expected.md +0 -25
- package/test/resources/9999999/dataExtension/retrieve-response.xml +0 -224
- package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +0 -219
- package/test/resources/9999999/dataExtension/template-expected.json +0 -66
- package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +0 -55
- package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +0 -1
- package/test/resources/9999999/dataExtension/update-expected.json +0 -72
- package/test/resources/9999999/dataExtension/update-response.xml +0 -59
- package/test/resources/9999999/dataExtension-deploy/testBlacklist_dataExtension.dataExtension-meta.json +0 -20
- package/test/resources/9999999/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtension].[LastName]-response.xml +0 -44
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +0 -133
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +0 -99
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +0 -461
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +0 -133
- package/test/resources/9999999/dataExtensionField/retrieve-Name=FirstName-response.xml +0 -78
- package/test/resources/9999999/dataExtensionField/retrieve-Name=LastName-response.xml +0 -78
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +0 -1075
- package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +0 -303
- package/test/resources/9999999/dataExtract/build-expected.json +0 -35
- package/test/resources/9999999/dataExtract/get-expected.json +0 -39
- package/test/resources/9999999/dataExtract/patch-expected.json +0 -39
- package/test/resources/9999999/dataExtract/post-expected.json +0 -37
- package/test/resources/9999999/dataExtract/template-expected.json +0 -35
- package/test/resources/9999999/dataFilter/build-expected.json +0 -19
- package/test/resources/9999999/dataFilter/get-expected.json +0 -23
- package/test/resources/9999999/dataFilter/patch-expected.json +0 -20
- package/test/resources/9999999/dataFilter/post-expected.json +0 -20
- package/test/resources/9999999/dataFilter/template-expected.json +0 -19
- package/test/resources/9999999/dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml +0 -136
- package/test/resources/9999999/dataFolder/create-ContentType=asset,Name=testFolder_samePath,ParentFolderID=89397-response.xml +0 -33
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=my,ParentFolderID=2-response.xml +0 -33
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=path,ParentFolderID=862002-response.xml +0 -33
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=sub,ParentFolderID=862001-response.xml +0 -33
- package/test/resources/9999999/dataFolder/create-ContentType=dataextension,Name=subpath,ParentFolderID=862003-response.xml +0 -33
- package/test/resources/9999999/dataFolder/create-response.xml +0 -33
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +0 -70
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +0 -70
- package/test/resources/9999999/dataFolder/retrieve-ContentType=automations-response.xml +0 -48
- package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +0 -48
- package/test/resources/9999999/dataFolder/retrieve-ContentType=queryactivity-response.xml +0 -48
- package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +0 -48
- package/test/resources/9999999/dataFolder/retrieve-ContentType=userinitiatedsends-response.xml +0 -48
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,filteract,filterdef,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml +0 -765
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml +0 -562
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml +0 -335
- 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 +0 -519
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -181
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,journey-response.xml +0 -136
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,ssjsactivity-response.xml +0 -136
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml +0 -114
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -115
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +0 -70
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-response.xml +0 -70
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -431
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +0 -70
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINcontextual_suppression_list,hidden,list,mysubs,publication,suppression_list,triggered_send,triggered_send_journeybuilder-response.xml +0 -385
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINcontextual_suppression_list,list,mysubs,publication,suppression_list-response.xml +0 -136
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -138
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -117
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -117
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilteractivity,hidden-response.xml +0 -139
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINfilterdefinition,hidden-response.xml +0 -116
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +0 -46
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,triggered_send,triggered_send_journeybuilder-response.xml +0 -276
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +0 -251
- package/test/resources/9999999/dataFolder/retrieve-QAA-response.xml +0 -387
- package/test/resources/9999999/dataFolder/retrieve-response.xml +0 -542
- package/test/resources/9999999/dataFolder/retrieve-samePathOtherBU-response.xml +0 -564
- package/test/resources/9999999/dataFolder/update-response.xml +0 -31
- package/test/resources/9999999/deliveryProfile/get-expected.json +0 -7
- package/test/resources/9999999/domainVerification/create-expected.json +0 -3
- package/test/resources/9999999/domainVerification/get-sap-expected.json +0 -6
- package/test/resources/9999999/domainVerification/update-expected.json +0 -6
- package/test/resources/9999999/email/retrieve-response.xml +0 -203
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=290937,name=my,catType=automations.json +0 -7
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862100,name=sub,catType=automations.json +0 -7
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862101,name=path,catType=automations.json +0 -7
- package/test/resources/9999999/email/v1/category/post-response-parentCatId=862102,name=subpath,catType=automations.json +0 -7
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/delete-response.txt +0 -1
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/get-response.json +0 -19
- package/test/resources/9999999/email/v1/filters/filterdefinition/10ef27dd-4be8-4bf6-970a-8acf8e281e55/patch-response.json +0 -15
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/5318/get-response.json +0 -27
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/8502/get-response.json +0 -7
- package/test/resources/9999999/email/v1/filters/filterdefinition/category/8503/get-response.json +0 -7
- package/test/resources/9999999/email/v1/filters/filterdefinition/post-response.json +0 -15
- package/test/resources/9999999/emailSend/build-expected.json +0 -43
- package/test/resources/9999999/emailSend/get-expected.json +0 -43
- package/test/resources/9999999/emailSend/patch-expected.json +0 -41
- package/test/resources/9999999/emailSend/post-expected.json +0 -41
- package/test/resources/9999999/emailSend/template-expected.json +0 -43
- package/test/resources/9999999/emailSendDefinition/create-response.xml +0 -98
- package/test/resources/9999999/emailSendDefinition/delete-response.xml +0 -36
- package/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml +0 -95
- package/test/resources/9999999/emailSendDefinition/update-response.xml +0 -97
- package/test/resources/9999999/event/build-expected.json +0 -226
- package/test/resources/9999999/event/get-automation-expected.json +0 -41
- package/test/resources/9999999/event/get-expected.json +0 -232
- package/test/resources/9999999/event/get-published-expected.json +0 -28
- package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +0 -231
- package/test/resources/9999999/event/post_withExistingDE-expected.json +0 -21
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +0 -202
- package/test/resources/9999999/event/post_withSchema-expected.json +0 -232
- package/test/resources/9999999/event/put-callout-expected.json +0 -207
- package/test/resources/9999999/event/put-expected.json +0 -232
- package/test/resources/9999999/event/template-expected.json +0 -226
- package/test/resources/9999999/event-deploy/testNew_event_badExtension.bad-type-extension.json +0 -200
- package/test/resources/9999999/event-deploy/testNew_event_badName_bad.event-meta.json +0 -200
- package/test/resources/9999999/eventDefinition/get-expected.json +0 -34
- package/test/resources/9999999/fileLocation/build-expected.json +0 -14
- package/test/resources/9999999/fileLocation/get-aws-expected.json +0 -14
- package/test/resources/9999999/fileLocation/get-azure-expected.json +0 -14
- package/test/resources/9999999/fileLocation/get-eftp-expected.json +0 -5
- package/test/resources/9999999/fileLocation/get-exsftp-expected.json +0 -12
- package/test/resources/9999999/fileLocation/get-gcp-expected.json +0 -10
- package/test/resources/9999999/fileLocation/get-sor-expected.json +0 -5
- package/test/resources/9999999/fileLocation/patch-aws-expected.json +0 -14
- package/test/resources/9999999/fileLocation/patch-exsftp-expected.json +0 -12
- package/test/resources/9999999/fileLocation/template-expected.json +0 -14
- package/test/resources/9999999/fileTransfer/build-expected.json +0 -15
- package/test/resources/9999999/fileTransfer/get-expected.json +0 -17
- package/test/resources/9999999/fileTransfer/patch-expected.json +0 -17
- package/test/resources/9999999/fileTransfer/post-expected.json +0 -17
- package/test/resources/9999999/fileTransfer/template-expected.json +0 -15
- package/test/resources/9999999/filter/build-expected.json +0 -10
- package/test/resources/9999999/filter/get-expected.json +0 -11
- package/test/resources/9999999/filter/patch-expected.json +0 -11
- package/test/resources/9999999/filter/post-expected.json +0 -11
- package/test/resources/9999999/filter/template-expected.json +0 -10
- package/test/resources/9999999/filterActivity/create-response.xml +0 -46
- package/test/resources/9999999/filterActivity/retrieve-CustomerKey=testExisting_filter-response.xml +0 -30
- package/test/resources/9999999/filterDefinition/retrieve-CustomerKey=testExisting_dataFilter-response.xml +0 -30
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path/subpath.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub/path.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/Data Extensions/my/sub.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/Data Extensions/my.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/Data Extensions/testExisting_folder.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/my automations/my/sub/path/subpath.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/my automations/my/sub/path.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/my automations/my/sub.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy/my automations/my.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy-samepath/Content Builder/testFolder_samePath.folder-meta.json +0 -9
- package/test/resources/9999999/folder-deploy-slash/Content Builder/Headers%2FFolders.folder-meta.json +0 -9
- package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +0 -628
- package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +0 -20194
- package/test/resources/9999999/importDefinition/retrieve-CustomerKey=testExisting_importFile-response.xml +0 -30
- package/test/resources/9999999/importDefinition/retrieve-Name=testExisting_importFile-response.xml +0 -30
- package/test/resources/9999999/importFile/build-expected.json +0 -30
- package/test/resources/9999999/importFile/get-dataImport-expected.json +0 -36
- package/test/resources/9999999/importFile/get-expected.json +0 -36
- package/test/resources/9999999/importFile/get-sms-expected.json +0 -80
- package/test/resources/9999999/importFile/patch-expected.json +0 -32
- package/test/resources/9999999/importFile/post-expected.json +0 -30
- package/test/resources/9999999/importFile/template-expected.json +0 -30
- package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +0 -426
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_DEAudience-2e3c73b6-48cc-2ec0-5522-48636e1a236e/get-response.json +0 -39
- 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 +0 -242
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event_automation/get-response.json +0 -52
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +0 -28
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +0 -243
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=1.json +0 -86
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=2.json +0 -101
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=3.json +0 -86
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response-versionNumber=1.txt +0 -1
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +0 -1
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=1.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=3.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/delete-response.txt +0 -1
- package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +0 -253
- package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=1.json +0 -38
- package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=2.json +0 -53
- package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/delete-response.txt +0 -1
- package/test/resources/9999999/interaction/v1/interactions/get-response-status=Published.json +0 -40
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +0 -211
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response-versionNumber=1.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/put-response.json +0 -461
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response-versionNumber=1.json +0 -253
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +0 -253
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/get-response.json +0 -119
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_updatecontact/put-response.json +0 -106
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response-versionNumber=1.json +0 -219
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response.json +0 -219
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +0 -219
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response.json +0 -219
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response-versionNumber=1.json +0 -226
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response.json +0 -226
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/put-response.json +0 -226
- package/test/resources/9999999/interaction/v1/interactions/key_testNew_temail_notPublished/get-response.json +0 -218
- package/test/resources/9999999/interaction/v1/interactions/post-response.json +0 -216
- package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=1.json +0 -4
- package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=3.json +0 -4
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +0 -34
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +0 -5
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +0 -36
- package/test/resources/9999999/interaction/v1/interactions/transactional/create/post-response.json +0 -3
- package/test/resources/9999999/interaction/v1/interactions/transactional/pause/post-response.json +0 -3
- package/test/resources/9999999/interaction/v1/interactions/transactional/resume/post-response.json +0 -3
- package/test/resources/9999999/interaction/v1/interactions/validateAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response.json +0 -4
- package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +0 -34
- package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +0 -5
- package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +0 -36
- package/test/resources/9999999/interaction/v1/interactions/validateStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response.json +0 -0
- package/test/resources/9999999/journey/build-expected.json +0 -229
- package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +0 -216
- package/test/resources/9999999/journey/get-multistep-expected.json +0 -414
- package/test/resources/9999999/journey/get-published-expected.json +0 -216
- package/test/resources/9999999/journey/get-quicksend-expected.json +0 -234
- package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +0 -232
- package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +0 -232
- package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +0 -236
- package/test/resources/9999999/journey/get-transactionalEmail-expected.json +0 -211
- package/test/resources/9999999/journey/get-updatecontact-expected.json +0 -108
- package/test/resources/9999999/journey/post-expected.json +0 -264
- package/test/resources/9999999/journey/publish-callout-expected.json +0 -1
- package/test/resources/9999999/journey/put-expected.json +0 -576
- package/test/resources/9999999/journey/put-updatecontact-expected.json +0 -108
- package/test/resources/9999999/journey/template-expected.json +0 -229
- package/test/resources/9999999/journey/validate-callout-expected.json +0 -1
- package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -21
- package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/post-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +0 -3
- package/test/resources/9999999/legacy/v1/beta/automations/notifications/bHF6Q0Q3b1VXa21OdVQzZFQ0ckVSQToyNTow/get-response.json +0 -3
- package/test/resources/9999999/legacy/v1/beta/automations/notifications/cDhLQ2o2NExxVVc5N3VZeHF5WEExUToyNTow/get-response.json +0 -3
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/NewRkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -29
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +0 -50
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +0 -51
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/bHF6Q0Q3b1VXa21OdVQzZFQ0ckVSQToyNTow/get-response.json +0 -216
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/cDhLQ2o2NExxVVc5N3VZeHF5WEExUToyNTow/get-response.json +0 -79
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +0 -286
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-pauseSchedule.json +0 -1
- package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-schedule.json +0 -1
- package/test/resources/9999999/legacy/v1/beta/messaging/deliverypolicy/get-response.json +0 -15
- package/test/resources/9999999/legacy/v1/beta/mobile/code/get-response.json +0 -32
- package/test/resources/9999999/legacy/v1/beta/mobile/imports/get-response.json +0 -112
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +0 -42
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/cTVJaG5oSDJPVUNHcUh6Z3pQT2tVdzo4Njow/delete-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +0 -47
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/post-response.json +0 -3
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/delete-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +0 -106
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/post-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +0 -127
- package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +0 -129
- package/test/resources/9999999/legacy/v1/beta/mobile/message/post-response.json +0 -3
- package/test/resources/9999999/legacy/v1/beta/object/NWQwdnhEU3dFZWVBekJRQzdISWl0QTo0NTow/get-response.json +0 -12
- package/test/resources/9999999/legacy/v1/beta2/data/campaign/get-response.json +0 -29
- package/test/resources/9999999/list/retrieve-response.xml +0 -91
- package/test/resources/9999999/messaging/v1/domainverification/delete/post-response.txt +0 -1
- package/test/resources/9999999/messaging/v1/domainverification/get-response.json +0 -52
- package/test/resources/9999999/messaging/v1/domainverification/post-response.txt +0 -1
- package/test/resources/9999999/messaging/v1/domainverification/update/post-response.txt +0 -1
- package/test/resources/9999999/messaging/v1/email/definitions/get-response.json +0 -29
- package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +0 -19
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/delete-response.json +0 -6
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +0 -26
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +0 -26
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail_notPublished/get-response.json +0 -26
- package/test/resources/9999999/messaging/v1/email/definitions/testNew_temail_notPublished/get-response.json +0 -26
- package/test/resources/9999999/messaging/v1/push/definitions/get-response.json +0 -15
- package/test/resources/9999999/messaging/v1/push/definitions/post-response.json +0 -13
- package/test/resources/9999999/messaging/v1/push/definitions/testExisting_tpush/get-response.json +0 -13
- package/test/resources/9999999/messaging/v1/push/definitions/testExisting_tpush/patch-response.json +0 -13
- package/test/resources/9999999/messaging/v1/sms/definitions/get-response.json +0 -15
- package/test/resources/9999999/messaging/v1/sms/definitions/post-response.json +0 -19
- package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/get-response.json +0 -20
- package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/patch-response.json +0 -20
- package/test/resources/9999999/mobileKeyword/build-expected.amp +0 -6
- package/test/resources/9999999/mobileKeyword/build-expected.json +0 -7
- package/test/resources/9999999/mobileKeyword/get-expected.amp +0 -6
- package/test/resources/9999999/mobileKeyword/get-expected.json +0 -13
- package/test/resources/9999999/mobileKeyword/post-create-expected.amp +0 -2
- package/test/resources/9999999/mobileKeyword/post-create-expected.json +0 -15
- package/test/resources/9999999/mobileKeyword/template-expected.amp +0 -6
- package/test/resources/9999999/mobileKeyword/template-expected.json +0 -7
- package/test/resources/9999999/mobileMessage/build-expected.amp +0 -6
- package/test/resources/9999999/mobileMessage/build-expected.json +0 -57
- package/test/resources/9999999/mobileMessage/get-expected.amp +0 -6
- package/test/resources/9999999/mobileMessage/get-expected.json +0 -58
- package/test/resources/9999999/mobileMessage/post-create-expected.amp +0 -1
- package/test/resources/9999999/mobileMessage/post-create-expected.json +0 -61
- package/test/resources/9999999/mobileMessage/post-update-expected.amp +0 -1
- package/test/resources/9999999/mobileMessage/post-update-expected.json +0 -58
- package/test/resources/9999999/mobileMessage/template-expected.amp +0 -6
- package/test/resources/9999999/mobileMessage/template-expected.json +0 -57
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation-response.xml +0 -30
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +0 -32
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +0 -32
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +0 -32
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +0 -32
- package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +0 -30
- package/test/resources/9999999/program/retrieve-CustomerKey=testNew_automation-response.xml +0 -30
- package/test/resources/9999999/program/retrieve-Name=testExisting_automation-response.xml +0 -31
- package/test/resources/9999999/program/retrieve-response.xml +0 -62
- package/test/resources/9999999/query/build-expected.json +0 -8
- package/test/resources/9999999/query/build-expected.sql +0 -7
- package/test/resources/9999999/query/clone-expected.json +0 -8
- package/test/resources/9999999/query/clone-expected.sql +0 -7
- package/test/resources/9999999/query/get-expected.json +0 -11
- package/test/resources/9999999/query/get-expected.sql +0 -7
- package/test/resources/9999999/query/get2-expected.json +0 -11
- package/test/resources/9999999/query/patch-expected.json +0 -11
- package/test/resources/9999999/query/patch-expected.sql +0 -6
- package/test/resources/9999999/query/patch_fixKeys-expected.json +0 -11
- package/test/resources/9999999/query/patch_fixKeys-expected.sql +0 -6
- package/test/resources/9999999/query/patch_fixKeysSuffix-expected.json +0 -11
- package/test/resources/9999999/query/patch_fixKeysSuffix-expected.sql +0 -6
- package/test/resources/9999999/query/post-expected.json +0 -11
- package/test/resources/9999999/query/post-expected.sql +0 -4
- package/test/resources/9999999/query/template-expected.json +0 -8
- package/test/resources/9999999/query/template-expected.sql +0 -7
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml +0 -26
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query2ANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysSuffixANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +0 -30
- package/test/resources/9999999/script/build-expected.json +0 -6
- package/test/resources/9999999/script/build-expected.ssjs +0 -1
- package/test/resources/9999999/script/get-expected.json +0 -8
- package/test/resources/9999999/script/get-expected.ssjs +0 -1
- package/test/resources/9999999/script/get_ampincluded-expected.html +0 -5
- package/test/resources/9999999/script/get_ampincluded-expected.json +0 -8
- package/test/resources/9999999/script/get_ampincluded-rcb-id-expected.html +0 -5
- package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +0 -5
- package/test/resources/9999999/script/get_ampincluded-rcb-name-expected.html +0 -5
- package/test/resources/9999999/script/get_ampscript-expected.html +0 -11
- package/test/resources/9999999/script/get_ampscript-expected.json +0 -8
- package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +0 -9
- package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +0 -9
- package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +0 -13
- package/test/resources/9999999/script/get_mixed-expected.html +0 -12
- package/test/resources/9999999/script/get_mixed-expected.json +0 -8
- package/test/resources/9999999/script/get_mixed-rcb-id-expected.html +0 -12
- package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +0 -12
- package/test/resources/9999999/script/get_mixed-rcb-name-expected.html +0 -14
- package/test/resources/9999999/script/get_noScriptTag-expected.html +0 -1
- package/test/resources/9999999/script/get_noScriptTag-expected.json +0 -8
- package/test/resources/9999999/script/patch-expected.json +0 -8
- package/test/resources/9999999/script/patch-expected.ssjs +0 -2
- package/test/resources/9999999/script/post-expected.json +0 -8
- package/test/resources/9999999/script/post-expected.ssjs +0 -1
- package/test/resources/9999999/script/template-expected.json +0 -6
- package/test/resources/9999999/script/template-expected.ssjs +0 -1
- package/test/resources/9999999/sendClassification/build-expected.json +0 -8
- package/test/resources/9999999/sendClassification/create-response.xml +0 -51
- package/test/resources/9999999/sendClassification/delete-response.xml +0 -36
- package/test/resources/9999999/sendClassification/get-expected.json +0 -10
- package/test/resources/9999999/sendClassification/patch-expected.json +0 -10
- package/test/resources/9999999/sendClassification/post-expected.json +0 -8
- package/test/resources/9999999/sendClassification/retrieve-response.xml +0 -86
- package/test/resources/9999999/sendClassification/template-expected.json +0 -8
- package/test/resources/9999999/sendClassification/update-response.xml +0 -49
- package/test/resources/9999999/senderProfile/build-expected.json +0 -15
- package/test/resources/9999999/senderProfile/create-response.xml +0 -50
- package/test/resources/9999999/senderProfile/delete-response.xml +0 -36
- package/test/resources/9999999/senderProfile/get-expected.json +0 -19
- package/test/resources/9999999/senderProfile/get-rcb-id-expected.json +0 -19
- package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +0 -19
- package/test/resources/9999999/senderProfile/get-rcb-name-expected.json +0 -19
- package/test/resources/9999999/senderProfile/patch-expected.json +0 -19
- package/test/resources/9999999/senderProfile/post-expected.json +0 -15
- package/test/resources/9999999/senderProfile/retrieve-CustomerKey=Default-response.xml +0 -49
- package/test/resources/9999999/senderProfile/retrieve-CustomerKey=wrong-key-response.xml +0 -26
- package/test/resources/9999999/senderProfile/retrieve-response.xml +0 -95
- package/test/resources/9999999/senderProfile/template-expected.json +0 -15
- package/test/resources/9999999/senderProfile/update-response.xml +0 -48
- package/test/resources/9999999/transactionalEmail/build-expected.json +0 -18
- package/test/resources/9999999/transactionalEmail/create-publish-expected.json +0 -20
- package/test/resources/9999999/transactionalEmail/get-expected.json +0 -20
- package/test/resources/9999999/transactionalEmail/get-published-expected.json +0 -20
- package/test/resources/9999999/transactionalEmail/patch-expected.json +0 -20
- package/test/resources/9999999/transactionalEmail/post-expected.json +0 -20
- package/test/resources/9999999/transactionalEmail/template-expected.json +0 -18
- package/test/resources/9999999/transactionalPush/build-expected.json +0 -8
- package/test/resources/9999999/transactionalPush/get-expected.json +0 -11
- package/test/resources/9999999/transactionalPush/patch-expected.json +0 -14
- package/test/resources/9999999/transactionalPush/post-expected.json +0 -14
- package/test/resources/9999999/transactionalPush/template-expected.json +0 -8
- package/test/resources/9999999/transactionalSMS/build-expected.amp +0 -108
- package/test/resources/9999999/transactionalSMS/build-expected.json +0 -12
- package/test/resources/9999999/transactionalSMS/get-expected.amp +0 -108
- package/test/resources/9999999/transactionalSMS/get-expected.json +0 -14
- package/test/resources/9999999/transactionalSMS/patch-expected.amp +0 -102
- package/test/resources/9999999/transactionalSMS/patch-expected.json +0 -14
- package/test/resources/9999999/transactionalSMS/post-expected.amp +0 -102
- package/test/resources/9999999/transactionalSMS/post-expected.json +0 -14
- package/test/resources/9999999/transactionalSMS/template-expected.amp +0 -108
- package/test/resources/9999999/transactionalSMS/template-expected.json +0 -12
- package/test/resources/9999999/triggeredSend/build-expected.json +0 -28
- package/test/resources/9999999/triggeredSend/get-expected.json +0 -28
- package/test/resources/9999999/triggeredSend/get-rcb-id-expected.json +0 -28
- package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +0 -28
- package/test/resources/9999999/triggeredSend/get-rcb-name-expected.json +0 -28
- package/test/resources/9999999/triggeredSend/patch-expected.json +0 -27
- package/test/resources/9999999/triggeredSend/post-expected.json +0 -27
- package/test/resources/9999999/triggeredSend/template-expected.json +0 -28
- package/test/resources/9999999/triggeredSendDefinition/create-response.xml +0 -79
- package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +0 -36
- package/test/resources/9999999/triggeredSendDefinition/retrieve-CustomerKey=testExisting_triggeredSend-response.xml +0 -72
- package/test/resources/9999999/triggeredSendDefinition/retrieve-CustomerKey=testExisting_triggeredSend_rcb-response.xml +0 -72
- package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +0 -118
- package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINdummy,Active-response.xml +0 -118
- package/test/resources/9999999/triggeredSendDefinition/update-response.xml +0 -78
- package/test/resources/9999999/triggeredSendSummary/get-expected.json +0 -24
- package/test/resources/9999999/triggeredSendSummary/retrieve-response.xml +0 -49
- package/test/resources/9999999/verification/build-expected.json +0 -11
- package/test/resources/9999999/verification/get-expected.json +0 -12
- package/test/resources/9999999/verification/patch-expected.json +0 -12
- package/test/resources/9999999/verification/post-expected.json +0 -12
- package/test/resources/9999999/verification/template-expected.json +0 -11
- package/test/resources/auth.json +0 -32
- package/test/resources/rest404-response.json +0 -5
- package/test/resources/retrieve-response.xml +0 -21
- package/test/type.asset.test.js +0 -1432
- package/test/type.attributeGroup.test.js +0 -56
- package/test/type.attributeSet.test.js +0 -56
- package/test/type.automation.test.js +0 -1003
- package/test/type.dataExtension.test.js +0 -419
- package/test/type.dataExtensionField.test.js +0 -81
- package/test/type.dataExtract.test.js +0 -186
- package/test/type.dataFilter.test.js +0 -182
- package/test/type.deliveryProfile.test.js +0 -45
- package/test/type.domainVerification.test.js +0 -169
- package/test/type.emailSend.test.js +0 -144
- package/test/type.event.test.js +0 -346
- package/test/type.fileLocation.test.js +0 -279
- package/test/type.fileTransfer.test.js +0 -183
- package/test/type.filter.test.js +0 -177
- package/test/type.folder.test.js +0 -264
- package/test/type.importFile.test.js +0 -223
- package/test/type.journey.test.js +0 -1547
- package/test/type.mobileKeyword.test.js +0 -279
- package/test/type.mobileMessage.test.js +0 -206
- package/test/type.query.test.js +0 -934
- package/test/type.script.test.js +0 -674
- package/test/type.sendClassification.test.js +0 -156
- package/test/type.senderProfile.test.js +0 -320
- package/test/type.transactionalEmail.test.js +0 -162
- package/test/type.transactionalPush.test.js +0 -160
- package/test/type.transactionalSMS.test.js +0 -222
- package/test/type.triggeredSend.test.js +0 -397
- package/test/type.triggeredSendSummary.test.js +0 -45
- package/test/type.user.test.js +0 -221
- package/test/type.verification.test.js +0 -169
- package/test/utils.js +0 -426
- package/tsconfig.json +0 -26
- package/tsconfig.npmScripts.json +0 -12
- package/tsconfig.precommit.json +0 -26
|
@@ -4,12 +4,12 @@ import MetadataType from './MetadataType.js';
|
|
|
4
4
|
import { Util } from '../util/util.js';
|
|
5
5
|
import File from '../util/file.js';
|
|
6
6
|
import pLimit from 'p-limit';
|
|
7
|
-
import
|
|
7
|
+
import { ProgressBar } from '../util/progress.js';
|
|
8
8
|
import cache from '../util/cache.js';
|
|
9
9
|
import TriggeredSend from './TriggeredSend.js';
|
|
10
10
|
import Folder from './Folder.js';
|
|
11
11
|
import ReplaceCbReference from '../util/replaceContentBlockReference.js';
|
|
12
|
-
import
|
|
12
|
+
import { topologicalSort } from '../util/topological-sort.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
@@ -17,6 +17,7 @@ import toposort from 'toposort';
|
|
|
17
17
|
* @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
|
|
18
18
|
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
|
|
19
19
|
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
|
|
20
|
+
* @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
|
|
20
21
|
* @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
|
|
21
22
|
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
22
23
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
@@ -64,8 +65,8 @@ class Asset extends MetadataType {
|
|
|
64
65
|
}
|
|
65
66
|
if (retrieveDir && !cache.getCache()?.asset) {
|
|
66
67
|
// cache this for 3 reasons:
|
|
67
|
-
// 1) subtypes asset,
|
|
68
|
-
// 2) subtype
|
|
68
|
+
// 1) subtypes asset, email and template reference other content blocks by id/key/objectId as part of their views
|
|
69
|
+
// 2) subtype email references a template if it is template-based
|
|
69
70
|
// 3) all non-binary subtypes support ampscript / ssjs which can load otherc content blocks via ContentBlockyByX()
|
|
70
71
|
|
|
71
72
|
Util.logger.info(' - Caching dependent Metadata: asset');
|
|
@@ -88,11 +89,15 @@ class Asset extends MetadataType {
|
|
|
88
89
|
if (retrieveDir) {
|
|
89
90
|
if (key) {
|
|
90
91
|
// running post-delete tasks to clean up potential old files
|
|
91
|
-
|
|
92
|
+
try {
|
|
93
|
+
await this.postDeleteTasks(key);
|
|
94
|
+
} catch (ex) {
|
|
95
|
+
Util.logger.warn(
|
|
96
|
+
` - asset ${key}: cleanup failed: ${ex.message}; manual deletion of stale extracted code files may be necessary`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
92
99
|
// retrieve by key/id/name
|
|
93
|
-
items.push(
|
|
94
|
-
...(await this.requestSubType(null, retrieveDir, key, null, loadShared))
|
|
95
|
-
);
|
|
100
|
+
items.push(...(await this.requestSubType(null, retrieveDir, key, loadShared)));
|
|
96
101
|
} else {
|
|
97
102
|
// retrieve all
|
|
98
103
|
// loop through subtypes and return results of each subType for caching (saving is handled per subtype)
|
|
@@ -100,13 +105,13 @@ class Asset extends MetadataType {
|
|
|
100
105
|
// each subtype contains multiple different specific types (images contains jpg and png for example)
|
|
101
106
|
// we use await here to limit the risk of too many concurrent api requests at time
|
|
102
107
|
items.push(
|
|
103
|
-
...(await this.requestSubType(subType, retrieveDir, key,
|
|
108
|
+
...(await this.requestSubType(subType, retrieveDir, key, loadShared))
|
|
104
109
|
);
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
} else {
|
|
108
113
|
// caching
|
|
109
|
-
items.push(...(await this.requestSubType(subTypeArr, null, null,
|
|
114
|
+
items.push(...(await this.requestSubType(subTypeArr, null, null, loadShared)));
|
|
110
115
|
}
|
|
111
116
|
const metadata = this.parseResponseBody({ items: items });
|
|
112
117
|
if (retrieveDir) {
|
|
@@ -132,44 +137,7 @@ class Asset extends MetadataType {
|
|
|
132
137
|
}
|
|
133
138
|
|
|
134
139
|
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* @deprecated Use `retrieve` followed by `build` instead. `retrieveAsTemplate` will be removed in a future version.
|
|
138
|
-
* @param {string} templateDir Directory where retrieved metadata directory will be saved
|
|
139
|
-
* @param {string} name name of the metadata file
|
|
140
|
-
* @param {TemplateMap} templateVariables variables to be replaced in the metadata
|
|
141
|
-
* @param {AssetSubType} [selectedSubType] optionally limit to a single subtype
|
|
142
|
-
* @returns {Promise.<{metadata: AssetItem, type: string}>} Promise
|
|
143
|
-
*/
|
|
144
|
-
static async retrieveAsTemplate(templateDir, name, templateVariables, selectedSubType) {
|
|
145
|
-
Util.logDeprecated('retrieveAsTemplate', `'retrieve' followed by 'build'`);
|
|
146
|
-
const items = [];
|
|
147
|
-
const subTypes = selectedSubType ? [selectedSubType] : this._getSubTypes();
|
|
148
|
-
await File.initPrettier();
|
|
149
|
-
// loop through subtypes and return results of each subType for caching (saving is handled per subtype)
|
|
150
|
-
for (const subType of subTypes) {
|
|
151
|
-
// each subtype contains multiple different specific types (images contains jpg and png for example)
|
|
152
|
-
// we use await here to limit the risk of too many concurrent api requests at time
|
|
153
|
-
items.push(
|
|
154
|
-
...(await this.requestSubType(
|
|
155
|
-
subType,
|
|
156
|
-
templateDir,
|
|
157
|
-
'name:' + name,
|
|
158
|
-
templateVariables
|
|
159
|
-
))
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
const metadata = this.parseResponseBody({ items: items });
|
|
163
|
-
if (!Object.keys(metadata).length) {
|
|
164
|
-
Util.logger.error(`${this.definition.type} '${name}' not found on server.`);
|
|
165
|
-
}
|
|
166
|
-
Util.logger.info(`Downloaded: ${this.definition.type} (${Object.keys(metadata).length})`);
|
|
167
|
-
|
|
168
|
-
return { metadata: Object.values(metadata)[0], type: this.definition.type };
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* helper for {@link Asset.retrieve} + {@link Asset.retrieveAsTemplate}
|
|
140
|
+
* helper for {@link Asset.retrieve}
|
|
173
141
|
*
|
|
174
142
|
* @private
|
|
175
143
|
* @returns {string[]} AssetSubType array
|
|
@@ -178,7 +146,7 @@ class Asset extends MetadataType {
|
|
|
178
146
|
const selectedSubTypeArr = this.properties.metaDataTypes.retrieve.filter((type) =>
|
|
179
147
|
type.startsWith('asset-')
|
|
180
148
|
);
|
|
181
|
-
|
|
149
|
+
|
|
182
150
|
if (
|
|
183
151
|
this.properties.metaDataTypes.retrieve.includes('asset') ||
|
|
184
152
|
!selectedSubTypeArr.length
|
|
@@ -188,7 +156,6 @@ class Asset extends MetadataType {
|
|
|
188
156
|
} else {
|
|
189
157
|
return selectedSubTypeArr.map((type) => type.replace('asset-', ''));
|
|
190
158
|
}
|
|
191
|
-
/* eslint-enable unicorn/prefer-ternary */
|
|
192
159
|
}
|
|
193
160
|
|
|
194
161
|
/**
|
|
@@ -253,7 +220,7 @@ class Asset extends MetadataType {
|
|
|
253
220
|
}
|
|
254
221
|
|
|
255
222
|
// sort list & remove the undefined dependencies
|
|
256
|
-
const flatList =
|
|
223
|
+
const flatList = topologicalSort(dependencies).filter((a) => !!a);
|
|
257
224
|
|
|
258
225
|
/** @type {AssetMap} */
|
|
259
226
|
const metadataTypeMapSorted = {};
|
|
@@ -304,7 +271,6 @@ class Asset extends MetadataType {
|
|
|
304
271
|
* @returns {Promise} Promise
|
|
305
272
|
*/
|
|
306
273
|
static create(metadata) {
|
|
307
|
-
delete metadata.businessUnitAvailability;
|
|
308
274
|
const uri = '/asset/v1/content/assets/';
|
|
309
275
|
return super.createREST(metadata, uri);
|
|
310
276
|
}
|
|
@@ -345,17 +311,37 @@ class Asset extends MetadataType {
|
|
|
345
311
|
return super.updateREST(metadata, uri);
|
|
346
312
|
}
|
|
347
313
|
|
|
314
|
+
/**
|
|
315
|
+
* helper for {@link MetadataType.buildTemplate}
|
|
316
|
+
*
|
|
317
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory is stored
|
|
318
|
+
* @param {string} templateDir Directory where metadata templates are stored
|
|
319
|
+
* @param {string} key name of the metadata file
|
|
320
|
+
* @param {TemplateMap} templateVariables variables to be replaced in the metadata
|
|
321
|
+
* @returns {Promise.<MetadataTypeItemObj>} single metadata
|
|
322
|
+
*/
|
|
323
|
+
static async buildTemplate(retrieveDir, templateDir, key, templateVariables) {
|
|
324
|
+
if (Util.OPTIONS.shareAsset) {
|
|
325
|
+
this._toggleShareAssetTemplating(true);
|
|
326
|
+
}
|
|
327
|
+
const result = await super.buildTemplate(retrieveDir, templateDir, key, templateVariables);
|
|
328
|
+
if (Util.OPTIONS.shareAsset) {
|
|
329
|
+
// return values to normal
|
|
330
|
+
this._toggleShareAssetTemplating(false);
|
|
331
|
+
}
|
|
332
|
+
return result;
|
|
333
|
+
}
|
|
334
|
+
|
|
348
335
|
/**
|
|
349
336
|
* Retrieves Metadata of a specific asset type
|
|
350
337
|
*
|
|
351
338
|
* @param {string|string[]} subType group of similar assets to put in a folder (ie. images)
|
|
352
339
|
* @param {string} [retrieveDir] target directory for saving assets
|
|
353
340
|
* @param {string} [key] key/id/name to filter by
|
|
354
|
-
* @param {TemplateMap} [templateVariables] variables to be replaced in the metadata
|
|
355
341
|
* @param {boolean} [loadShared] optionally retrieve assets from other BUs that were shared with the current
|
|
356
342
|
* @returns {Promise.<object[]>} Promise
|
|
357
343
|
*/
|
|
358
|
-
static async requestSubType(subType, retrieveDir, key,
|
|
344
|
+
static async requestSubType(subType, retrieveDir, key, loadShared = false) {
|
|
359
345
|
const subTypeArr = Array.isArray(subType) ? subType : [subType];
|
|
360
346
|
if (retrieveDir) {
|
|
361
347
|
if (Array.isArray(subType)) {
|
|
@@ -505,12 +491,7 @@ class Asset extends MetadataType {
|
|
|
505
491
|
}
|
|
506
492
|
}
|
|
507
493
|
// we have to wait on execution or it potentially causes memory reference issues when changing between BUs
|
|
508
|
-
downloadedItemsMap = await this.requestAndSaveExtended(
|
|
509
|
-
items,
|
|
510
|
-
subType,
|
|
511
|
-
retrieveDir,
|
|
512
|
-
templateVariables
|
|
513
|
-
);
|
|
494
|
+
downloadedItemsMap = await this.requestAndSaveExtended(items, subType, retrieveDir);
|
|
514
495
|
}
|
|
515
496
|
// always show the summary even if we already had the progress bar in the console
|
|
516
497
|
Util.logger.info(
|
|
@@ -528,24 +509,20 @@ class Asset extends MetadataType {
|
|
|
528
509
|
* @param {Array} items array of items to retrieve
|
|
529
510
|
* @param {string} subType group of similar assets to put in a folder (ie. images)
|
|
530
511
|
* @param {string} retrieveDir target directory for saving assets
|
|
531
|
-
* @param {TemplateMap} [templateVariables] variables to be replaced in the metadata
|
|
532
512
|
* @returns {Promise.<MetadataTypeMap>} Promise
|
|
533
513
|
*/
|
|
534
|
-
static async requestAndSaveExtended(items, subType, retrieveDir
|
|
514
|
+
static async requestAndSaveExtended(items, subType, retrieveDir) {
|
|
535
515
|
// disable CLI logs other than error while retrieving subtype
|
|
536
516
|
const loggerLevelBak = Util.logger.level;
|
|
537
517
|
if (loggerLevelBak !== 'error') {
|
|
538
518
|
// disable logging to cli other than Errors
|
|
539
519
|
Util.setLoggingLevel({ silent: true });
|
|
540
520
|
}
|
|
541
|
-
const extendedBar = new
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
},
|
|
547
|
-
cliProgress.Presets.shades_classic
|
|
548
|
-
);
|
|
521
|
+
const extendedBar = new ProgressBar({
|
|
522
|
+
format:
|
|
523
|
+
' Downloading [{bar}] {percentage}% | {value}/{total} | asset-' +
|
|
524
|
+
subType,
|
|
525
|
+
});
|
|
549
526
|
|
|
550
527
|
const completed = [];
|
|
551
528
|
const failed = [];
|
|
@@ -599,8 +576,7 @@ class Asset extends MetadataType {
|
|
|
599
576
|
const savedItem = await this.saveResults(
|
|
600
577
|
metadataMapSaveSingle,
|
|
601
578
|
retrieveDir,
|
|
602
|
-
'asset-' + subType
|
|
603
|
-
templateVariables
|
|
579
|
+
'asset-' + subType
|
|
604
580
|
);
|
|
605
581
|
if (!savedItem[item.customerKey]) {
|
|
606
582
|
// filtered by like-option
|
|
@@ -682,7 +658,7 @@ class Asset extends MetadataType {
|
|
|
682
658
|
fail.error.endpoint
|
|
683
659
|
? Util.getGrayMsg(
|
|
684
660
|
' - ' +
|
|
685
|
-
fail.error.endpoint.split('rest.marketingcloudapis.com')[1]
|
|
661
|
+
fail.error.endpoint.split('rest.marketingcloudapis.com', 2)[1]
|
|
686
662
|
)
|
|
687
663
|
: ''
|
|
688
664
|
}`
|
|
@@ -708,7 +684,7 @@ class Asset extends MetadataType {
|
|
|
708
684
|
|
|
709
685
|
// to handle uploaded files that bear the same name, SFMC engineers decided to add a number after the fileName
|
|
710
686
|
// however, their solution was not following standards: fileName="header.png (4) " and then extension="png (4) "
|
|
711
|
-
const fileExt = metadata.fileProperties.extension.split(' ')[0];
|
|
687
|
+
const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
|
|
712
688
|
|
|
713
689
|
File.writeToFile(
|
|
714
690
|
[retrieveDir, this.definition.type, subType],
|
|
@@ -736,7 +712,7 @@ class Asset extends MetadataType {
|
|
|
736
712
|
if (!metadata?.fileProperties?.extension) {
|
|
737
713
|
return;
|
|
738
714
|
}
|
|
739
|
-
const fileExt = metadata.fileProperties.extension.split(' ')[0];
|
|
715
|
+
const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
|
|
740
716
|
|
|
741
717
|
const path = File.normalizePath([
|
|
742
718
|
deployDir,
|
|
@@ -848,7 +824,7 @@ class Asset extends MetadataType {
|
|
|
848
824
|
if (Util.OPTIONS.refresh) {
|
|
849
825
|
if (createdUpdated.updated) {
|
|
850
826
|
// only run this if assets were updated. for created assets we do not expect
|
|
851
|
-
await this.
|
|
827
|
+
await this.refresh(Object.keys(metadata));
|
|
852
828
|
} else {
|
|
853
829
|
Util.logger.warn(
|
|
854
830
|
'You set the --refresh flag but no updated assets found. Skipping refresh of triggeredSendDefinitions.'
|
|
@@ -856,13 +832,147 @@ class Asset extends MetadataType {
|
|
|
856
832
|
}
|
|
857
833
|
}
|
|
858
834
|
}
|
|
835
|
+
/**
|
|
836
|
+
* helper for {@link Asset}. finds active emails that reference the updated block
|
|
837
|
+
*
|
|
838
|
+
* @private
|
|
839
|
+
* @param {AssetMap[]} blocks block metadata
|
|
840
|
+
* @param {AssetMap} _foundEmails map of found emails
|
|
841
|
+
* @param {Set} _searchedKeys set of searched block keys
|
|
842
|
+
* @returns {Promise.<AssetMap[]>} - map of assets keyed by their keyField
|
|
843
|
+
*/
|
|
844
|
+
static async _findEmailsUsingBlock(blocks, _foundEmails = {}, _searchedKeys = new Set()) {
|
|
845
|
+
const uri = '/asset/v1/content/assets/query';
|
|
846
|
+
|
|
847
|
+
// Mark all current blocks as searched
|
|
848
|
+
for (const block of blocks) {
|
|
849
|
+
_searchedKeys.add(block.customerKey);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/** @type {AssetRequestParams} */
|
|
853
|
+
const payload = {
|
|
854
|
+
page: { page: 1, pageSize: 50 },
|
|
855
|
+
sort: [{ property: 'id', direction: 'ASC' }],
|
|
856
|
+
// @ts-ignore
|
|
857
|
+
query: ['Key', 'Id', 'Name']
|
|
858
|
+
.map((by) => ({
|
|
859
|
+
property: 'content',
|
|
860
|
+
simpleOperator: 'mustContain',
|
|
861
|
+
value: `ContentBlockBy${by}`,
|
|
862
|
+
}))
|
|
863
|
+
.reduce((acc, condition, index) => {
|
|
864
|
+
if (index === 0) {
|
|
865
|
+
return condition;
|
|
866
|
+
}
|
|
867
|
+
return { leftOperand: acc, logicalOperator: 'OR', rightOperand: condition };
|
|
868
|
+
}, null),
|
|
869
|
+
};
|
|
870
|
+
|
|
871
|
+
const dependencyQuery = payload.query;
|
|
872
|
+
let items = [];
|
|
873
|
+
let moreResults;
|
|
874
|
+
let lastPage = 0;
|
|
875
|
+
let cursor = 0;
|
|
876
|
+
|
|
877
|
+
try {
|
|
878
|
+
do {
|
|
879
|
+
payload.page.page = lastPage + 1;
|
|
880
|
+
const response = await this.client.rest.post(uri, payload);
|
|
881
|
+
// sometimes the api will return a payload without items
|
|
882
|
+
// --> ensure we only add proper items-arrays here
|
|
883
|
+
if (response?.items?.length) {
|
|
884
|
+
items = items.concat(response.items);
|
|
885
|
+
}
|
|
886
|
+
// check if any more records
|
|
887
|
+
if (response?.message?.includes('all shards failed')) {
|
|
888
|
+
// When running certain filters, there is a limit of 10k on ElastiCache.
|
|
889
|
+
// Since we sort by ID, we can get the last ID then run new requests from there
|
|
890
|
+
const lastId = Number(items.at(-1)?.id);
|
|
891
|
+
if (!Number.isSafeInteger(lastId) || lastId <= cursor) {
|
|
892
|
+
throw new Error(
|
|
893
|
+
'Asset dependency query failed: all shards failed without a usable ID cursor.'
|
|
894
|
+
);
|
|
895
|
+
}
|
|
896
|
+
cursor = lastId;
|
|
897
|
+
payload.query = {
|
|
898
|
+
leftOperand: dependencyQuery,
|
|
899
|
+
logicalOperator: 'AND',
|
|
900
|
+
rightOperand: {
|
|
901
|
+
property: 'id',
|
|
902
|
+
simpleOperator: 'greaterThan',
|
|
903
|
+
value: cursor,
|
|
904
|
+
},
|
|
905
|
+
};
|
|
906
|
+
lastPage = 0;
|
|
907
|
+
moreResults = true;
|
|
908
|
+
} else if (response.page * response.pageSize < response.count) {
|
|
909
|
+
moreResults = true;
|
|
910
|
+
lastPage = Number(response.page);
|
|
911
|
+
} else {
|
|
912
|
+
moreResults = false;
|
|
913
|
+
}
|
|
914
|
+
} while (moreResults);
|
|
915
|
+
} catch (ex) {
|
|
916
|
+
Util.logger.error(`An error occurred while attempting to query assets. ${ex.message}`);
|
|
917
|
+
throw ex;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// The API filter finds candidates only; verify exact literal arguments locally.
|
|
921
|
+
const references = { key: new Set(), id: new Set(), name: new Set() };
|
|
922
|
+
for (const block of blocks) {
|
|
923
|
+
references.key.add(block.customerKey);
|
|
924
|
+
if (block.id) {
|
|
925
|
+
references.id.add(String(block.id));
|
|
926
|
+
}
|
|
927
|
+
const namedBlock = structuredClone(block);
|
|
928
|
+
if (!namedBlock.r__folder_Path) {
|
|
929
|
+
this.setFolderPath(namedBlock, true);
|
|
930
|
+
}
|
|
931
|
+
if (namedBlock.r__folder_Path && namedBlock.name) {
|
|
932
|
+
references.name.add(
|
|
933
|
+
namedBlock.r__folder_Path.replaceAll('/', '\\') + '\\' + namedBlock.name
|
|
934
|
+
);
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
const verifiedItems = [];
|
|
938
|
+
for (let item of items) {
|
|
939
|
+
let contents = this._getReferenceContents(item);
|
|
940
|
+
if (!contents.length) {
|
|
941
|
+
item = await this.client.rest.get('/asset/v1/content/assets/' + item.id);
|
|
942
|
+
contents = this._getReferenceContents(item);
|
|
943
|
+
}
|
|
944
|
+
if (contents.some((content) => this._hasLiteralBlockReference(content, references))) {
|
|
945
|
+
verifiedItems.push(item);
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
items = verifiedItems;
|
|
949
|
+
|
|
950
|
+
const emailTypes = this.definition.extendedSubTypes.email;
|
|
951
|
+
const foundEmails = items.filter((item) => emailTypes.includes(item.assetType.name));
|
|
952
|
+
const foundBlocks = items.filter((item) => !emailTypes.includes(item.assetType.name));
|
|
953
|
+
|
|
954
|
+
for (const email of foundEmails) {
|
|
955
|
+
_foundEmails[email.customerKey] = email;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
// Recurse with all unsearched blocks in one call
|
|
959
|
+
const unsearchedBlocks = foundBlocks.filter(
|
|
960
|
+
(block) => !_searchedKeys.has(block.customerKey)
|
|
961
|
+
);
|
|
962
|
+
if (unsearchedBlocks.length) {
|
|
963
|
+
await this._findEmailsUsingBlock(unsearchedBlocks, _foundEmails, _searchedKeys);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
// @ts-ignore
|
|
967
|
+
return _foundEmails;
|
|
968
|
+
}
|
|
859
969
|
|
|
860
970
|
/**
|
|
861
|
-
* helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-
|
|
971
|
+
* helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-email items. Gets executed if refresh option has been set.
|
|
862
972
|
*
|
|
863
973
|
* @private
|
|
864
974
|
* @param {MetadataTypeMap} metadata metadata mapped by their keyField
|
|
865
|
-
* @returns {Promise.<
|
|
975
|
+
* @returns {Promise.<string[]>} Returns list of keys that were refreshed
|
|
866
976
|
*/
|
|
867
977
|
static async _refreshTriggeredSend(metadata) {
|
|
868
978
|
// get legacyData.legacyId from assets to compare to TSD's metadata.Email.ID to
|
|
@@ -874,36 +984,33 @@ class Asset extends MetadataType {
|
|
|
874
984
|
Util.logger.warn(
|
|
875
985
|
'No legacyId found in updated emails. Skipping refresh of triggeredSendDefinitions.'
|
|
876
986
|
);
|
|
877
|
-
return;
|
|
987
|
+
return [];
|
|
878
988
|
}
|
|
879
989
|
// prep triggeredSendDefinition class
|
|
880
990
|
TriggeredSend.properties = this.properties;
|
|
881
991
|
TriggeredSend.buObject = this.buObject;
|
|
882
992
|
TriggeredSend.client = this.client;
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
const tsdObj = (await TriggeredSend.findRefreshableItems(true))?.metadata;
|
|
993
|
+
// find refreshable TSDs; discovery errors must reach the refresh/deploy handler
|
|
994
|
+
const tsdObj = (await TriggeredSend.findRefreshableItems(true))?.metadata;
|
|
886
995
|
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
}
|
|
996
|
+
const tsdCountInitial = Object.keys(tsdObj).length;
|
|
997
|
+
const emailCount = legacyIdArr.length;
|
|
998
|
+
// filter TSDs by legacyId
|
|
999
|
+
for (const key in tsdObj) {
|
|
1000
|
+
if (!legacyIdArr.includes(tsdObj[key].Email.ID)) {
|
|
1001
|
+
delete tsdObj[key];
|
|
894
1002
|
}
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
1003
|
+
}
|
|
1004
|
+
const tsdCountFiltered = Object.keys(tsdObj).length;
|
|
1005
|
+
Util.logger.info(
|
|
1006
|
+
`Found ${tsdCountFiltered} out of ${tsdCountInitial} total triggeredSendDefinitions for ${emailCount} deployed emails. Commencing validation...`
|
|
1007
|
+
);
|
|
899
1008
|
|
|
900
|
-
|
|
901
|
-
|
|
1009
|
+
// get keys of TSDs to refresh
|
|
1010
|
+
const keyArr = await TriggeredSend.getKeysForValidTSDs(tsdObj);
|
|
902
1011
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
Util.logger.warn('Failed to refresh triggeredSendDefinition');
|
|
906
|
-
}
|
|
1012
|
+
// Never pass an empty selection to a refresh-all-capable method.
|
|
1013
|
+
return keyArr.length ? await TriggeredSend.refresh(keyArr) : [];
|
|
907
1014
|
}
|
|
908
1015
|
|
|
909
1016
|
/**
|
|
@@ -931,10 +1038,7 @@ class Asset extends MetadataType {
|
|
|
931
1038
|
'CloudPage content cannot be created via mcdev. Please create it via the UI first, then you can update the content or key.'
|
|
932
1039
|
);
|
|
933
1040
|
}
|
|
934
|
-
if (
|
|
935
|
-
this.definition.extendedSubTypes.cloudpage.includes(metadata.assetType.name) ||
|
|
936
|
-
this.definition.extendedSubTypes.coderesource.includes(metadata.assetType.name)
|
|
937
|
-
) {
|
|
1041
|
+
if (this.definition.extendedSubTypes.webstudio.includes(metadata.assetType.name)) {
|
|
938
1042
|
// if we do create those, we get the error "Asset <id> not found" because the internal endpoint internal/v2/cloudpages/sites won't find it.
|
|
939
1043
|
throw new Error(
|
|
940
1044
|
'CloudPage assets cannot be created via mcdev. Please create it via the UI first, then you can update the content or key.'
|
|
@@ -1013,6 +1117,8 @@ class Asset extends MetadataType {
|
|
|
1013
1117
|
|
|
1014
1118
|
// #1 get text extracts back into the JSON
|
|
1015
1119
|
await this._mergeCode(metadata, deployDir, subType);
|
|
1120
|
+
// Keep preview tokens through Mustache builds; restore only the final deployment source.
|
|
1121
|
+
this._restoreMobilePreview(metadata);
|
|
1016
1122
|
|
|
1017
1123
|
// #2 get file from local disk and insert as base64
|
|
1018
1124
|
await this._readExtendedFileFromFS(metadata, subType, deployDir);
|
|
@@ -1057,7 +1163,7 @@ class Asset extends MetadataType {
|
|
|
1057
1163
|
* find the subType matching the extendedSubType
|
|
1058
1164
|
*
|
|
1059
1165
|
* @param {string} extendedSubType webpage, htmlblock, etc
|
|
1060
|
-
* @returns {string} subType: block,
|
|
1166
|
+
* @returns {string} subType: block, email, other, etc
|
|
1061
1167
|
*/
|
|
1062
1168
|
static #getMainSubtype(extendedSubType) {
|
|
1063
1169
|
return Object.keys(this.definition.extendedSubTypes).find((subType) =>
|
|
@@ -1206,7 +1312,7 @@ class Asset extends MetadataType {
|
|
|
1206
1312
|
if (metadata?.fileProperties?.extension) {
|
|
1207
1313
|
// to handle uploaded files that bear the same name, SFMC engineers decided to add a number after the fileName
|
|
1208
1314
|
// however, their solution was not following standards: fileName="header.png (4) " and then extension="png (4) "
|
|
1209
|
-
const fileExt = metadata.fileProperties.extension.split(' ')[0];
|
|
1315
|
+
const fileExt = metadata.fileProperties.extension.split(' ', 1)[0];
|
|
1210
1316
|
|
|
1211
1317
|
const filecontent = await File.readFilteredFilename(
|
|
1212
1318
|
[templateDir, this.definition.type, subType],
|
|
@@ -1239,7 +1345,7 @@ class Asset extends MetadataType {
|
|
|
1239
1345
|
extractedFile.content = ssjs;
|
|
1240
1346
|
}
|
|
1241
1347
|
}
|
|
1242
|
-
File.writeToFile(
|
|
1348
|
+
await File.writeToFile(
|
|
1243
1349
|
[targetDir, ...extractedFile.subFolder],
|
|
1244
1350
|
extractedFile.fileName,
|
|
1245
1351
|
extractedFile.fileExt,
|
|
@@ -1330,7 +1436,7 @@ class Asset extends MetadataType {
|
|
|
1330
1436
|
*/
|
|
1331
1437
|
static async _preDeployTasksBocks(metadata) {
|
|
1332
1438
|
switch (metadata.assetType.name) {
|
|
1333
|
-
case 'templatebasedemail': //
|
|
1439
|
+
case 'templatebasedemail': // email
|
|
1334
1440
|
case 'htmlemail':
|
|
1335
1441
|
case 'webpage': {
|
|
1336
1442
|
// metadata.views.html.slots.<>.blocks.<>.content (optional)
|
|
@@ -1358,40 +1464,44 @@ class Asset extends MetadataType {
|
|
|
1358
1464
|
*/
|
|
1359
1465
|
static async _preDeployTasksBocks_slots(metadataSlots) {
|
|
1360
1466
|
for (const slot in metadataSlots) {
|
|
1361
|
-
if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1467
|
+
if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
1468
|
+
continue;
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
const slotObj = metadataSlots[slot];
|
|
1472
|
+
// found slot
|
|
1473
|
+
if (slotObj.blocks) {
|
|
1474
|
+
for (const block in slotObj.blocks) {
|
|
1475
|
+
if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
|
|
1476
|
+
continue;
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
const asset = slotObj.blocks[block];
|
|
1480
|
+
if (asset.r__asset_key) {
|
|
1481
|
+
// by only running the following if r__asset_key was set, we simply skip anything that wasnt resolved during retrieve
|
|
1482
|
+
asset.customerKey = asset.r__asset_key;
|
|
1483
|
+
asset.id = cache.searchForField(
|
|
1484
|
+
'asset',
|
|
1485
|
+
asset.r__asset_key,
|
|
1486
|
+
'customerKey',
|
|
1487
|
+
'id'
|
|
1488
|
+
);
|
|
1489
|
+
asset.objectID = cache.searchForField(
|
|
1490
|
+
'asset',
|
|
1491
|
+
asset.r__asset_key,
|
|
1492
|
+
'customerKey',
|
|
1493
|
+
'objectID'
|
|
1494
|
+
);
|
|
1495
|
+
delete asset.r__asset_key;
|
|
1496
|
+
asset.thumbnail = {
|
|
1497
|
+
thumbnailUrl: '/v1/assets/' + asset.id + '/thumbnail',
|
|
1498
|
+
};
|
|
1499
|
+
}
|
|
1500
|
+
if (asset.r__folder_Path) {
|
|
1501
|
+
// if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
|
|
1502
|
+
delete asset.r__folder_Path;
|
|
1394
1503
|
}
|
|
1504
|
+
await this._preDeployTasksBocks(asset);
|
|
1395
1505
|
}
|
|
1396
1506
|
}
|
|
1397
1507
|
}
|
|
@@ -1416,9 +1526,41 @@ class Asset extends MetadataType {
|
|
|
1416
1526
|
const customerKey = metadata.customerKey.trim();
|
|
1417
1527
|
const templateFileName = templateName || customerKey;
|
|
1418
1528
|
switch (metadata.assetType.name) {
|
|
1419
|
-
case '
|
|
1529
|
+
case 'jsonmessage': {
|
|
1530
|
+
subDirArr = [this.definition.type, subType, templateFileName.trim()];
|
|
1531
|
+
readDirArr = [deployDir, ...subDirArr];
|
|
1532
|
+
for (const { field, companion, data } of this._getMobileCodeFields(metadata)) {
|
|
1533
|
+
const fileName = `${field.replaceAll(':', '_')}${subtypeExtension}`;
|
|
1534
|
+
const path = File.normalizePath([
|
|
1535
|
+
...readDirArr,
|
|
1536
|
+
File.filterIllegalFilenames(`${fileName}.amp`),
|
|
1537
|
+
]);
|
|
1538
|
+
if (!(await File.pathExists(path))) {
|
|
1539
|
+
if (!fileListOnly) {
|
|
1540
|
+
// Missing source is not an explicitly empty sidecar.
|
|
1541
|
+
delete data[field];
|
|
1542
|
+
delete data[companion];
|
|
1543
|
+
}
|
|
1544
|
+
continue;
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
if (!fileListOnly) {
|
|
1548
|
+
data[field] = await File.readFilteredFilename(readDirArr, fileName, 'amp');
|
|
1549
|
+
// The sidecar is authoritative for both duplicate source fields.
|
|
1550
|
+
data[companion] = data[field];
|
|
1551
|
+
}
|
|
1552
|
+
fileList.push({
|
|
1553
|
+
subFolder: subDirArr,
|
|
1554
|
+
fileName,
|
|
1555
|
+
fileExt: 'amp',
|
|
1556
|
+
content: data[field],
|
|
1557
|
+
});
|
|
1558
|
+
}
|
|
1559
|
+
break;
|
|
1560
|
+
}
|
|
1561
|
+
case 'templatebasedemail': // email
|
|
1420
1562
|
case 'htmlemail': {
|
|
1421
|
-
//
|
|
1563
|
+
// email
|
|
1422
1564
|
// this complex type always creates its own subdir per asset
|
|
1423
1565
|
subDirArr = [this.definition.type, subType];
|
|
1424
1566
|
readDirArr = [deployDir, ...subDirArr, templateFileName];
|
|
@@ -1586,7 +1728,7 @@ class Asset extends MetadataType {
|
|
|
1586
1728
|
break;
|
|
1587
1729
|
}
|
|
1588
1730
|
case 'textonlyemail': {
|
|
1589
|
-
//
|
|
1731
|
+
// email
|
|
1590
1732
|
// metadata.views.text.content
|
|
1591
1733
|
subDirArr = [this.definition.type, subType];
|
|
1592
1734
|
readDirArr = [deployDir, ...subDirArr];
|
|
@@ -1792,70 +1934,70 @@ class Asset extends MetadataType {
|
|
|
1792
1934
|
const templateFileName = templateName || customerKey;
|
|
1793
1935
|
|
|
1794
1936
|
for (const slot in metadataSlots) {
|
|
1795
|
-
if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
// to use this method in templating, store a copy of the info in fileList
|
|
1823
|
-
fileList.push({
|
|
1824
|
-
subFolder: [...subDirArr, templateFileName, 'blocks'],
|
|
1825
|
-
fileName: fileName,
|
|
1826
|
-
fileExt: 'html',
|
|
1827
|
-
content: asset.content,
|
|
1828
|
-
});
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
|
-
if (asset.slots) {
|
|
1832
|
-
// * recursion: each block can have slots of its own
|
|
1833
|
-
await this._mergeCode_slots(
|
|
1834
|
-
`${prefix}.[${slot}-${block}]`,
|
|
1835
|
-
asset.slots,
|
|
1836
|
-
readDirArr,
|
|
1837
|
-
subtypeExtension,
|
|
1838
|
-
subDirArr,
|
|
1839
|
-
fileList,
|
|
1840
|
-
customerKey,
|
|
1841
|
-
templateName,
|
|
1842
|
-
fileListOnly
|
|
1843
|
-
);
|
|
1844
|
-
} else if (asset?.views?.html?.slots) {
|
|
1845
|
-
// * recursion: each block can have slots of its own
|
|
1846
|
-
await this._mergeCode_slots(
|
|
1847
|
-
`${prefix}.[${slot}-${block}]`,
|
|
1848
|
-
asset.views.html.slots,
|
|
1849
|
-
readDirArr,
|
|
1850
|
-
subtypeExtension,
|
|
1851
|
-
subDirArr,
|
|
1852
|
-
fileList,
|
|
1853
|
-
customerKey,
|
|
1854
|
-
templateName,
|
|
1855
|
-
fileListOnly
|
|
1856
|
-
);
|
|
1857
|
-
}
|
|
1937
|
+
if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
1938
|
+
continue;
|
|
1939
|
+
}
|
|
1940
|
+
|
|
1941
|
+
const slotObj = metadataSlots[slot];
|
|
1942
|
+
// found slot
|
|
1943
|
+
if (slotObj.blocks) {
|
|
1944
|
+
for (const block in slotObj.blocks) {
|
|
1945
|
+
if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
|
|
1946
|
+
continue;
|
|
1947
|
+
}
|
|
1948
|
+
|
|
1949
|
+
const asset = slotObj.blocks[block];
|
|
1950
|
+
const fileName = `${prefix}.[${slot}-${block}]${subtypeExtension}`;
|
|
1951
|
+
if (
|
|
1952
|
+
await File.pathExists(
|
|
1953
|
+
File.normalizePath([...readDirArr, 'blocks', `${fileName}.html`])
|
|
1954
|
+
)
|
|
1955
|
+
) {
|
|
1956
|
+
// the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs
|
|
1957
|
+
// if an extracted block was found, save it back into JSON
|
|
1958
|
+
if (!fileListOnly) {
|
|
1959
|
+
asset.content = await File.readFilteredFilename(
|
|
1960
|
+
[...readDirArr, 'blocks'],
|
|
1961
|
+
fileName,
|
|
1962
|
+
'html'
|
|
1963
|
+
);
|
|
1858
1964
|
}
|
|
1965
|
+
if (templateName) {
|
|
1966
|
+
// to use this method in templating, store a copy of the info in fileList
|
|
1967
|
+
fileList.push({
|
|
1968
|
+
subFolder: [...subDirArr, templateFileName, 'blocks'],
|
|
1969
|
+
fileName: fileName,
|
|
1970
|
+
fileExt: 'html',
|
|
1971
|
+
content: asset.content,
|
|
1972
|
+
});
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
if (asset.slots) {
|
|
1976
|
+
// * recursion: each block can have slots of its own
|
|
1977
|
+
await this._mergeCode_slots(
|
|
1978
|
+
`${prefix}.[${slot}-${block}]`,
|
|
1979
|
+
asset.slots,
|
|
1980
|
+
readDirArr,
|
|
1981
|
+
subtypeExtension,
|
|
1982
|
+
subDirArr,
|
|
1983
|
+
fileList,
|
|
1984
|
+
customerKey,
|
|
1985
|
+
templateName,
|
|
1986
|
+
fileListOnly
|
|
1987
|
+
);
|
|
1988
|
+
} else if (asset?.views?.html?.slots) {
|
|
1989
|
+
// * recursion: each block can have slots of its own
|
|
1990
|
+
await this._mergeCode_slots(
|
|
1991
|
+
`${prefix}.[${slot}-${block}]`,
|
|
1992
|
+
asset.views.html.slots,
|
|
1993
|
+
readDirArr,
|
|
1994
|
+
subtypeExtension,
|
|
1995
|
+
subDirArr,
|
|
1996
|
+
fileList,
|
|
1997
|
+
customerKey,
|
|
1998
|
+
templateName,
|
|
1999
|
+
fileListOnly
|
|
2000
|
+
);
|
|
1859
2001
|
}
|
|
1860
2002
|
}
|
|
1861
2003
|
}
|
|
@@ -1867,7 +2009,299 @@ class Asset extends MetadataType {
|
|
|
1867
2009
|
* to allow saving that separately and formatted
|
|
1868
2010
|
*
|
|
1869
2011
|
* @param {AssetItem} metadata a single asset definition
|
|
1870
|
-
* @returns {
|
|
2012
|
+
* @returns {{channel: 'push' | 'sms' | 'inApp', field: 'display:title' | 'display:message', companion: 'display:title:display' | 'display:message:display', data: object}[]} editable mobile fields
|
|
2013
|
+
*/
|
|
2014
|
+
static _getMobileCodeFields(metadata) {
|
|
2015
|
+
/** @type {{channel: 'push' | 'sms' | 'inApp', field: 'display:title' | 'display:message', companion: 'display:title:display' | 'display:message:display', data: object}[]} */
|
|
2016
|
+
const fields = [];
|
|
2017
|
+
// Only real message source is editable; views.<channel>.content is generated preview HTML.
|
|
2018
|
+
// Keep the allowlist narrow: push/inApp title/message and SMS message, not UI options.
|
|
2019
|
+
const channels = /** @type {const} */ (['push', 'sms', 'inApp']);
|
|
2020
|
+
if (
|
|
2021
|
+
channels.filter((channel) => metadata.views?.[channel]?.meta?.options?.customBlockData)
|
|
2022
|
+
.length > 1
|
|
2023
|
+
) {
|
|
2024
|
+
throw new TypeError('Cannot process mobile source with multiple supported channels');
|
|
2025
|
+
}
|
|
2026
|
+
for (const channel of channels) {
|
|
2027
|
+
const data = metadata.views?.[channel]?.meta?.options?.customBlockData;
|
|
2028
|
+
if (data) {
|
|
2029
|
+
for (const field of channel === 'sms'
|
|
2030
|
+
? /** @type {const} */ (['display:message'])
|
|
2031
|
+
: /** @type {const} */ (['display:title', 'display:message'])) {
|
|
2032
|
+
fields.push({ channel, field, companion: `${field}:display`, data });
|
|
2033
|
+
}
|
|
2034
|
+
}
|
|
2035
|
+
}
|
|
2036
|
+
return fields;
|
|
2037
|
+
}
|
|
2038
|
+
|
|
2039
|
+
/**
|
|
2040
|
+
* Escape literal mobile source for an existing HTML text slot, without rendering it.
|
|
2041
|
+
*
|
|
2042
|
+
* @param {string} value source text
|
|
2043
|
+
* @returns {string} escaped text
|
|
2044
|
+
*/
|
|
2045
|
+
static _escapeMobilePreview(value) {
|
|
2046
|
+
return value
|
|
2047
|
+
.replaceAll('&', '&')
|
|
2048
|
+
.replaceAll('<', '<')
|
|
2049
|
+
.replaceAll('>', '>')
|
|
2050
|
+
.replaceAll('"', '"')
|
|
2051
|
+
.replaceAll("'", ''');
|
|
2052
|
+
}
|
|
2053
|
+
|
|
2054
|
+
/**
|
|
2055
|
+
* Escape a URL for the generated unquoted CSS url slot, including HTML style boundaries.
|
|
2056
|
+
*
|
|
2057
|
+
* @param {string} value source URL
|
|
2058
|
+
* @returns {string} escaped CSS URL
|
|
2059
|
+
*/
|
|
2060
|
+
static _escapeMobilePreviewUrl(value) {
|
|
2061
|
+
return value.replaceAll(
|
|
2062
|
+
/[\s()"'\\<>]/g,
|
|
2063
|
+
(char) => `\\${char.codePointAt(0).toString(16)} `
|
|
2064
|
+
);
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
/**
|
|
2068
|
+
* Tokenize only known, source-equal mobile preview text slots before extracting source.
|
|
2069
|
+
*
|
|
2070
|
+
* @param {AssetItem} metadata asset with inline source
|
|
2071
|
+
* @returns {void} -
|
|
2072
|
+
*/
|
|
2073
|
+
static _tokenizeMobilePreview(metadata) {
|
|
2074
|
+
for (const channel of /** @type {const} */ (['push', 'sms', 'inApp'])) {
|
|
2075
|
+
const view = metadata.views?.[channel];
|
|
2076
|
+
const data = view?.meta?.options?.customBlockData;
|
|
2077
|
+
if (typeof view?.content !== 'string' || !data) {
|
|
2078
|
+
continue;
|
|
2079
|
+
}
|
|
2080
|
+
const replaceSlot = (slot, field, context) => {
|
|
2081
|
+
const value = data[field];
|
|
2082
|
+
if (typeof value !== 'string' || !value) {
|
|
2083
|
+
return slot;
|
|
2084
|
+
}
|
|
2085
|
+
const escaped =
|
|
2086
|
+
context === 'url'
|
|
2087
|
+
? this._escapeMobilePreviewUrl(value)
|
|
2088
|
+
: this._escapeMobilePreview(value);
|
|
2089
|
+
// Field identity keeps equal title/message source independently editable.
|
|
2090
|
+
return context
|
|
2091
|
+
? this._replaceMobilePreviewPadding(slot, escaped, `[[[${field}]]]`)
|
|
2092
|
+
: slot === escaped
|
|
2093
|
+
? `[[[${field}]]]`
|
|
2094
|
+
: slot;
|
|
2095
|
+
};
|
|
2096
|
+
view.content = this._replaceMobilePreviewSlots(view.content, channel, replaceSlot);
|
|
2097
|
+
}
|
|
2098
|
+
}
|
|
2099
|
+
|
|
2100
|
+
/**
|
|
2101
|
+
* Replace an exact source value with whitespace allowed only outside that value.
|
|
2102
|
+
*
|
|
2103
|
+
* @param {string} slot complete preview slot
|
|
2104
|
+
* @param {string} source escaped source or field token
|
|
2105
|
+
* @param {string} replacement updated slot value
|
|
2106
|
+
* @returns {string} slot with external padding preserved
|
|
2107
|
+
*/
|
|
2108
|
+
static _replaceMobilePreviewPadding(slot, source, replacement) {
|
|
2109
|
+
const start = slot.indexOf(source);
|
|
2110
|
+
if (start === -1) {
|
|
2111
|
+
return slot;
|
|
2112
|
+
}
|
|
2113
|
+
const before = slot.slice(0, start);
|
|
2114
|
+
const after = slot.slice(start + source.length);
|
|
2115
|
+
return /^\s*$/.test(before) && /^\s*$/.test(after) ? before + replacement + after : slot;
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
/**
|
|
2119
|
+
* Replace text only in recognized mobile preview slots, preserving wrapper bytes.
|
|
2120
|
+
*
|
|
2121
|
+
* @param {string} content preview HTML
|
|
2122
|
+
* @param {'push' | 'sms' | 'inApp'} channel mobile view
|
|
2123
|
+
* @param {(text: string, field: 'display:title' | 'display:subtitle' | 'display:message' | 'button1:title' | 'button2:title' | 'display:media:url', context?: 'url' | 'padded') => string} replaceSlot slot replacement
|
|
2124
|
+
* @returns {string} updated HTML
|
|
2125
|
+
*/
|
|
2126
|
+
static _replaceMobilePreviewSlots(content, channel, replaceSlot) {
|
|
2127
|
+
// Consume comments as opaque matches so apparent slots inside them remain untouched.
|
|
2128
|
+
if (channel === 'inApp') {
|
|
2129
|
+
// One pass over original wrappers: inserted source is never visited as another slot.
|
|
2130
|
+
return content.replaceAll(
|
|
2131
|
+
/<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|(<style\b[^>]*>)([\s\S]*?)(<\/style\s*>)|(<header\b(?:[^>"']|"[^"]*"|'[^']*')*>\s*<h1\b[^>]*>)([^<]*)(<\/h1\s*>\s*<\/header\s*>)|(<(?:p|button)\b(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/(?:p|button)\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
|
|
2132
|
+
(
|
|
2133
|
+
match,
|
|
2134
|
+
styleOpen,
|
|
2135
|
+
css,
|
|
2136
|
+
styleClose,
|
|
2137
|
+
header,
|
|
2138
|
+
title,
|
|
2139
|
+
headerClose,
|
|
2140
|
+
open,
|
|
2141
|
+
text,
|
|
2142
|
+
close
|
|
2143
|
+
) => {
|
|
2144
|
+
if (styleOpen) {
|
|
2145
|
+
return (
|
|
2146
|
+
styleOpen +
|
|
2147
|
+
css.replaceAll(
|
|
2148
|
+
/((?:^|[{}])(?:\s|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*)(\.jmb-image\s*\{(?:[^{}/]|\/(?!\*)|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*\})|(\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)/g,
|
|
2149
|
+
(rule, prefix, block, comment) =>
|
|
2150
|
+
comment
|
|
2151
|
+
? rule
|
|
2152
|
+
: prefix +
|
|
2153
|
+
block.replaceAll(
|
|
2154
|
+
/\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/|([{;](?:\s|\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\/)*background(?:-image)?\s*:\s*url\()([^()]*)(\))/g,
|
|
2155
|
+
(url, before, value, after) =>
|
|
2156
|
+
before
|
|
2157
|
+
? before +
|
|
2158
|
+
replaceSlot(
|
|
2159
|
+
value,
|
|
2160
|
+
'display:media:url',
|
|
2161
|
+
'url'
|
|
2162
|
+
) +
|
|
2163
|
+
after
|
|
2164
|
+
: url
|
|
2165
|
+
)
|
|
2166
|
+
) +
|
|
2167
|
+
styleClose
|
|
2168
|
+
);
|
|
2169
|
+
}
|
|
2170
|
+
const attributes = [
|
|
2171
|
+
...(header || open || '').matchAll(/\s([\w:-]+)\s*=\s*(["'])(.*?)\2/gs),
|
|
2172
|
+
];
|
|
2173
|
+
const classes =
|
|
2174
|
+
attributes
|
|
2175
|
+
.find((attribute) => attribute[1].toLowerCase() === 'class')?.[3]
|
|
2176
|
+
.split(/\s+/) || [];
|
|
2177
|
+
if (header) {
|
|
2178
|
+
return classes.includes('jmb-header')
|
|
2179
|
+
? header + replaceSlot(title, 'display:title') + headerClose
|
|
2180
|
+
: match;
|
|
2181
|
+
}
|
|
2182
|
+
if (!open) {
|
|
2183
|
+
return match;
|
|
2184
|
+
}
|
|
2185
|
+
if (/^<p\b/i.test(open) && classes.includes('jmb-message')) {
|
|
2186
|
+
return open + replaceSlot(text, 'display:message') + close;
|
|
2187
|
+
}
|
|
2188
|
+
const buttons = classes.filter((name) =>
|
|
2189
|
+
['jmb-button-1', 'jmb-button-2'].includes(name)
|
|
2190
|
+
);
|
|
2191
|
+
if (!/^<button\b/i.test(open) || buttons.length !== 1) {
|
|
2192
|
+
return match;
|
|
2193
|
+
}
|
|
2194
|
+
const field = /** @type {'button1:title' | 'button2:title'} */ (
|
|
2195
|
+
`button${buttons[0].at(-1)}:title`
|
|
2196
|
+
);
|
|
2197
|
+
return (
|
|
2198
|
+
open.replaceAll(
|
|
2199
|
+
/(\s([\w:-]+)\s*=\s*)(["'])(.*?)\3/gs,
|
|
2200
|
+
(attribute, before, name, quote, value) =>
|
|
2201
|
+
name.toLowerCase() === 'title'
|
|
2202
|
+
? before + quote + replaceSlot(value, field) + quote
|
|
2203
|
+
: attribute
|
|
2204
|
+
) +
|
|
2205
|
+
replaceSlot(text, field, 'padded') +
|
|
2206
|
+
close
|
|
2207
|
+
);
|
|
2208
|
+
}
|
|
2209
|
+
);
|
|
2210
|
+
}
|
|
2211
|
+
if (channel === 'push') {
|
|
2212
|
+
// Match text-only divs with an exact class-list member, retaining every wrapper byte.
|
|
2213
|
+
return content.replaceAll(
|
|
2214
|
+
/<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|<style\b[^>]*>[\s\S]*?<\/style\s*>|(<div\b(?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(["'])([^"']*)\2(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/div\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
|
|
2215
|
+
(match, open, quote, classes, text, close) => {
|
|
2216
|
+
if (!open) {
|
|
2217
|
+
return match;
|
|
2218
|
+
}
|
|
2219
|
+
const fields = classes
|
|
2220
|
+
.split(/\s+/)
|
|
2221
|
+
.filter((name) => ['title', 'subtitle', 'message'].includes(name));
|
|
2222
|
+
return fields.length === 1
|
|
2223
|
+
? open +
|
|
2224
|
+
replaceSlot(
|
|
2225
|
+
text,
|
|
2226
|
+
/** @type {'display:title' | 'display:subtitle' | 'display:message'} */ (
|
|
2227
|
+
`display:${fields[0]}`
|
|
2228
|
+
)
|
|
2229
|
+
) +
|
|
2230
|
+
close
|
|
2231
|
+
: match;
|
|
2232
|
+
}
|
|
2233
|
+
);
|
|
2234
|
+
}
|
|
2235
|
+
// SMS embeds its message in a span inside the generated text-bubble div.
|
|
2236
|
+
return content.replaceAll(
|
|
2237
|
+
/<!--[\s\S]*?-->|<script\b[^>]*>[\s\S]*?<\/script\s*>|<style\b[^>]*>[\s\S]*?<\/style\s*>|(<div\b(?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(["'])([^"']*)\2(?:[^>"']|"[^"]*"|'[^']*')*>\s*<span\b(?:[^>"']|"[^"]*"|'[^']*')*>)([^<]*)(<\/span\s*>\s*<\/div\s*>)|<(?:[^>"']|"[^"]*"|'[^']*')*>/gi,
|
|
2238
|
+
(match, open, quote, classes, text, close) =>
|
|
2239
|
+
open && classes.split(/\s+/).includes('text-bubble')
|
|
2240
|
+
? open + replaceSlot(text, 'display:message') + close
|
|
2241
|
+
: match
|
|
2242
|
+
);
|
|
2243
|
+
}
|
|
2244
|
+
|
|
2245
|
+
/**
|
|
2246
|
+
* Restore mapped preview slots after final source merging, never during Mustache builds.
|
|
2247
|
+
*
|
|
2248
|
+
* @param {AssetItem} metadata asset with merged source
|
|
2249
|
+
* @returns {void} -
|
|
2250
|
+
*/
|
|
2251
|
+
static _restoreMobilePreview(metadata) {
|
|
2252
|
+
if (metadata.assetType.name !== 'jsonmessage') {
|
|
2253
|
+
return;
|
|
2254
|
+
}
|
|
2255
|
+
for (const channel of /** @type {const} */ (['push', 'sms', 'inApp'])) {
|
|
2256
|
+
const view = metadata.views?.[channel];
|
|
2257
|
+
const data = view?.meta?.options?.customBlockData;
|
|
2258
|
+
if (typeof view?.content !== 'string' || !data) {
|
|
2259
|
+
continue;
|
|
2260
|
+
}
|
|
2261
|
+
// One slot pass cannot rescan placeholder-like source inserted by another slot.
|
|
2262
|
+
view.content = this._replaceMobilePreviewSlots(
|
|
2263
|
+
view.content,
|
|
2264
|
+
channel,
|
|
2265
|
+
(text, field, context) => {
|
|
2266
|
+
const token = `[[[${field}]]]`;
|
|
2267
|
+
if (
|
|
2268
|
+
context
|
|
2269
|
+
? this._replaceMobilePreviewPadding(text, token, '') === text
|
|
2270
|
+
: text !== token
|
|
2271
|
+
) {
|
|
2272
|
+
return text;
|
|
2273
|
+
}
|
|
2274
|
+
let value = data[field];
|
|
2275
|
+
if (typeof value !== 'string') {
|
|
2276
|
+
// Only extracted title/message source can be absent after merging.
|
|
2277
|
+
if (
|
|
2278
|
+
this._getMobileCodeFields(metadata).every(
|
|
2279
|
+
(source) => !(source.channel === channel && source.field === field)
|
|
2280
|
+
)
|
|
2281
|
+
) {
|
|
2282
|
+
throw new TypeError(
|
|
2283
|
+
`Missing mobile preview source: ${channel}.${field}`
|
|
2284
|
+
);
|
|
2285
|
+
}
|
|
2286
|
+
value = '';
|
|
2287
|
+
}
|
|
2288
|
+
const escaped =
|
|
2289
|
+
context === 'url'
|
|
2290
|
+
? this._escapeMobilePreviewUrl(value)
|
|
2291
|
+
: this._escapeMobilePreview(value);
|
|
2292
|
+
return context
|
|
2293
|
+
? this._replaceMobilePreviewPadding(text, token, escaped)
|
|
2294
|
+
: escaped;
|
|
2295
|
+
}
|
|
2296
|
+
);
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
|
|
2300
|
+
/**
|
|
2301
|
+
* Extract editable source into sidecars.
|
|
2302
|
+
*
|
|
2303
|
+
* @param {AssetItem} metadata a single asset definition
|
|
2304
|
+
* @returns {CodeExtractItem} extracted source and JSON
|
|
1871
2305
|
*/
|
|
1872
2306
|
static _extractCode(metadata) {
|
|
1873
2307
|
const codeArr = [];
|
|
@@ -1875,9 +2309,33 @@ class Asset extends MetadataType {
|
|
|
1875
2309
|
// unfortunately, asset's key can contain spaces at beginning/end which can break the file system when folders are created with it
|
|
1876
2310
|
const customerKey = metadata.customerKey.trim();
|
|
1877
2311
|
switch (metadata.assetType.name) {
|
|
1878
|
-
case '
|
|
2312
|
+
case 'jsonmessage': {
|
|
2313
|
+
const fields = this._getMobileCodeFields(metadata);
|
|
2314
|
+
this._tokenizeMobilePreview(metadata);
|
|
2315
|
+
for (const { field, companion, data } of fields) {
|
|
2316
|
+
// Empty and plain strings are source too, matching the same editable file layout.
|
|
2317
|
+
if (typeof data[field] !== 'string') {
|
|
2318
|
+
continue;
|
|
2319
|
+
}
|
|
2320
|
+
codeArr.push({
|
|
2321
|
+
subFolder: null,
|
|
2322
|
+
fileName: `${field.replaceAll(':', '_')}`,
|
|
2323
|
+
fileExt: 'amp',
|
|
2324
|
+
content: data[field],
|
|
2325
|
+
});
|
|
2326
|
+
// Keep a single editable source; deployment normalizes the duplicate field.
|
|
2327
|
+
delete data[companion];
|
|
2328
|
+
delete data[field];
|
|
2329
|
+
}
|
|
2330
|
+
return {
|
|
2331
|
+
json: metadata,
|
|
2332
|
+
codeArr,
|
|
2333
|
+
subFolder: codeArr.length ? [customerKey] : null,
|
|
2334
|
+
};
|
|
2335
|
+
}
|
|
2336
|
+
case 'templatebasedemail': // email-templatebasedemail
|
|
1879
2337
|
case 'htmlemail': {
|
|
1880
|
-
//
|
|
2338
|
+
// email-htmlemail
|
|
1881
2339
|
// metadata.views.html.content (mandatory)
|
|
1882
2340
|
if (metadata.views?.html?.content?.length) {
|
|
1883
2341
|
codeArr.push({
|
|
@@ -1946,7 +2404,7 @@ class Asset extends MetadataType {
|
|
|
1946
2404
|
};
|
|
1947
2405
|
}
|
|
1948
2406
|
case 'textonlyemail': {
|
|
1949
|
-
//
|
|
2407
|
+
// email-textonlyemail
|
|
1950
2408
|
// metadata.views.text.content
|
|
1951
2409
|
if (metadata.views?.text?.content?.length) {
|
|
1952
2410
|
codeArr.push({
|
|
@@ -2077,58 +2535,58 @@ class Asset extends MetadataType {
|
|
|
2077
2535
|
*/
|
|
2078
2536
|
static _extractCode_slots(prefix, metadataSlots, codeArr) {
|
|
2079
2537
|
for (const slot in metadataSlots) {
|
|
2080
|
-
if (Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
for (const block in slotObj.blocks) {
|
|
2084
|
-
if (Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
|
|
2085
|
-
const asset = slotObj.blocks[block];
|
|
2086
|
-
if (asset.content) {
|
|
2087
|
-
// found content block
|
|
2088
|
-
const code = asset.content;
|
|
2089
|
-
codeArr.push({
|
|
2090
|
-
subFolder: ['blocks'],
|
|
2091
|
-
fileName: `${prefix}.[${slot}-${block}]`,
|
|
2092
|
-
fileExt: 'html',
|
|
2093
|
-
content: code,
|
|
2094
|
-
});
|
|
2095
|
-
delete asset.content;
|
|
2096
|
-
}
|
|
2097
|
-
// clean up fields from the other content block
|
|
2098
|
-
if (asset.id) {
|
|
2099
|
-
try {
|
|
2100
|
-
asset.r__asset_key = cache.searchForField(
|
|
2101
|
-
'asset',
|
|
2102
|
-
asset.id,
|
|
2103
|
-
'id',
|
|
2104
|
-
'customerKey'
|
|
2105
|
-
);
|
|
2106
|
-
// only delete this if we found the asset in cache, otherwise ignore
|
|
2107
|
-
delete asset.id;
|
|
2108
|
-
delete asset.objectID;
|
|
2109
|
-
delete asset.customerKey;
|
|
2110
|
-
delete asset.thumbnail;
|
|
2111
|
-
} catch {
|
|
2112
|
-
Util.logger.debug(
|
|
2113
|
-
` - asset id:${asset.id} / key:${asset.customerKey} / name:${asset.name} not found in cache`
|
|
2114
|
-
);
|
|
2115
|
-
}
|
|
2116
|
-
}
|
|
2117
|
-
if (asset.category?.id) {
|
|
2118
|
-
// if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
|
|
2119
|
-
delete asset.category;
|
|
2120
|
-
}
|
|
2538
|
+
if (!Object.prototype.hasOwnProperty.call(metadataSlots, slot)) {
|
|
2539
|
+
continue;
|
|
2540
|
+
}
|
|
2121
2541
|
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2542
|
+
const slotObj = metadataSlots[slot];
|
|
2543
|
+
// found slot
|
|
2544
|
+
for (const block in slotObj.blocks) {
|
|
2545
|
+
if (!Object.prototype.hasOwnProperty.call(slotObj.blocks, block)) {
|
|
2546
|
+
continue;
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
const asset = slotObj.blocks[block];
|
|
2550
|
+
if (asset.content) {
|
|
2551
|
+
// found content block
|
|
2552
|
+
const code = asset.content;
|
|
2553
|
+
codeArr.push({
|
|
2554
|
+
subFolder: ['blocks'],
|
|
2555
|
+
fileName: `${prefix}.[${slot}-${block}]`,
|
|
2556
|
+
fileExt: 'html',
|
|
2557
|
+
content: code,
|
|
2558
|
+
});
|
|
2559
|
+
delete asset.content;
|
|
2560
|
+
}
|
|
2561
|
+
// clean up fields from the other content block
|
|
2562
|
+
if (asset.id) {
|
|
2563
|
+
try {
|
|
2564
|
+
asset.r__asset_key = cache.searchForField(
|
|
2565
|
+
'asset',
|
|
2566
|
+
asset.id,
|
|
2567
|
+
'id',
|
|
2568
|
+
'customerKey'
|
|
2569
|
+
);
|
|
2570
|
+
// only delete this if we found the asset in cache, otherwise ignore
|
|
2571
|
+
delete asset.id;
|
|
2572
|
+
delete asset.objectID;
|
|
2573
|
+
delete asset.customerKey;
|
|
2574
|
+
delete asset.thumbnail;
|
|
2575
|
+
} catch {
|
|
2576
|
+
Util.logger.debug(
|
|
2577
|
+
` - asset id:${asset.id} / key:${asset.customerKey} / name:${asset.name} not found in cache`
|
|
2578
|
+
);
|
|
2130
2579
|
}
|
|
2131
2580
|
}
|
|
2581
|
+
if (asset.category?.id) {
|
|
2582
|
+
// if we convert this into a folder path then renamed folders might end up blocking deployments, therefore, we instead omit this detail from now on
|
|
2583
|
+
delete asset.category;
|
|
2584
|
+
}
|
|
2585
|
+
|
|
2586
|
+
if (asset.slots) {
|
|
2587
|
+
// * recursion: each block can have slots of its own
|
|
2588
|
+
this._extractCode_slots(`${prefix}.[${slot}-${block}]`, asset.slots, codeArr);
|
|
2589
|
+
}
|
|
2132
2590
|
}
|
|
2133
2591
|
}
|
|
2134
2592
|
}
|
|
@@ -2138,7 +2596,7 @@ class Asset extends MetadataType {
|
|
|
2138
2596
|
*
|
|
2139
2597
|
* @param {string} dir directory with json files, e.g. /retrieve/cred/bu/asset, /deploy/cred/bu/asset, /template/asset
|
|
2140
2598
|
* @param {boolean} [_] unused parameter
|
|
2141
|
-
* @param {string[]} [selectedSubType] asset,
|
|
2599
|
+
* @param {string[]} [selectedSubType] asset, email, ...
|
|
2142
2600
|
* @returns {Promise.<MetadataTypeMap>} fileName => fileContent map
|
|
2143
2601
|
*/
|
|
2144
2602
|
static async getJsonFromFS(dir, _, selectedSubType) {
|
|
@@ -2171,52 +2629,54 @@ class Asset extends MetadataType {
|
|
|
2171
2629
|
* @param {MetadataTypeMap} fileName2FileContent fileName => fileContent map
|
|
2172
2630
|
*/
|
|
2173
2631
|
static async _getJsonFromFS(currentdir, subtype, fileName2FileContent) {
|
|
2174
|
-
if (await File.pathExists(currentdir)) {
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2632
|
+
if (!(await File.pathExists(currentdir))) {
|
|
2633
|
+
return;
|
|
2634
|
+
}
|
|
2635
|
+
|
|
2636
|
+
const fileEnding = `.asset-${subtype}-meta.json`;
|
|
2637
|
+
const fileEndingLength = fileEnding.length;
|
|
2638
|
+
const files = await File.readdir(currentdir, { withFileTypes: true });
|
|
2639
|
+
for (const dirent of files) {
|
|
2640
|
+
const fileName = dirent.name;
|
|
2641
|
+
try {
|
|
2642
|
+
if (dirent.isDirectory()) {
|
|
2643
|
+
await this._getJsonFromFS(
|
|
2644
|
+
File.normalizePath([currentdir, fileName]),
|
|
2645
|
+
subtype,
|
|
2646
|
+
fileName2FileContent
|
|
2647
|
+
);
|
|
2648
|
+
} else if (fileName.endsWith('.json')) {
|
|
2649
|
+
const errorDir = currentdir.replaceAll('\\', '/');
|
|
2650
|
+
const fileContent = await File.readJSONFile(currentdir, fileName, false);
|
|
2651
|
+
// ! convert numbers to string to allow numeric keys to be checked properly
|
|
2652
|
+
const key = Number.isInteger(fileContent[this.definition.keyField])
|
|
2653
|
+
? fileContent[this.definition.keyField].toString()
|
|
2654
|
+
: fileContent[this.definition.keyField];
|
|
2655
|
+
if (fileName.endsWith(fileEnding)) {
|
|
2656
|
+
// subtype will change the metadata suffix length
|
|
2657
|
+
const fileNameWithoutEnding = File.reverseFilterIllegalFilenames(
|
|
2658
|
+
fileName.slice(0, -fileEndingLength)
|
|
2186
2659
|
);
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
const fileContent = await File.readJSONFile(currentdir, fileName, false);
|
|
2190
|
-
// ! convert numbers to string to allow numeric keys to be checked properly
|
|
2191
|
-
const key = Number.isInteger(fileContent[this.definition.keyField])
|
|
2192
|
-
? fileContent[this.definition.keyField].toString()
|
|
2193
|
-
: fileContent[this.definition.keyField];
|
|
2194
|
-
if (fileName.endsWith(fileEnding)) {
|
|
2195
|
-
// subtype will change the metadata suffix length
|
|
2196
|
-
const fileNameWithoutEnding = File.reverseFilterIllegalFilenames(
|
|
2197
|
-
fileName.slice(0, -fileEndingLength)
|
|
2198
|
-
);
|
|
2199
|
-
if (key === fileNameWithoutEnding) {
|
|
2200
|
-
fileName2FileContent[fileNameWithoutEnding] = fileContent;
|
|
2201
|
-
} else {
|
|
2202
|
-
Util.logger.error(
|
|
2203
|
-
` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file and the JSON-key (${this.definition.keyField}) must match. Expected: ${key}${fileEnding}. Actual: ` +
|
|
2204
|
-
Util.getGrayMsg(`${errorDir}/`) +
|
|
2205
|
-
fileName
|
|
2206
|
-
);
|
|
2207
|
-
}
|
|
2660
|
+
if (key === fileNameWithoutEnding) {
|
|
2661
|
+
fileName2FileContent[fileNameWithoutEnding] = fileContent;
|
|
2208
2662
|
} else {
|
|
2209
2663
|
Util.logger.error(
|
|
2210
|
-
` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file
|
|
2664
|
+
` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file and the JSON-key (${this.definition.keyField}) must match. Expected: ${key}${fileEnding}. Actual: ` +
|
|
2211
2665
|
Util.getGrayMsg(`${errorDir}/`) +
|
|
2212
2666
|
fileName
|
|
2213
2667
|
);
|
|
2214
2668
|
}
|
|
2669
|
+
} else {
|
|
2670
|
+
Util.logger.error(
|
|
2671
|
+
` ☇ skipping ${this.definition.type} ${key}: Name of the metadata file must end on the extended metadata suffix. Expected: ${key}${fileEnding}. Actual: ` +
|
|
2672
|
+
Util.getGrayMsg(`${errorDir}/`) +
|
|
2673
|
+
fileName
|
|
2674
|
+
);
|
|
2215
2675
|
}
|
|
2216
|
-
} catch (ex) {
|
|
2217
|
-
// by catching this in the loop we gracefully handle the issue and move on to the next file
|
|
2218
|
-
Util.metadataLogger('debug', this.definition.type, 'getJsonFromFS', ex);
|
|
2219
2676
|
}
|
|
2677
|
+
} catch (ex) {
|
|
2678
|
+
// by catching this in the loop we gracefully handle the issue and move on to the next file
|
|
2679
|
+
Util.metadataLogger('debug', this.definition.type, 'getJsonFromFS', ex);
|
|
2220
2680
|
}
|
|
2221
2681
|
}
|
|
2222
2682
|
}
|
|
@@ -2316,14 +2776,25 @@ class Asset extends MetadataType {
|
|
|
2316
2776
|
) {
|
|
2317
2777
|
// #1 load json to be able to find extracted text files & binary files
|
|
2318
2778
|
const metadata = await File.readJSONFile(filePath, fileName, false);
|
|
2779
|
+
if (!metadata) {
|
|
2780
|
+
throw new Error(
|
|
2781
|
+
`Cannot discover associated asset files: invalid JSON in ${File.normalizePath([...filePath, fileName])}`
|
|
2782
|
+
);
|
|
2783
|
+
}
|
|
2319
2784
|
// #2 find all extracted text files
|
|
2320
2785
|
const fileListNested = (
|
|
2321
|
-
await this._mergeCode(
|
|
2786
|
+
await this._mergeCode(
|
|
2787
|
+
metadata,
|
|
2788
|
+
basePath,
|
|
2789
|
+
subType,
|
|
2790
|
+
metadata.customerKey,
|
|
2791
|
+
true
|
|
2792
|
+
)
|
|
2322
2793
|
).map((item) =>
|
|
2323
2794
|
File.normalizePath([
|
|
2324
2795
|
basePath,
|
|
2325
2796
|
...item.subFolder,
|
|
2326
|
-
`${item.fileName}.${item.fileExt}
|
|
2797
|
+
File.filterIllegalFilenames(`${item.fileName}.${item.fileExt}`),
|
|
2327
2798
|
])
|
|
2328
2799
|
);
|
|
2329
2800
|
// ensure we dont overlook other versions when using this logic to auto-delete older files
|
|
@@ -2605,7 +3076,6 @@ class Asset extends MetadataType {
|
|
|
2605
3076
|
`404. Try running mcdev r ${this.buObject.credential}/${ownerBUName} ${this.definition.type}-${subType} ${item[this.definition.keyField]}`)
|
|
2606
3077
|
);
|
|
2607
3078
|
}
|
|
2608
|
-
return json;
|
|
2609
3079
|
} else {
|
|
2610
3080
|
json.error = 'id not found';
|
|
2611
3081
|
delete json.key;
|
|
@@ -2621,8 +3091,8 @@ class Asset extends MetadataType {
|
|
|
2621
3091
|
return json;
|
|
2622
3092
|
}
|
|
2623
3093
|
Util.logger.error(` - ${this.definition.type} with id ${id} not found on BU`);
|
|
2624
|
-
return json;
|
|
2625
3094
|
}
|
|
3095
|
+
return json;
|
|
2626
3096
|
}
|
|
2627
3097
|
|
|
2628
3098
|
/**
|
|
@@ -2692,7 +3162,7 @@ class Asset extends MetadataType {
|
|
|
2692
3162
|
const subType = this.#getMainSubtype(item.assetType.name);
|
|
2693
3163
|
/** @type {CodeExtract[]} */
|
|
2694
3164
|
const fileList = await this._mergeCode(
|
|
2695
|
-
item,
|
|
3165
|
+
structuredClone(item),
|
|
2696
3166
|
retrieveDir,
|
|
2697
3167
|
subType,
|
|
2698
3168
|
item[this.definition.keyField],
|
|
@@ -2714,10 +3184,42 @@ class Asset extends MetadataType {
|
|
|
2714
3184
|
}
|
|
2715
3185
|
}
|
|
2716
3186
|
}
|
|
3187
|
+
// Inline companions without a canonical sidecar still participate in reference replacement.
|
|
3188
|
+
let companionsChanged = false;
|
|
3189
|
+
if (item.assetType.name === 'jsonmessage') {
|
|
3190
|
+
for (const { field, companion: alias, data } of this._getMobileCodeFields(
|
|
3191
|
+
responseItem
|
|
3192
|
+
)) {
|
|
3193
|
+
if (
|
|
3194
|
+
fileList.some((file) =>
|
|
3195
|
+
file.fileName.startsWith(`${field.replaceAll(':', '_')}.`)
|
|
3196
|
+
) ||
|
|
3197
|
+
typeof data[alias] !== 'string'
|
|
3198
|
+
) {
|
|
3199
|
+
continue;
|
|
3200
|
+
}
|
|
3201
|
+
try {
|
|
3202
|
+
const content = ReplaceCbReference.replaceReference(
|
|
3203
|
+
data[alias],
|
|
3204
|
+
parentName,
|
|
3205
|
+
findAssetKeys
|
|
3206
|
+
);
|
|
3207
|
+
if (!findAssetKeys) {
|
|
3208
|
+
data[alias] = content;
|
|
3209
|
+
companionsChanged = true;
|
|
3210
|
+
}
|
|
3211
|
+
changes = true;
|
|
3212
|
+
} catch (ex) {
|
|
3213
|
+
if (ex.code !== 200) {
|
|
3214
|
+
error = ex;
|
|
3215
|
+
}
|
|
3216
|
+
}
|
|
3217
|
+
}
|
|
3218
|
+
}
|
|
2717
3219
|
if (!findAssetKeys) {
|
|
2718
3220
|
// save what was changed regardless of other errors
|
|
2719
3221
|
for (const extractedFile of fileListChanged) {
|
|
2720
|
-
File.writeToFile(
|
|
3222
|
+
await File.writeToFile(
|
|
2721
3223
|
[retrieveDir, ...extractedFile.subFolder],
|
|
2722
3224
|
extractedFile.fileName,
|
|
2723
3225
|
extractedFile.fileExt,
|
|
@@ -2725,6 +3227,18 @@ class Asset extends MetadataType {
|
|
|
2725
3227
|
extractedFile.encoding || null
|
|
2726
3228
|
);
|
|
2727
3229
|
}
|
|
3230
|
+
if (companionsChanged) {
|
|
3231
|
+
// Asset's replacement loop deliberately skips saveToDisk to preserve extracts.
|
|
3232
|
+
const customerKey = item[this.definition.keyField].trim();
|
|
3233
|
+
const fileName = `${customerKey}.${this.definition.type}-${subType}-meta`;
|
|
3234
|
+
const baseDir = [retrieveDir, this.definition.type, subType];
|
|
3235
|
+
const jsonDir = (await File.pathExists(
|
|
3236
|
+
File.normalizePath([...baseDir, customerKey, `${fileName}.json`])
|
|
3237
|
+
))
|
|
3238
|
+
? [...baseDir, customerKey]
|
|
3239
|
+
: baseDir;
|
|
3240
|
+
await File.writeJSONToFile(jsonDir, fileName, responseItem);
|
|
3241
|
+
}
|
|
2728
3242
|
}
|
|
2729
3243
|
|
|
2730
3244
|
if (error) {
|
|
@@ -2847,10 +3361,12 @@ class Asset extends MetadataType {
|
|
|
2847
3361
|
if (newKeysFound.size) {
|
|
2848
3362
|
const keysToCrawl = [];
|
|
2849
3363
|
for (const value of newKeysFound) {
|
|
2850
|
-
if (
|
|
2851
|
-
|
|
2852
|
-
keysToCrawl.push(value);
|
|
3364
|
+
if (keyArr.includes(value)) {
|
|
3365
|
+
continue;
|
|
2853
3366
|
}
|
|
3367
|
+
|
|
3368
|
+
keyArr.push(value);
|
|
3369
|
+
keysToCrawl.push(value);
|
|
2854
3370
|
}
|
|
2855
3371
|
Util.logger.info(Util.getGrayMsg(` - asset: ${keysToCrawl.join(', ')}`));
|
|
2856
3372
|
|
|
@@ -2910,6 +3426,55 @@ class Asset extends MetadataType {
|
|
|
2910
3426
|
}
|
|
2911
3427
|
}
|
|
2912
3428
|
|
|
3429
|
+
/**
|
|
3430
|
+
* Collect content strings from an asset and its nested views, slots and blocks.
|
|
3431
|
+
*
|
|
3432
|
+
* @param {object} item asset or nested content node
|
|
3433
|
+
* @returns {string[]} content strings available in the query response
|
|
3434
|
+
*/
|
|
3435
|
+
static _getReferenceContents(item) {
|
|
3436
|
+
const contents = [];
|
|
3437
|
+
if (typeof item?.content === 'string') {
|
|
3438
|
+
contents.push(item.content);
|
|
3439
|
+
}
|
|
3440
|
+
for (const field of ['views', 'slots', 'blocks']) {
|
|
3441
|
+
for (const child of Object.values(item?.[field] || {})) {
|
|
3442
|
+
contents.push(...this._getReferenceContents(child));
|
|
3443
|
+
}
|
|
3444
|
+
}
|
|
3445
|
+
return contents;
|
|
3446
|
+
}
|
|
3447
|
+
|
|
3448
|
+
/**
|
|
3449
|
+
* Match literal first arguments only, without evaluating dynamic expressions.
|
|
3450
|
+
*
|
|
3451
|
+
* @param {string} content asset content
|
|
3452
|
+
* @param {{key: Set.<string>, id: Set.<string>, name: Set.<string>}} references target identifiers
|
|
3453
|
+
* @returns {boolean} whether the content references a target block
|
|
3454
|
+
*/
|
|
3455
|
+
static _hasLiteralBlockReference(content, references) {
|
|
3456
|
+
const regex =
|
|
3457
|
+
/(?<![\w.])(?<ssjs>Platform\.Function\.)?ContentBlockBy(?<by>Key|Id|Name)\s*\(\s*(?:"(?<double>[^"]*)"|'(?<single>[^']*)'|(?<numeric>[0-9]+))\s*(?=[,)])/gim;
|
|
3458
|
+
for (const match of content.matchAll(regex)) {
|
|
3459
|
+
const { ssjs, by, double, single, numeric } = match.groups;
|
|
3460
|
+
const kind = by.toLowerCase();
|
|
3461
|
+
if (numeric !== undefined && kind !== 'id') {
|
|
3462
|
+
continue;
|
|
3463
|
+
}
|
|
3464
|
+
let identifier = double ?? single ?? numeric;
|
|
3465
|
+
if (kind === 'id' && !/^[0-9]+$/.test(identifier)) {
|
|
3466
|
+
continue;
|
|
3467
|
+
}
|
|
3468
|
+
if (kind === 'name' && ssjs) {
|
|
3469
|
+
identifier = identifier.replaceAll('\\\\', '\\');
|
|
3470
|
+
}
|
|
3471
|
+
if (references[kind].has(identifier)) {
|
|
3472
|
+
return true;
|
|
3473
|
+
}
|
|
3474
|
+
}
|
|
3475
|
+
return false;
|
|
3476
|
+
}
|
|
3477
|
+
|
|
2913
3478
|
/**
|
|
2914
3479
|
* helper for {@link MetadataType.createOrUpdate}
|
|
2915
3480
|
*
|
|
@@ -2980,11 +3545,97 @@ class Asset extends MetadataType {
|
|
|
2980
3545
|
}
|
|
2981
3546
|
return cacheMatchedByName;
|
|
2982
3547
|
}
|
|
3548
|
+
/**
|
|
3549
|
+
* Finds emails in running journeys, filters out the ones that reference the block (if it's a block) and refreshes related TSDs
|
|
3550
|
+
*
|
|
3551
|
+
* @param {string[]} keyArr metadata keys
|
|
3552
|
+
* @returns {Promise.<string[]>} Returns list of keys that were refreshed
|
|
3553
|
+
*/
|
|
3554
|
+
static async refresh(keyArr) {
|
|
3555
|
+
if (!Array.isArray(keyArr)) {
|
|
3556
|
+
throw new TypeError('Asset.refresh requires an explicit array of keys');
|
|
3557
|
+
}
|
|
3558
|
+
if (!keyArr.length) {
|
|
3559
|
+
return [];
|
|
3560
|
+
}
|
|
3561
|
+
const codeBlocks = [];
|
|
3562
|
+
const toPublish = [];
|
|
3563
|
+
|
|
3564
|
+
Util.logger.info(' - Caching dependent Metadata: asset');
|
|
3565
|
+
const assets = await this.retrieveForCache(undefined, undefined, undefined, false);
|
|
3566
|
+
cache.mergeMetadata('asset', assets.metadata);
|
|
3567
|
+
|
|
3568
|
+
Util.logger.info(' - Caching dependent Metadata: shared-asset');
|
|
3569
|
+
const sharedAssets = await this.retrieveForCache(undefined, undefined, undefined, true);
|
|
3570
|
+
cache.mergeMetadata('asset', sharedAssets.metadata);
|
|
3571
|
+
|
|
3572
|
+
for (const key of keyArr) {
|
|
3573
|
+
const item = cache.getByKey(this.definition.type, key);
|
|
3574
|
+
if (!item) {
|
|
3575
|
+
Util.logger.warn(` - Could not find asset in cache for key: ${key}, skipping`);
|
|
3576
|
+
continue;
|
|
3577
|
+
}
|
|
3578
|
+
if (this.definition.extendedSubTypes.email.includes(item?.assetType?.name)) {
|
|
3579
|
+
toPublish.push(item);
|
|
3580
|
+
// refreshing code blocks referenced with ContentBlockBy
|
|
3581
|
+
} else if (
|
|
3582
|
+
this.definition.extendedSubTypes.block.includes(item?.assetType?.name) ||
|
|
3583
|
+
this.definition.extendedSubTypes.other.includes(item?.assetType?.name)
|
|
3584
|
+
) {
|
|
3585
|
+
codeBlocks.push(item);
|
|
3586
|
+
}
|
|
3587
|
+
}
|
|
3588
|
+
if (codeBlocks.length > 0) {
|
|
3589
|
+
if (!cache.getCache().folder) {
|
|
3590
|
+
// Name-based block references require local and shared Content Builder paths.
|
|
3591
|
+
Folder.client = this.client;
|
|
3592
|
+
Folder.buObject = this.buObject;
|
|
3593
|
+
Folder.properties = this.properties;
|
|
3594
|
+
const folders = await Folder.retrieveForCache(null, ['asset', 'asset-shared']);
|
|
3595
|
+
cache.setMetadata('folder', folders.metadata);
|
|
3596
|
+
}
|
|
3597
|
+
toPublish.push(...Object.values(await this._findEmailsUsingBlock(codeBlocks)));
|
|
3598
|
+
}
|
|
3599
|
+
Util.logger.info(
|
|
3600
|
+
` - Found ${toPublish.length} assets to publish. Looking up triggered sends for the following emails: ${toPublish.map((e) => e.name)}`
|
|
3601
|
+
);
|
|
3602
|
+
return toPublish.length ? await this._refreshTriggeredSend(toPublish) : [];
|
|
3603
|
+
}
|
|
3604
|
+
|
|
3605
|
+
/**
|
|
3606
|
+
* enables metadata definitions required for sharing assets
|
|
3607
|
+
*
|
|
3608
|
+
* @param {boolean} keepSharingInfo true to enable, false to disable
|
|
3609
|
+
* @returns {void}
|
|
3610
|
+
*/
|
|
3611
|
+
static _toggleShareAssetTemplating(keepSharingInfo) {
|
|
3612
|
+
const sharingProperties = [
|
|
3613
|
+
'businessUnitAvailability',
|
|
3614
|
+
'businessUnitAvailability.%',
|
|
3615
|
+
'businessUnitAvailability[].view',
|
|
3616
|
+
'businessUnitAvailability[].update',
|
|
3617
|
+
'businessUnitAvailability[].delete',
|
|
3618
|
+
'businessUnitAvailability[].memberId',
|
|
3619
|
+
'businessUnitAvailability[].transferOwnership',
|
|
3620
|
+
'sharingProperties',
|
|
3621
|
+
'sharingProperties.sharedWith',
|
|
3622
|
+
'sharingProperties.sharingType',
|
|
3623
|
+
];
|
|
3624
|
+
|
|
3625
|
+
// the above fields are already creatable, updateable and and retrievable - but they are filtered for templating which we seek to override
|
|
3626
|
+
for (const property of sharingProperties) {
|
|
3627
|
+
this.definition.fields[property] = {
|
|
3628
|
+
// isCreateable: true,
|
|
3629
|
+
// isUpdateable: true,
|
|
3630
|
+
// retrieving: true,
|
|
3631
|
+
template: keepSharingInfo,
|
|
3632
|
+
};
|
|
3633
|
+
}
|
|
3634
|
+
}
|
|
2983
3635
|
}
|
|
2984
3636
|
|
|
2985
3637
|
// Assign definition to static attributes
|
|
2986
3638
|
import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js';
|
|
2987
|
-
|
|
2988
3639
|
Asset.definition = MetadataTypeDefinitions.asset;
|
|
2989
3640
|
|
|
2990
3641
|
export default Asset;
|