From acd558f5b3efb1ceb059b4831fe879097b3d73f0 Mon Sep 17 00:00:00 2001 From: Yuliia Likhytska Date: Sat, 7 Oct 2023 23:53:29 +0200 Subject: [PATCH 1/4] #1020: pause journey --- docs/dist/documentation.md | 30 +++++++++++++++++++++ lib/metadataTypes/Journey.js | 52 ++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 8869a8e2e..1d5502116 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -213,6 +213,9 @@ Provides default functionality that can be overwritten by child metadata type cl
Automation.(metadataMap, originalMetadataMap, key)Promise.<object>

helper for postDeployTasks

+
Journey.(metadata, definitionKey, versionNumber)Promise.<object>
+

helper for pause

+
getUserName(userList, item, fieldname)string
setupSDK(sessionKey, authObject)SDK
@@ -2973,6 +2976,7 @@ definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' + * [.pause(keyArr)](#Journey.pause) ⇒ Promise.<boolean> @@ -3107,6 +3111,18 @@ helper for [upsert](#MetadataType.upsert) | metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | | metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | + + +### Journey.pause(keyArr) ⇒ Promise.<boolean> +a function to pause journey via API + +**Kind**: static method of [Journey](#Journey) +**Returns**: Promise.<boolean> - Returns true if all items were executed successfully, otherwise false + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + ## List ⇐ [MetadataType](#MetadataType) @@ -8378,6 +8394,20 @@ helper for [postDeployTasks](#Automation.postDeployTasks) | originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | | key | string | current customer key | + + +## Journey.(metadata, definitionKey, versionNumber) ⇒ Promise.<object> +helper for [pause](#Journey.pause) + +**Kind**: global function +**Returns**: Promise.<object> - response: no errors in case of success + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.JourneyItem | journey metadata | +| definitionKey | TYPE.JourneyItem | journey definitionKey | +| versionNumber | TYPE.JourneyItem | journey versionNumber | + ## getUserName(userList, item, fieldname) ⇒ string diff --git a/lib/metadataTypes/Journey.js b/lib/metadataTypes/Journey.js index 1719dfe47..668c48587 100644 --- a/lib/metadataTypes/Journey.js +++ b/lib/metadataTypes/Journey.js @@ -926,6 +926,58 @@ class Journey extends MetadataType { } return action; } + /** + * a function to pause journey via API + * + * @param {string[]} keyArr customerkey of the metadata + * @returns {Promise.} Returns true if all items were executed successfully, otherwise false + */ + static async pause(keyArr) { + const metadataMap = {}; + const promiseResults = []; + Util.logger.info(`Pausing journeys: ${Object.keys(metadataMap).length}`); + for (const key of keyArr) { + promiseResults.push(await this.#pauseItem(null, key)); + } // a51e3ff3-7cdd-4fe5-92cb-8711c5bb7149 + // const successCounter = (await Promise.all(promiseResults)) + // .filter(Boolean) + // .filter((r) => r.OverallStatus === 'OK').length; + + // Util.logger.info(`Paused ${successCounter} of ${keyArr.length} items`); + // return successCounter === keyArr.length; + return true; + } + /** + * helper for {@link Journey.pause} + * + * @param {TYPE.JourneyItem} metadata journey metadata + * @param {TYPE.JourneyItem} definitionKey journey definitionKey + * @param {TYPE.JourneyItem} versionNumber journey versionNumber + * @returns {Promise.} response: no errors in case of success + */ + static async #pauseItem(metadata, definitionKey, versionNumber) { + let response; + try { + response = await (versionNumber + ? this.client.rest.post( + `/interaction/v1/interactions/pause/key:${definitionKey}?versionNumber=${versionNumber}`, + metadata + ) + : this.client.rest.post( + `/interaction/v1/interactions/pause/key:${definitionKey}`, + metadata + )); + Util.logger.info( + ` - paused ${this.definition.type}: ${metadata[this.definition.keyField]} / ${ + metadata[this.definition.nameField] + }` + ); + return response; + } catch { + // this._handleSOAPErrors(ex, 'pausing', metadata, false); + return null; + } + } } // Assign definition to static attributes From d869912a01f8ba859594725443904f5063939fdb Mon Sep 17 00:00:00 2001 From: Yuliia Likhytska Date: Sun, 8 Oct 2023 13:32:27 +0200 Subject: [PATCH 2/4] #1020: pause journey --- docs/dist/documentation.md | 38 ++++++++--------- lib/metadataTypes/Journey.js | 68 +++++++++++-------------------- lib/metadataTypes/MetadataType.js | 19 +++++++++ 3 files changed, 60 insertions(+), 65 deletions(-) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index a17c61457..6257faa71 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -240,9 +240,6 @@ helper for DataExtension.#fixShared_item

