@searchspring/snap-tracker 0.40.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { BeaconEvent } from './BeaconEvent';
2
2
  import { TrackerGlobals, TrackMethods, BeaconContext, TrackerConfig } from './types';
3
+ export declare const BATCH_TIMEOUT = 200;
3
4
  export declare class Tracker {
4
5
  private mode;
5
6
  private globals;
@@ -1 +1 @@
1
- {"version":3,"file":"Tracker.d.ts","sourceRoot":"","sources":["../../src/Tracker.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACN,cAAc,EACd,YAAY,EAIZ,aAAa,EAQb,aAAa,EAEb,MAAM,SAAS,CAAC;AAsBjB,qBAAa,OAAO;IACnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,aAAa;IA+IpD,UAAU,IAAI,cAAc;IAI5B,UAAU,IAAI,aAAa;IAI3B,QAAQ,IAAI,IAAI;IAMvB,KAAK,EAAE,YAAY,CAgTjB;IAEF,aAAa,QAAS,MAAM,aAAa,SAAS,GAAG,UAInD;IAEF,SAAS,QAAO,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBvC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAoBnC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAOnC;IAEF,aAAa,QAAO,IAAI,CAuCtB;IAEF,OAAO;;uBAEI,MAAM,EAAE;yBAOJ,MAAM,EAAE,KAAG,IAAI;yBAYf,MAAM,EAAE,KAAG,IAAI;4BAaZ,MAAM,EAAE,KAAG,IAAI;;;;uBAqBtB,MAAM,EAAE;;MAQjB;IAEF,UAAU,gDAAmC,IAAI,CAuB/C;CACF"}
1
+ {"version":3,"file":"Tracker.d.ts","sourceRoot":"","sources":["../../src/Tracker.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACN,cAAc,EACd,YAAY,EAIZ,aAAa,EAQb,aAAa,EAEb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,aAAa,MAAM,CAAC;AAoBjC,qBAAa,OAAO;IACnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,aAAa;IA+IpD,UAAU,IAAI,cAAc;IAI5B,UAAU,IAAI,aAAa;IAI3B,QAAQ,IAAI,IAAI;IAMvB,KAAK,EAAE,YAAY,CAgTjB;IAEF,aAAa,QAAS,MAAM,aAAa,SAAS,GAAG,UAInD;IAEF,SAAS,QAAO,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBvC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAoBnC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAOnC;IAEF,aAAa,QAAO,IAAI,CAuCtB;IAEF,OAAO;;uBAEI,MAAM,EAAE;yBAOJ,MAAM,EAAE,KAAG,IAAI;yBAYf,MAAM,EAAE,KAAG,IAAI;4BAaZ,MAAM,EAAE,KAAG,IAAI;;;;uBAqBtB,MAAM,EAAE;;MAQjB;IAEF,UAAU,gDAAmC,IAAI,CAyC/C;CACF"}
@@ -23,7 +23,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Tracker = void 0;
26
+ exports.Tracker = exports.BATCH_TIMEOUT = void 0;
27
27
  var deepmerge_1 = __importDefault(require("deepmerge"));
28
28
  var uuid_1 = require("uuid");
29
29
  var snap_store_mobx_1 = require("@searchspring/snap-store-mobx");
@@ -33,7 +33,7 @@ var TrackEvent_1 = require("./TrackEvent");
33
33
  var PixelEvent_1 = require("./PixelEvent");
34
34
  var BeaconEvent_1 = require("./BeaconEvent");
35
35
  var types_1 = require("./types");
36
- var BATCH_TIMEOUT = 150;
36
+ exports.BATCH_TIMEOUT = 200;
37
37
  var LEGACY_USERID_COOKIE_NAME = '_isuid';
38
38
  var USERID_COOKIE_NAME = 'ssUserId';
39
39
  var SHOPPERID_COOKIE_NAME = 'ssShopperId';
@@ -485,23 +485,38 @@ var Tracker = /** @class */ (function () {
485
485
  if (_this.mode !== snap_toolbox_2.AppMode.production) {
486
486
  return;
487
487
  }
488
- var events = JSON.parse(_this.localStorage.get(LOCALSTORAGE_BEACON_POOL_NAME) || '[]');
488
+ var savedEvents = JSON.parse(_this.localStorage.get(LOCALSTORAGE_BEACON_POOL_NAME) || '[]');
489
489
  if (eventsToSend) {
490
- eventsToSend.forEach(function (event) {
491
- events.push(__assign({}, event));
490
+ var eventsClone_1 = [];
491
+ savedEvents.forEach(function (_event, idx) {
492
+ // using Object.assign since we are not modifying nested properties
493
+ eventsClone_1.push(Object.assign({}, _event));
494
+ delete eventsClone_1[idx].id;
495
+ delete eventsClone_1[idx].pid;
492
496
  });
493
- _this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify(events));
497
+ var stringyEventsClone_1 = JSON.stringify(eventsClone_1);
498
+ // de-dupe events
499
+ eventsToSend.forEach(function (event, idx) {
500
+ var newEvent = Object.assign({}, event);
501
+ delete newEvent.id;
502
+ delete newEvent.pid;
503
+ if (stringyEventsClone_1.indexOf(JSON.stringify(newEvent)) == -1) {
504
+ savedEvents.push(__assign({}, eventsToSend[idx]));
505
+ }
506
+ });
507
+ // save the beacon pool with de-duped events
508
+ _this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify(savedEvents));
494
509
  }
495
510
  clearTimeout(_this.isSending);
496
511
  _this.isSending = window.setTimeout(function () {
497
- if (events.length) {
512
+ if (savedEvents.length) {
498
513
  var xhr = new XMLHttpRequest();
499
514
  xhr.open('POST', 'https://beacon.searchspring.io/beacon');
500
515
  xhr.setRequestHeader('Content-Type', 'application/json');
501
- xhr.send(JSON.stringify(events.length == 1 ? events[0] : events));
516
+ xhr.send(JSON.stringify(savedEvents.length == 1 ? savedEvents[0] : savedEvents));
502
517
  }
503
518
  _this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify([]));
504
- }, BATCH_TIMEOUT);
519
+ }, exports.BATCH_TIMEOUT);
505
520
  };
506
521
  if (typeof globals != 'object' || typeof globals.siteId != 'string') {
507
522
  throw new Error("Invalid config passed to tracker. The \"siteId\" attribute must be provided.");
@@ -1,5 +1,6 @@
1
1
  import { BeaconEvent } from './BeaconEvent';
2
2
  import { TrackerGlobals, TrackMethods, BeaconContext, TrackerConfig } from './types';
3
+ export declare const BATCH_TIMEOUT = 200;
3
4
  export declare class Tracker {
4
5
  private mode;
5
6
  private globals;
@@ -1 +1 @@
1
- {"version":3,"file":"Tracker.d.ts","sourceRoot":"","sources":["../../src/Tracker.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACN,cAAc,EACd,YAAY,EAIZ,aAAa,EAQb,aAAa,EAEb,MAAM,SAAS,CAAC;AAsBjB,qBAAa,OAAO;IACnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,aAAa;IA+IpD,UAAU,IAAI,cAAc;IAI5B,UAAU,IAAI,aAAa;IAI3B,QAAQ,IAAI,IAAI;IAMvB,KAAK,EAAE,YAAY,CAgTjB;IAEF,aAAa,QAAS,MAAM,aAAa,SAAS,GAAG,UAInD;IAEF,SAAS,QAAO,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBvC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAoBnC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAOnC;IAEF,aAAa,QAAO,IAAI,CAuCtB;IAEF,OAAO;;uBAEI,MAAM,EAAE;yBAOJ,MAAM,EAAE,KAAG,IAAI;yBAYf,MAAM,EAAE,KAAG,IAAI;4BAaZ,MAAM,EAAE,KAAG,IAAI;;;;uBAqBtB,MAAM,EAAE;;MAQjB;IAEF,UAAU,gDAAmC,IAAI,CAuB/C;CACF"}
1
+ {"version":3,"file":"Tracker.d.ts","sourceRoot":"","sources":["../../src/Tracker.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACN,cAAc,EACd,YAAY,EAIZ,aAAa,EAQb,aAAa,EAEb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,aAAa,MAAM,CAAC;AAoBjC,qBAAa,OAAO;IACnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,aAAa;IA+IpD,UAAU,IAAI,cAAc;IAI5B,UAAU,IAAI,aAAa;IAI3B,QAAQ,IAAI,IAAI;IAMvB,KAAK,EAAE,YAAY,CAgTjB;IAEF,aAAa,QAAS,MAAM,aAAa,SAAS,GAAG,UAInD;IAEF,SAAS,QAAO,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBvC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAoBnC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAOnC;IAEF,aAAa,QAAO,IAAI,CAuCtB;IAEF,OAAO;;uBAEI,MAAM,EAAE;yBAOJ,MAAM,EAAE,KAAG,IAAI;yBAYf,MAAM,EAAE,KAAG,IAAI;4BAaZ,MAAM,EAAE,KAAG,IAAI;;;;uBAqBtB,MAAM,EAAE;;MAQjB;IAEF,UAAU,gDAAmC,IAAI,CAyC/C;CACF"}
@@ -7,7 +7,7 @@ import { TrackEvent } from './TrackEvent';
7
7
  import { PixelEvent } from './PixelEvent';
8
8
  import { BeaconEvent } from './BeaconEvent';
9
9
  import { BeaconType, BeaconCategory, } from './types';
10
- const BATCH_TIMEOUT = 150;
10
+ export const BATCH_TIMEOUT = 200;
11
11
  const LEGACY_USERID_COOKIE_NAME = '_isuid';
12
12
  const USERID_COOKIE_NAME = 'ssUserId';
13
13
  const SHOPPERID_COOKIE_NAME = 'ssShopperId';
@@ -459,20 +459,35 @@ export class Tracker {
459
459
  if (this.mode !== AppMode.production) {
460
460
  return;
461
461
  }
462
- const events = JSON.parse(this.localStorage.get(LOCALSTORAGE_BEACON_POOL_NAME) || '[]');
462
+ let savedEvents = JSON.parse(this.localStorage.get(LOCALSTORAGE_BEACON_POOL_NAME) || '[]');
463
463
  if (eventsToSend) {
464
- eventsToSend.forEach((event) => {
465
- events.push({ ...event });
464
+ let eventsClone = [];
465
+ savedEvents.forEach((_event, idx) => {
466
+ // using Object.assign since we are not modifying nested properties
467
+ eventsClone.push(Object.assign({}, _event));
468
+ delete eventsClone[idx].id;
469
+ delete eventsClone[idx].pid;
466
470
  });
467
- this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify(events));
471
+ const stringyEventsClone = JSON.stringify(eventsClone);
472
+ // de-dupe events
473
+ eventsToSend.forEach((event, idx) => {
474
+ let newEvent = Object.assign({}, event);
475
+ delete newEvent.id;
476
+ delete newEvent.pid;
477
+ if (stringyEventsClone.indexOf(JSON.stringify(newEvent)) == -1) {
478
+ savedEvents.push({ ...eventsToSend[idx] });
479
+ }
480
+ });
481
+ // save the beacon pool with de-duped events
482
+ this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify(savedEvents));
468
483
  }
469
484
  clearTimeout(this.isSending);
470
485
  this.isSending = window.setTimeout(() => {
471
- if (events.length) {
486
+ if (savedEvents.length) {
472
487
  const xhr = new XMLHttpRequest();
473
488
  xhr.open('POST', 'https://beacon.searchspring.io/beacon');
474
489
  xhr.setRequestHeader('Content-Type', 'application/json');
475
- xhr.send(JSON.stringify(events.length == 1 ? events[0] : events));
490
+ xhr.send(JSON.stringify(savedEvents.length == 1 ? savedEvents[0] : savedEvents));
476
491
  }
477
492
  this.localStorage.set(LOCALSTORAGE_BEACON_POOL_NAME, JSON.stringify([]));
478
493
  }, BATCH_TIMEOUT);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-tracker",
3
- "version": "0.40.0",
3
+ "version": "0.41.0",
4
4
  "description": "Snap Tracker",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,8 +20,8 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-store-mobx": "^0.40.0",
24
- "@searchspring/snap-toolbox": "^0.40.0",
23
+ "@searchspring/snap-store-mobx": "^0.41.0",
24
+ "@searchspring/snap-toolbox": "^0.41.0",
25
25
  "@types/uuid": "8.3.4",
26
26
  "deepmerge": "4.2.2",
27
27
  "uuid": "8.3.2"
@@ -30,5 +30,5 @@
30
30
  "files": [
31
31
  "dist/**/*"
32
32
  ],
33
- "gitHead": "ab543649e56e547374715ad0f018db29d72a0d8e"
33
+ "gitHead": "6407e4cb50b8845bf38528e9ed742f6ca97cc2a7"
34
34
  }