From 770012ff92a5ea787872dd891f7a843f58ec4ce6 Mon Sep 17 00:00:00 2001 From: Enes Kutay SEZEN Date: Mon, 16 Jun 2025 20:22:17 +0300 Subject: [PATCH 1/3] Add support for fmt_options in recommendations request --- spec/src/modules/recommendations.js | 20 ++++++++++++++++++++ src/modules/recommendations.js | 7 +++++++ src/types/recommendations.d.ts | 3 ++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/spec/src/modules/recommendations.js b/spec/src/modules/recommendations.js index 623db82f..863f68e9 100644 --- a/spec/src/modules/recommendations.js +++ b/spec/src/modules/recommendations.js @@ -232,6 +232,26 @@ describe(`ConstructorIO - Recommendations${bundledDescriptionSuffix}`, () => { }); }); + it('Should return a response with valid itemIds, and fmtOptions', (done) => { + const hiddenFields = ['testField', 'hiddenField2']; + const fmtOptions = { hidden_fields: hiddenFields }; + const { recommendations } = new ConstructorIO({ + apiKey: testApiKey, + fetch: fetchSpy, + }); + + recommendations.getRecommendations(podId, { itemIds, fmtOptions }).then((res) => { + const requestedUrlParams = helpers.extractUrlParamsFromFetch(fetchSpy); + + expect(res).to.have.property('request').to.be.an('object'); + expect(res).to.have.property('response').to.be.an('object'); + expect(res).to.have.property('result_id').to.be.an('string'); + expect(res.request.fmt_options.hidden_fields).to.eql(hiddenFields); + expect(requestedUrlParams.fmt_options).to.have.property('hidden_fields').to.eql(hiddenFields); + done(); + }); + }); + it('Should return a response with valid itemIds, and numResults', (done) => { const numResults = 2; const { recommendations } = new ConstructorIO({ diff --git a/src/modules/recommendations.js b/src/modules/recommendations.js index 8c2dfe0f..1314a93e 100644 --- a/src/modules/recommendations.js +++ b/src/modules/recommendations.js @@ -36,6 +36,7 @@ function createRecommendationsUrl(podId, parameters, options) { variationsMap, hiddenFields, preFilterExpression, + fmtOptions, } = parameters; // Pull num results number from parameters @@ -81,6 +82,11 @@ function createRecommendationsUrl(podId, parameters, options) { if (preFilterExpression) { queryParams.pre_filter_expression = JSON.stringify(preFilterExpression); } + + // Pull format options from parameters + if (fmtOptions) { + queryParams.fmt_options = fmtOptions; + } } queryParams = helpers.cleanParams(queryParams); @@ -117,6 +123,7 @@ class Recommendations { * @param {object} [parameters.filters] - Key / value mapping of filters used to refine results * @param {object} [parameters.variationsMap] - The variations map object to aggregate variations. Please refer to https://docs.constructor.com/reference/shared-variations-mapping for details * @param {object} [parameters.preFilterExpression] - Faceting expression to scope search results. Please refer to https://docs.constructor.com/reference/configuration-collections + * @param {object} [parameters.fmtOptions] - An object containing options to format different aspects of the response. Please refer to https://docs.constructor.com/reference/recommendations-recommendation-results for details * @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) diff --git a/src/types/recommendations.d.ts b/src/types/recommendations.d.ts index 5c0a997a..9e0cd33c 100644 --- a/src/types/recommendations.d.ts +++ b/src/types/recommendations.d.ts @@ -1,4 +1,4 @@ -import { ConstructorClientOptions, NetworkParameters, VariationsMap, FilterExpression } from '.'; +import { ConstructorClientOptions, NetworkParameters, VariationsMap, FilterExpression, FmtOptions } from '.'; import EventDispatcher from './event-dispatcher'; export default Recommendations; @@ -12,6 +12,7 @@ export interface RecommendationsParameters { variationsMap?: VariationsMap; hiddenFields?: string[]; preFilterExpression?: FilterExpression; + fmtOptions?: FmtOptions; } declare class Recommendations { From f9b826b3c0e064271b5e9751336e6cc7c42d93f9 Mon Sep 17 00:00:00 2001 From: Enes Kutay SEZEN Date: Mon, 16 Jun 2025 20:24:31 +0300 Subject: [PATCH 2/3] Update link to v1 recommendations pod results documentation --- src/modules/recommendations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/recommendations.js b/src/modules/recommendations.js index 1314a93e..15cea9cd 100644 --- a/src/modules/recommendations.js +++ b/src/modules/recommendations.js @@ -123,7 +123,7 @@ class Recommendations { * @param {object} [parameters.filters] - Key / value mapping of filters used to refine results * @param {object} [parameters.variationsMap] - The variations map object to aggregate variations. Please refer to https://docs.constructor.com/reference/shared-variations-mapping for details * @param {object} [parameters.preFilterExpression] - Faceting expression to scope search results. Please refer to https://docs.constructor.com/reference/configuration-collections - * @param {object} [parameters.fmtOptions] - An object containing options to format different aspects of the response. Please refer to https://docs.constructor.com/reference/recommendations-recommendation-results for details + * @param {object} [parameters.fmtOptions] - An object containing options to format different aspects of the response. Please refer to https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details * @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) From 3039bd4766fed8f8ca7a4eb0fc4b7d3c40f5a53d Mon Sep 17 00:00:00 2001 From: Enes Kutay SEZEN Date: Tue, 17 Jun 2025 17:54:19 +0300 Subject: [PATCH 3/3] Move block --- src/modules/recommendations.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/modules/recommendations.js b/src/modules/recommendations.js index 15cea9cd..1ea7af7f 100644 --- a/src/modules/recommendations.js +++ b/src/modules/recommendations.js @@ -64,6 +64,11 @@ function createRecommendationsUrl(podId, parameters, options) { queryParams.filters = filters; } + // Pull format options from parameters + if (fmtOptions) { + queryParams.fmt_options = fmtOptions; + } + // Pull hidden fields from parameters if (hiddenFields) { if (queryParams.fmt_options) { @@ -82,11 +87,6 @@ function createRecommendationsUrl(podId, parameters, options) { if (preFilterExpression) { queryParams.pre_filter_expression = JSON.stringify(preFilterExpression); } - - // Pull format options from parameters - if (fmtOptions) { - queryParams.fmt_options = fmtOptions; - } } queryParams = helpers.cleanParams(queryParams);