delete the field added by DataExtension.#fixShared_item_addField helper for DataExtension.#fixShared_item

-
Journey.(metadata, definitionKey, versionNumber)Promise.<object>
-

helper for pause

-
getUserName(userList, item, fieldname)string
setupSDK(sessionKey, authObject)SDK
@@ -3170,7 +3167,7 @@ definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.pause(keyArr)](#Journey.pause) ⇒ Promise.<boolean> + * [.pause(definitionIDs, versionNumber)](#Journey.pause) ⇒ Promise.<boolean> @@ -3307,7 +3304,7 @@ helper for [upsert](#MetadataType.upsert) -### Journey.pause(keyArr) ⇒ Promise.<boolean> +### Journey.pause(definitionIDs, versionNumber) ⇒ Promise.<boolean> a function to pause journey via API **Kind**: static method of [Journey](#Journey) @@ -3315,7 +3312,8 @@ a function to pause journey via API | Param | Type | Description | | --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | +| definitionIDs | Array.<string> | definitionIDs of the metadata | +| versionNumber | string | versionNumber of the journey | @@ -3441,6 +3439,7 @@ Provides default functionality that can be overwritten by child metadata type cl * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.pauseREST(uri, id)](#MetadataType.pauseREST) ⇒ Promise.<{key:string, response:string}> * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap @@ -3956,6 +3955,19 @@ Used to execute a query/automation etc. | uri | string | REST endpoint where the POST request should be sent | | key | string | item key | + + +### MetadataType.pauseREST(uri, id) ⇒ Promise.<{key:string, response:string}> +Used to pause a journey etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:string}> - metadata id and API response (OK or error) + +| Param | Type | Description | +| --- | --- | --- | +| uri | string | REST endpoint where the POST request should be sent | +| id | string | item id | + ### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> @@ -8445,20 +8457,6 @@ helper for [DataExtension.#fixShared_item](DataExtension.#fixShared_item) | deKey | string | dataExtension key | | fieldObjectID | string | field ObjectID | - - -## Journey.(metadata, definitionKey, versionNumber) ⇒ Promise.<object> -helper for [pause](#Journey.pause) - -**Kind**: global function -**Returns**: Promise.<object> - response: no errors in case of success - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.JourneyItem | journey metadata | -| definitionKey | TYPE.JourneyItem | journey definitionKey | -| versionNumber | TYPE.JourneyItem | journey versionNumber | - ## getUserName(userList, item, fieldname) ⇒ string diff --git a/lib/metadataTypes/Journey.js b/lib/metadataTypes/Journey.js index 5b687af30..bdd12be74 100644 --- a/lib/metadataTypes/Journey.js +++ b/lib/metadataTypes/Journey.js @@ -936,54 +936,32 @@ class Journey extends MetadataType { /** * a function to pause journey via API * - * @param {string[]} keyArr customerkey of the metadata + * @param {string[]} definitionIDs definitionIDs of the metadata + * @param {string} versionNumber versionNumber of the journey * @returns {Promise.} Returns true if all items were executed successfully, otherwise false */ - static async pause(keyArr) { - const metadataMap = {}; - const promiseResults = []; - Util.logger.info(`Pausing journeys: ${Object.keys(metadataMap).length}`); - for (const key of keyArr) { - promiseResults.push(await this.#pauseItem(null, key)); - } // a51e3ff3-7cdd-4fe5-92cb-8711c5bb7149 - // const successCounter = (await Promise.all(promiseResults)) - // .filter(Boolean) - // .filter((r) => r.OverallStatus === 'OK').length; - - // Util.logger.info(`Paused ${successCounter} of ${keyArr.length} items`); - // return successCounter === keyArr.length; - return true; - } - /** - * helper for {@link Journey.pause} - * - * @param {TYPE.JourneyItem} metadata journey metadata - * @param {TYPE.JourneyItem} definitionKey journey definitionKey - * @param {TYPE.JourneyItem} versionNumber journey versionNumber - * @returns {Promise.} response: no errors in case of success - */ - static async #pauseItem(metadata, definitionKey, versionNumber) { - let response; - try { - response = await (versionNumber - ? this.client.rest.post( - `/interaction/v1/interactions/pause/key:${definitionKey}?versionNumber=${versionNumber}`, - metadata - ) - : this.client.rest.post( - `/interaction/v1/interactions/pause/key:${definitionKey}`, - metadata - )); - Util.logger.info( - ` - paused ${this.definition.type}: ${metadata[this.definition.keyField]} / ${ - metadata[this.definition.nameField] - }` - ); - return response; - } catch { - // this._handleSOAPErrors(ex, 'pausing', metadata, false); - return null; + static async pause(definitionIDs, versionNumber) { + const results = []; + Util.logger.info(`Pausing journeys: ${definitionIDs.length}`); + for (const id of definitionIDs) { + if (versionNumber) { + results.push( + super.pauseREST( + `/interaction/v1/interactions/pause/${id}?versionNumber=${versionNumber}`, + id + ) + ); + } else { + results.push( + super.pauseREST(`/interaction/v1/interactions/pause/${id}?AllVersions=true`, id) + ); + } } + const pausedKIDsArr = (await Promise.all(results)) + .filter((r) => r.response === 'OK') + .map((r) => r.id); + Util.logger.info(`Paused ${pausedKIDsArr.length} of ${definitionIDs.length} items`); + return results; } } diff --git a/lib/metadataTypes/MetadataType.js b/lib/metadataTypes/MetadataType.js index 2ea9cb9c2..4b2f641a3 100644 --- a/lib/metadataTypes/MetadataType.js +++ b/lib/metadataTypes/MetadataType.js @@ -1166,6 +1166,25 @@ class MetadataType { Util.logger.error(`Failed to execute ${this.definition.type} ${key}: ${ex.message}`); } } + /** + * Used to pause a journey etc. + * + * @param {string} uri REST endpoint where the POST request should be sent + * @param {string} id item id + * @returns {Promise.<{key:string, response:string}>} metadata id and API response (OK or error) + */ + static async pauseREST(uri, id) { + let response; + try { + await this.client.rest.post(uri, {}); // payload is empty for this request + response = 'OK'; + Util.logger.info(` - paused ${this.definition.type}: ${id}`); + } catch (ex) { + response = ex.message; + Util.logger.error(`Failed to pause ${this.definition.type} ${id}: ${ex.message}`); + } + return { id, response }; + } /** * Used to execute a query/automation etc. From 1cca284bced41bf5b518ffc2d81fd6411ca1eb9b Mon Sep 17 00:00:00 2001 From: Yuliia Likhytska Date: Wed, 11 Oct 2023 20:21:48 +0200 Subject: [PATCH 3/4] Revert "#1020: pause journey" This reverts commit acd558f5b3efb1ceb059b4831fe879097b3d73f0. --- docs/dist/documentation.md | 14 -------------- lib/metadataTypes/Journey.js | 30 ------------------------------ 2 files changed, 44 deletions(-) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 6257faa71..8764f393e 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -3167,7 +3167,6 @@ definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.pause(definitionIDs, versionNumber)](#Journey.pause) ⇒ Promise.<boolean> @@ -3302,19 +3301,6 @@ helper for [upsert](#MetadataType.upsert) | metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | | metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - -### Journey.pause(definitionIDs, versionNumber) ⇒ Promise.<boolean> -a function to pause journey via API - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<boolean> - Returns true if all items were executed successfully, otherwise false - -| Param | Type | Description | -| --- | --- | --- | -| definitionIDs | Array.<string> | definitionIDs of the metadata | -| versionNumber | string | versionNumber of the journey | - ## List ⇐ [MetadataType](#MetadataType) diff --git a/lib/metadataTypes/Journey.js b/lib/metadataTypes/Journey.js index bdd12be74..599b4cd58 100644 --- a/lib/metadataTypes/Journey.js +++ b/lib/metadataTypes/Journey.js @@ -933,36 +933,6 @@ class Journey extends MetadataType { } return action; } - /** - * a function to pause journey via API - * - * @param {string[]} definitionIDs definitionIDs of the metadata - * @param {string} versionNumber versionNumber of the journey - * @returns {Promise.} Returns true if all items were executed successfully, otherwise false - */ - static async pause(definitionIDs, versionNumber) { - const results = []; - Util.logger.info(`Pausing journeys: ${definitionIDs.length}`); - for (const id of definitionIDs) { - if (versionNumber) { - results.push( - super.pauseREST( - `/interaction/v1/interactions/pause/${id}?versionNumber=${versionNumber}`, - id - ) - ); - } else { - results.push( - super.pauseREST(`/interaction/v1/interactions/pause/${id}?AllVersions=true`, id) - ); - } - } - const pausedKIDsArr = (await Promise.all(results)) - .filter((r) => r.response === 'OK') - .map((r) => r.id); - Util.logger.info(`Paused ${pausedKIDsArr.length} of ${definitionIDs.length} items`); - return results; - } } // Assign definition to static attributes From 7836aa31840f8804d6e1b92beec2eacd3beeb4bd Mon Sep 17 00:00:00 2001 From: Yuliia Likhytska Date: Wed, 11 Oct 2023 20:25:14 +0200 Subject: [PATCH 4/4] Revert "#1020: pause journey" This reverts commit d869912a01f8ba859594725443904f5063939fdb. --- docs/dist/documentation.md | 14 -------------- lib/metadataTypes/MetadataType.js | 19 ------------------- 2 files changed, 33 deletions(-) diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 8764f393e..8d6096308 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -3425,7 +3425,6 @@ Provides default functionality that can be overwritten by child metadata type cl * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.pauseREST(uri, id)](#MetadataType.pauseREST) ⇒ Promise.<{key:string, response:string}> * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap @@ -3941,19 +3940,6 @@ Used to execute a query/automation etc. | uri | string | REST endpoint where the POST request should be sent | | key | string | item key | - - -### MetadataType.pauseREST(uri, id) ⇒ Promise.<{key:string, response:string}> -Used to pause a journey etc. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata id and API response (OK or error) - -| Param | Type | Description | -| --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| id | string | item id | - ### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> diff --git a/lib/metadataTypes/MetadataType.js b/lib/metadataTypes/MetadataType.js index 4b2f641a3..2ea9cb9c2 100644 --- a/lib/metadataTypes/MetadataType.js +++ b/lib/metadataTypes/MetadataType.js @@ -1166,25 +1166,6 @@ class MetadataType { Util.logger.error(`Failed to execute ${this.definition.type} ${key}: ${ex.message}`); } } - /** - * Used to pause a journey etc. - * - * @param {string} uri REST endpoint where the POST request should be sent - * @param {string} id item id - * @returns {Promise.<{key:string, response:string}>} metadata id and API response (OK or error) - */ - static async pauseREST(uri, id) { - let response; - try { - await this.client.rest.post(uri, {}); // payload is empty for this request - response = 'OK'; - Util.logger.info(` - paused ${this.definition.type}: ${id}`); - } catch (ex) { - response = ex.message; - Util.logger.error(`Failed to pause ${this.definition.type} ${id}: ${ex.message}`); - } - return { id, response }; - } /** * Used to execute a query/automation etc.