diff --git a/spec/src/modules/tracker.js b/spec/src/modules/tracker.js index 86237f84..c7bc69b8 100644 --- a/spec/src/modules/tracker.js +++ b/spec/src/modules/tracker.js @@ -696,6 +696,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { groupId: 'all', displayName: 'display-name', itemId: '12345', + slCampaignOwner: 'Campaign Man', + slCampaignId: 'Campaign 123', }; const v2Parameters = { variationId: '12345-A', @@ -730,6 +732,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { expect(bodyParams).to.have.property('section').to.deep.equal(requiredParameters.section); expect(bodyParams).to.have.property('item_name').to.equal(term); expect(bodyParams).to.have.property('group_id').to.equal(optionalParameters.groupId); + expect(bodyParams).to.have.property('sl_campaign_id').to.equal(optionalParameters.slCampaignId); + expect(bodyParams).to.have.property('sl_campaign_owner').to.deep.equal(optionalParameters.slCampaignOwner); // Response expect(responseParams).to.have.property('method').to.equal('POST'); @@ -971,6 +975,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { group_id: optionalParameters.groupId, display_name: optionalParameters.displayName, }); + expect(requestParams).to.have.property('sl_campaign_owner').to.deep.equal(optionalParameters.slCampaignOwner); + expect(requestParams).to.have.property('sl_campaign_id').to.deep.equal(optionalParameters.slCampaignId); // Response expect(responseParams).to.have.property('method').to.equal('GET'); diff --git a/src/modules/tracker.js b/src/modules/tracker.js index de000a3f..4bd25d63 100644 --- a/src/modules/tracker.js +++ b/src/modules/tracker.js @@ -280,6 +280,8 @@ class Tracker { * @param {string} [parameters.itemId] - Item id of the selected item * @param {string} [parameters.variationId] - Variation id of the selected item * @param {string} [parameters.groupId] - Group identifier of the group to search within. Only required if searching within a group, i.e. "Pumpkin in Canned Goods" + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -294,6 +296,8 @@ class Tracker { * groupId: '88JU230', * itemId: '12345', * variationId: '12345-A', + * slCampaignId: 'Campaign 123', + * slCampaignOwner: 'Store 123', * }, * ); */ @@ -317,6 +321,8 @@ class Tracker { itemId = item_id, variation_id, variationId = variation_id, + slCampaignId, + slCampaignOwner, } = parameters; const queryParams = {}; const bodyParams = { @@ -333,6 +339,14 @@ class Tracker { queryParams.section = section; } + if (slCampaignId) { + bodyParams.sl_campaign_id = slCampaignId; + } + + if (slCampaignOwner) { + bodyParams.sl_campaign_owner = slCampaignOwner; + } + const requestURL = `${baseUrl}${applyParamsAsString(queryParams, this.options)}`; const requestMethod = 'POST'; const requestBody = applyParams(bodyParams, { @@ -372,6 +386,8 @@ class Tracker { * @param {string} [parameters.groupId] - Group identifier of the group to search within. Only required if searching within a group, i.e. "Pumpkin in Canned Goods" * @param {string} [parameters.displayName] - Display name of group of selected item * @param {string} [parameters.itemId] - Item id of the selected item + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -386,6 +402,8 @@ class Tracker { * groupId: '88JU230', * displayName: 'apparel', * itemId: '12345', + * slCampaignId: 'Campaign 123', + * slCampaignOwner: 'Store 123', * }, * ); */ @@ -409,6 +427,8 @@ class Tracker { displayName = display_name, item_id, itemId = item_id, + slCampaignOwner, + slCampaignId, } = parameters; if (originalQuery) { @@ -434,6 +454,14 @@ class Tracker { queryParams.item_id = itemId; } + if (slCampaignId) { + queryParams.sl_campaign_id = slCampaignId; + } + + if (slCampaignOwner) { + queryParams.sl_campaign_owner = slCampaignOwner; + } + this.requests.queue(`${url}${applyParamsAsString(queryParams, this.options)}`, undefined, undefined, networkParameters); this.requests.send(); @@ -737,8 +765,8 @@ class Tracker { * @param {object} [parameters.selectedFilters] - Key - Value map of selected filters * @param {string} [parameters.section] - The section name for the item Ex. "Products" * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -849,8 +877,8 @@ class Tracker { * @param {string} [parameters.itemIsConvertible] - Whether or not an item is available for a conversion * @param {string} [parameters.section] - The section name for the item Ex. "Products" * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -1557,8 +1585,8 @@ class Tracker { * @param {number} [parameters.numResultsPerPage] - Number of results shown * @param {object} [parameters.selectedFilters] - Selected filters * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} diff --git a/src/types/tracker.d.ts b/src/types/tracker.d.ts index 81ce9d32..d8846715 100644 --- a/src/types/tracker.d.ts +++ b/src/types/tracker.d.ts @@ -45,6 +45,8 @@ declare class Tracker { groupId?: string; displayName?: string; itemId?: string; + slCampaignId?: string; + slCampaignOwner?: string; }, networkParameters?: NetworkParameters ): true | Error;