From 0f7db07c83171375c49a1c3bdff00e82c3e23f53 Mon Sep 17 00:00:00 2001 From: CD Cabrera Date: Tue, 26 Jan 2021 11:37:19 -0500 Subject: [PATCH] fix(actionRecordMiddleware): issues/52 limit and data adjustment (#562) --- .../middleware/actionRecordMiddleware.js | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/redux/middleware/actionRecordMiddleware.js b/src/redux/middleware/actionRecordMiddleware.js index e53b1664f..84b5b3345 100644 --- a/src/redux/middleware/actionRecordMiddleware.js +++ b/src/redux/middleware/actionRecordMiddleware.js @@ -1,12 +1,14 @@ +import { platformApiTypes } from '../../types'; +import { userTypes } from '../types/userTypes'; + /** - * Modify actions for privacy. + * Modify actions' payload for privacy. * * @param {object} action - * @param {string} action.type * @param {object} action.payload * @returns {object} */ -const sanitizeActionHeaders = ({ type, payload, ...action }) => { +const sanitizeActionHeaders = ({ payload, ...action }) => { if (payload) { let updatedPayload = { ...payload, headers: {} }; @@ -14,6 +16,36 @@ const sanitizeActionHeaders = ({ type, payload, ...action }) => { updatedPayload = payload.map(({ headers, ...obj }) => ({ ...obj, headers: {} })); } + return { payload: updatedPayload, ...action }; + } + + return { ...action }; +}; + +/** + * Modify actions' payload data for privacy. + * + * @param {object} action + * @param {string} action.type + * @param {object} action.payload + * @returns {object} + */ +const sanitizeData = ({ type, payload, ...action }) => { + if (payload && new RegExp(userTypes.USER_AUTH).test(type)) { + const updatedPayload = { + ...payload, + data: { + ...payload.data, + user: { + ...payload.data.user, + [platformApiTypes.PLATFORM_API_RESPONSE_USER_IDENTITY]: { + ...payload.data.user[platformApiTypes.PLATFORM_API_RESPONSE_USER_IDENTITY], + [platformApiTypes.PLATFORM_API_RESPONSE_USER_IDENTITY_TYPES.USER]: {} + } + } + } + }; + return { type, payload: updatedPayload, ...action }; } @@ -30,7 +62,7 @@ const sanitizeActionHeaders = ({ type, payload, ...action }) => { const getActions = (id, limit) => { const { sessionStorage } = window; const item = sessionStorage.getItem(id); - let parsedItems = (item && (JSON.parse(item) || {})?.actions) || null; + let parsedItems = (item && (JSON.parse(item) || {})?.actions) || []; if (parsedItems?.length && limit > 0) { parsedItems = parsedItems.slice(limit * -1); @@ -51,7 +83,7 @@ const recordAction = (action, { id, limit, ...config }) => { const { navigator, sessionStorage } = window; const items = getActions(id, limit) || []; const priorItem = items[items.length - 1]; - const updatedAction = sanitizeActionHeaders(action); + const updatedAction = sanitizeData(sanitizeActionHeaders(action)); const actionObj = { diff: 0, timestamp: Date.now(), @@ -67,7 +99,7 @@ const recordAction = (action, { id, limit, ...config }) => { id, JSON.stringify({ browser: navigator.userAgent, - timestamp: new Date(), + timestamp: new Date().toLocaleString(), ...config, actions: items }) @@ -84,7 +116,7 @@ const actionRecordMiddleware = (config = {}) => { return () => next => action => { recordAction(action, { id: 'actionRecordMiddleware/v1', - limitResults: 100, + limit: 100, ...config });