From 02b10c0bcad41d08e1605936e612865fc638a124 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sun, 31 Oct 2021 21:41:19 +0100 Subject: [PATCH] Limit attribute value length for pinpoint Pinpoint has a maximum number of characters per attribute value of 200: https://docs.aws.amazon.com/pinpoint/latest/developerguide/quotas.html#quotas-events This in particular applies to the referrer which an be very long. Better to limit the event than getting it rejected by pinpoint. --- .../src/pinpoint/helpers/prepare-data.js | 4 ++-- .../tests/pinpoint/helpers/prepare-data.test.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/analytics-plugin-aws-pinpoint/src/pinpoint/helpers/prepare-data.js b/packages/analytics-plugin-aws-pinpoint/src/pinpoint/helpers/prepare-data.js index c4aa3c51..819fdf8e 100644 --- a/packages/analytics-plugin-aws-pinpoint/src/pinpoint/helpers/prepare-data.js +++ b/packages/analytics-plugin-aws-pinpoint/src/pinpoint/helpers/prepare-data.js @@ -56,10 +56,10 @@ function sanitizeAttribute(value) { // If null or undefined if (value == null) return if (Array.isArray(value)) { - return value.filter(notEmpty).map((val) => val.toString()) + return value.filter(notEmpty).map((val) => val.toString().substring(0, 200)) } // @TODO guard against null here - return isNullOrUndef(value) ? value : value.toString() + return isNullOrUndef(value) ? value : value.toString().substring(0, 200) } /** diff --git a/packages/analytics-plugin-aws-pinpoint/tests/pinpoint/helpers/prepare-data.test.js b/packages/analytics-plugin-aws-pinpoint/tests/pinpoint/helpers/prepare-data.test.js index efab633f..cca3dbeb 100644 --- a/packages/analytics-plugin-aws-pinpoint/tests/pinpoint/helpers/prepare-data.test.js +++ b/packages/analytics-plugin-aws-pinpoint/tests/pinpoint/helpers/prepare-data.test.js @@ -20,6 +20,16 @@ test('should sanitize attributes', async (t) => { }) }) +test('should limit attribute length', async (t) => { + const sanitized = await prepareData.prepareAttributes({ + foo: '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890___', + }) + + t.deepEqual(sanitized, { + foo: '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890', + }) +}) + test('should remove undefined or null attributes', async (t) => { const sanitized = await prepareData.prepareAttributes({ foo: undefined,