diff --git a/packages/destination-actions/src/destinations/recombee/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/__tests__/__snapshots__/snapshot.test.ts.snap index 8e6a447004..12ff613b09 100644 --- a/packages/destination-actions/src/destinations/recombee/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/__tests__/__snapshots__/snapshot.test.ts.snap @@ -15,6 +15,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: addBookmark action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "7(iq3vwM", "userId": "7(iq3vwM", @@ -38,6 +39,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: addCartAddition action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "fSK%!$(3gz2peZ!&@L@D", "userId": "fSK%!$(3gz2peZ!&@L@D", @@ -60,6 +62,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: addDetailView action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "VhiOfa#s6#B[CQDV", "userId": "VhiOfa#s6#B[CQDV", @@ -96,6 +99,7 @@ Object { Object { "method": "POST", "params": Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "!D2A1H%v%jv&r", "userId": "!D2A1H%v%jv&r", @@ -122,6 +126,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: addRating action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "X9m9Urlsqof(&*PN!s", "rating": 63040185947914.24, @@ -180,6 +185,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: setViewPortion action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "D9^z[P*Zv", "portion": -42971588743659.52, @@ -204,6 +210,7 @@ Object { exports[`Testing snapshot for actions-recombee destination: setViewPortionFromWatchTime action - required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "gpLV6!FLD#$6^LR77nTN", "portion": 1, diff --git a/packages/destination-actions/src/destinations/recombee/addBookmark/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/addBookmark/__tests__/__snapshots__/snapshot.test.ts.snap index 9c0049b8f5..a149c26024 100644 --- a/packages/destination-actions/src/destinations/recombee/addBookmark/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/addBookmark/__tests__/__snapshots__/snapshot.test.ts.snap @@ -15,6 +15,7 @@ Object { exports[`Testing snapshot for Recombee's addBookmark destination action: required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "GxFzk&V2a4R8iF62G9]q", "userId": "GxFzk&V2a4R8iF62G9]q", diff --git a/packages/destination-actions/src/destinations/recombee/addBookmark/generated-types.ts b/packages/destination-actions/src/destinations/recombee/addBookmark/generated-types.ts index a0f5bc221a..8fff759718 100644 --- a/packages/destination-actions/src/destinations/recombee/addBookmark/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/addBookmark/generated-types.ts @@ -17,6 +17,12 @@ export interface Payload { * The ID of the clicked recommendation (if the bookmark is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the bookmark. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the bookmark. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/addBookmark/index.ts b/packages/destination-actions/src/destinations/recombee/addBookmark/index.ts index 8caac70916..f2dd68a67c 100644 --- a/packages/destination-actions/src/destinations/recombee/addBookmark/index.ts +++ b/packages/destination-actions/src/destinations/recombee/addBookmark/index.ts @@ -46,12 +46,25 @@ const action: ActionDefinition = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new AddBookmark(data.payload)) + await client.send(payloadToBookmark(data.payload)) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.map((payload) => new AddBookmark(payload)))) + await client.send(new Batch(data.payload.map((payload) => payloadToBookmark(payload)))) } } +function payloadToBookmark(payload: Payload): AddBookmark { + return new AddBookmark({ + userId: payload.userId, + itemId: payload.itemId, + timestamp: payload.timestamp, + recommId: payload.recommId, + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } + }) +} + export default action diff --git a/packages/destination-actions/src/destinations/recombee/addCartAddition/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/addCartAddition/__tests__/__snapshots__/snapshot.test.ts.snap index a312858d95..7443394054 100644 --- a/packages/destination-actions/src/destinations/recombee/addCartAddition/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/addCartAddition/__tests__/__snapshots__/snapshot.test.ts.snap @@ -17,6 +17,7 @@ Object { exports[`Testing snapshot for Recombee's addCartAddition destination action: required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "E$o]!yX^hLQ^46#)", "userId": "E$o]!yX^hLQ^46#)", diff --git a/packages/destination-actions/src/destinations/recombee/addCartAddition/generated-types.ts b/packages/destination-actions/src/destinations/recombee/addCartAddition/generated-types.ts index ebbeedbfbe..5069a6beac 100644 --- a/packages/destination-actions/src/destinations/recombee/addCartAddition/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/addCartAddition/generated-types.ts @@ -30,6 +30,12 @@ export interface Payload { * The ID of the clicked recommendation (if the cart addition is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the cart addition. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the cart addition. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/addCartAddition/index.ts b/packages/destination-actions/src/destinations/recombee/addCartAddition/index.ts index 4e8e68f3d9..befba0d206 100644 --- a/packages/destination-actions/src/destinations/recombee/addCartAddition/index.ts +++ b/packages/destination-actions/src/destinations/recombee/addCartAddition/index.ts @@ -72,21 +72,24 @@ const action: ActionDefinition = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(payloadToInteraction(data.payload)) + await client.send(payloadToCartAddition(data.payload)) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.map(payloadToInteraction))) + await client.send(new Batch(data.payload.map(payloadToCartAddition))) } } -function payloadToInteraction(payload: Payload): AddCartAddition { +function payloadToCartAddition(payload: Payload): AddCartAddition { return new AddCartAddition({ userId: payload.userId, ...payload.item, timestamp: payload.timestamp, recommId: payload.recommId, - additionalData: payload.additionalData + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } }) } diff --git a/packages/destination-actions/src/destinations/recombee/addDetailView/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/addDetailView/__tests__/__snapshots__/snapshot.test.ts.snap index 2e3e7260a2..e239de344b 100644 --- a/packages/destination-actions/src/destinations/recombee/addDetailView/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/addDetailView/__tests__/__snapshots__/snapshot.test.ts.snap @@ -16,6 +16,7 @@ Object { exports[`Testing snapshot for Recombee's addDetailView destination action: required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "nW8&[lpB", "userId": "nW8&[lpB", diff --git a/packages/destination-actions/src/destinations/recombee/addDetailView/generated-types.ts b/packages/destination-actions/src/destinations/recombee/addDetailView/generated-types.ts index 9f27a9cb72..d662780082 100644 --- a/packages/destination-actions/src/destinations/recombee/addDetailView/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/addDetailView/generated-types.ts @@ -21,6 +21,12 @@ export interface Payload { * The ID of the clicked recommendation (if the view is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the view. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the view. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/addDetailView/index.ts b/packages/destination-actions/src/destinations/recombee/addDetailView/index.ts index a261541efe..face912c5b 100644 --- a/packages/destination-actions/src/destinations/recombee/addDetailView/index.ts +++ b/packages/destination-actions/src/destinations/recombee/addDetailView/index.ts @@ -51,12 +51,26 @@ const action: ActionDefinition = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new AddDetailView(data.payload)) + await client.send(payloadToDetailView(data.payload)) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.map((payload) => new AddDetailView(payload)))) + await client.send(new Batch(data.payload.map((payload) => payloadToDetailView(payload)))) } } +function payloadToDetailView(payload: Payload): AddDetailView { + return new AddDetailView({ + userId: payload.userId, + itemId: payload.itemId, + timestamp: payload.timestamp, + duration: payload.duration, + recommId: payload.recommId, + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } + }) +} + export default action diff --git a/packages/destination-actions/src/destinations/recombee/addPurchase/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/addPurchase/__tests__/__snapshots__/snapshot.test.ts.snap index f7bb33e0d0..cb1393fa76 100644 --- a/packages/destination-actions/src/destinations/recombee/addPurchase/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/addPurchase/__tests__/__snapshots__/snapshot.test.ts.snap @@ -30,6 +30,7 @@ Object { Object { "method": "POST", "params": Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "o@fME^0ckHa[VN6e&Zv*", "userId": "o@fME^0ckHa[VN6e&Zv*", diff --git a/packages/destination-actions/src/destinations/recombee/addPurchase/generated-types.ts b/packages/destination-actions/src/destinations/recombee/addPurchase/generated-types.ts index f039d12fe6..7179e4a5c4 100644 --- a/packages/destination-actions/src/destinations/recombee/addPurchase/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/addPurchase/generated-types.ts @@ -34,6 +34,12 @@ export interface Payload { * The ID of the clicked recommendation (if the purchase is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the purchase. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the purchase. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/addPurchase/index.ts b/packages/destination-actions/src/destinations/recombee/addPurchase/index.ts index 17679d38db..b958121816 100644 --- a/packages/destination-actions/src/destinations/recombee/addPurchase/index.ts +++ b/packages/destination-actions/src/destinations/recombee/addPurchase/index.ts @@ -92,15 +92,15 @@ const action: ActionDefinition = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(payloadToInteractions(data.payload))) + await client.send(new Batch(payloadToPurchases(data.payload))) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.flatMap(payloadToInteractions))) + await client.send(new Batch(data.payload.flatMap(payloadToPurchases))) } } -function payloadToInteractions(payload: Payload): AddPurchase[] { +function payloadToPurchases(payload: Payload): AddPurchase[] { return payload.items.map( (item) => new AddPurchase({ @@ -108,7 +108,10 @@ function payloadToInteractions(payload: Payload): AddPurchase[] { ...item, timestamp: payload.timestamp, recommId: payload.recommId, - additionalData: payload.additionalData + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } }) ) } diff --git a/packages/destination-actions/src/destinations/recombee/addRating/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/addRating/__tests__/__snapshots__/snapshot.test.ts.snap index 254f21a479..3d736a9d39 100644 --- a/packages/destination-actions/src/destinations/recombee/addRating/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/addRating/__tests__/__snapshots__/snapshot.test.ts.snap @@ -16,6 +16,7 @@ Object { exports[`Testing snapshot for Recombee's addRating destination action: required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "ANsNPl1sV!#5(%#", "rating": 29019912231976.96, diff --git a/packages/destination-actions/src/destinations/recombee/addRating/generated-types.ts b/packages/destination-actions/src/destinations/recombee/addRating/generated-types.ts index d37dd66ae8..4ffab8eff6 100644 --- a/packages/destination-actions/src/destinations/recombee/addRating/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/addRating/generated-types.ts @@ -21,6 +21,12 @@ export interface Payload { * The ID of the clicked recommendation (if the rating is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the rating. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the rating. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/addRating/index.ts b/packages/destination-actions/src/destinations/recombee/addRating/index.ts index 8e1d331d79..d1a2f34237 100644 --- a/packages/destination-actions/src/destinations/recombee/addRating/index.ts +++ b/packages/destination-actions/src/destinations/recombee/addRating/index.ts @@ -53,12 +53,26 @@ const action: ActionDefinition = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new AddRating(data.payload)) + await client.send(payloadToRating(data.payload)) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.map((payload) => new AddRating(payload)))) + await client.send(new Batch(data.payload.map((payload) => payloadToRating(payload)))) } } +function payloadToRating(payload: Payload): AddRating { + return new AddRating({ + userId: payload.userId, + itemId: payload.itemId, + rating: payload.rating, + timestamp: payload.timestamp, + recommId: payload.recommId, + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } + }) +} + export default action diff --git a/packages/destination-actions/src/destinations/recombee/commonFields.ts b/packages/destination-actions/src/destinations/recombee/commonFields.ts index 5a9606ab8d..faa5709a58 100644 --- a/packages/destination-actions/src/destinations/recombee/commonFields.ts +++ b/packages/destination-actions/src/destinations/recombee/commonFields.ts @@ -11,12 +11,33 @@ export function interactionFields(interactionName: string): Record = { }, perform: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new SetViewPortion(data.payload)) + await client.send(payloadToViewPortion(data.payload)) }, performBatch: async (request, data) => { const client = new RecombeeApiClient(data.settings, request) - await client.send(new Batch(data.payload.map((event) => new SetViewPortion(event)))) + await client.send(new Batch(data.payload.map((event) => payloadToViewPortion(event)))) } } +function payloadToViewPortion(payload: Payload): SetViewPortion { + return new SetViewPortion({ + userId: payload.userId, + itemId: payload.itemId, + portion: payload.portion, + sessionId: payload.sessionId, + timestamp: payload.timestamp, + recommId: payload.recommId, + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + } + }) +} + export default action diff --git a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/__tests__/__snapshots__/snapshot.test.ts.snap b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/__tests__/__snapshots__/snapshot.test.ts.snap index fdc0f45c4a..f21dfc0f15 100644 --- a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/__tests__/__snapshots__/snapshot.test.ts.snap +++ b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/__tests__/__snapshots__/snapshot.test.ts.snap @@ -17,6 +17,7 @@ Object { exports[`Testing snapshot for Recombee's setViewPortionFromWatchTime destination action: required fields 1`] = ` Object { + "additionalData": Object {}, "cascadeCreate": true, "itemId": "FcP0tLN]UE", "portion": 1, diff --git a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/generated-types.ts b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/generated-types.ts index 34d342a536..c30fc2671e 100644 --- a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/generated-types.ts +++ b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/generated-types.ts @@ -34,6 +34,12 @@ export interface Payload { * The ID of the clicked recommendation (if the view portion is based on a recommendation request). */ recommId?: string + /** + * Internal additional data to be stored with the view portion. + */ + internalAdditionalData?: { + [k: string]: unknown + } /** * Additional data to be stored with the view portion. *Keep this field empty unless instructed by the Recombee Support team.* */ diff --git a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/index.ts b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/index.ts index badbb01ae9..9b238a0409 100644 --- a/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/index.ts +++ b/packages/destination-actions/src/destinations/recombee/setViewPortionFromWatchTime/index.ts @@ -95,7 +95,10 @@ function payloadToViewPortion(payload: Payload): SetViewPortion { timestamp: payload.timestamp, portion: payload.portion.watchTime / payload.portion.totalLength, sessionId: payload.sessionId, - additionalData: payload.additionalData, + additionalData: { + ...(payload.internalAdditionalData ?? {}), + ...(payload.additionalData ?? {}) + }, recommId: payload.recommId }) }