From fd203275db906834130e107a785b491da7606b5e Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Fri, 26 Jan 2018 16:27:37 -0800 Subject: [PATCH] Update loosely-validate-event to 2.0.0 This version has a breaking change - it'll throw an error for messages > 32kb (as it should, these messages are rejected by the API). Instead of making a breaking change to analytics-node immediately, we'll have a deprecation period for the old behaviour. During this period, we'll catch this error and log it instead. This will give clients time to update their code as needed. We may still opt to make a breaking change for analytics-node after this deprecation period, we'll decide this later. --- index.js | 26 +++++++++++++++++++------- package.json | 2 +- test.js | 17 +++++++++++++++++ 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index cd08c0c4..14c692be 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ const assert = require('assert') const removeSlash = require('remove-trailing-slash') -const validate = require('@segment/loosely-validate-event') +const looselyValidate = require('@segment/loosely-validate-event') const axios = require('axios') const axiosRetry = require('axios-retry') const ms = require('ms') @@ -45,6 +45,18 @@ class Analytics { }) } + _validate (message, type) { + try { + looselyValidate(message, type) + } catch (e) { + if (e.message === 'Your message must be < 32kb.') { + console.log('Your message must be < 32kb. This is currently surfaced as a warning to allow clients to update. Versions released after August 1, 2018 will throw an error instead. Please update your code before then.', message) + return + } + throw e + } + } + /** * Send an identify `message`. * @@ -54,7 +66,7 @@ class Analytics { */ identify (message, callback) { - validate(message, 'identify') + this._validate(message, 'identify') this.enqueue('identify', message, callback) return this } @@ -68,7 +80,7 @@ class Analytics { */ group (message, callback) { - validate(message, 'group') + this._validate(message, 'group') this.enqueue('group', message, callback) return this } @@ -82,7 +94,7 @@ class Analytics { */ track (message, callback) { - validate(message, 'track') + this._validate(message, 'track') this.enqueue('track', message, callback) return this } @@ -96,7 +108,7 @@ class Analytics { */ page (message, callback) { - validate(message, 'page') + this._validate(message, 'page') this.enqueue('page', message, callback) return this } @@ -110,7 +122,7 @@ class Analytics { */ screen (message, callback) { - validate(message, 'screen') + this._validate(message, 'screen') this.enqueue('screen', message, callback) return this } @@ -124,7 +136,7 @@ class Analytics { */ alias (message, callback) { - validate(message, 'alias') + this._validate(message, 'alias') this.enqueue('alias', message, callback) return this } diff --git a/package.json b/package.json index 6d5c497e..fedc456d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "driver" ], "dependencies": { - "@segment/loosely-validate-event": "^1.1.2", + "@segment/loosely-validate-event": "^2.0.0", "axios": "^0.17.1", "axios-retry": "^3.0.1", "commander": "^2.9.0", diff --git a/test.js b/test.js index de4d70e4..2128278c 100644 --- a/test.js +++ b/test.js @@ -520,6 +520,23 @@ test('isErrorRetryable', t => { t.false(client._isErrorRetryable({ response: { status: 200 } })) }) +test.only('allows messages > 32kb', t => { + const client = createClient() + + const event = { + userId: 1, + event: 'event', + properties: {} + } + for (var i = 0; i < 10000; i++) { + event.properties[i] = 'a' + } + + t.notThrows(() => { + client.track(event, noop) + }) +}) + const { RUN_E2E_TESTS } = process.env if (RUN_E2E_TESTS) {