@compilacion/colleciones-clientos 2.0.1 → 2.0.2

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.
@@ -57,10 +57,8 @@
57
57
  this.adjevtives = [];
58
58
  this.identifiers = {};
59
59
  this.action = '';
60
- this.actor = {
61
- name:'',
62
- identifiers: []
63
- };
60
+ this.actor = {};
61
+ this.actorIdentifiers = {};
64
62
  this.context = {};
65
63
  this.references = {};
66
64
  // set default values
@@ -196,7 +194,7 @@
196
194
  if (typeof name !== 'string') {
197
195
  throw new Error('Actor Identifier name must be a string');
198
196
  }
199
- this.actor.identifiers[name] = identifier;
197
+ this.actorIdentifiers[name] = identifier;
200
198
  }
201
199
 
202
200
  /**
@@ -253,6 +251,8 @@
253
251
  identifiers: this.identifiers,
254
252
  action: this.action,
255
253
  actor: this.actor,
254
+ actorIdentifiers: this.actorIdentifiers,
255
+ actorIds: this.actorIds,
256
256
  context: this.context,
257
257
  references: this.references,
258
258
  meta: this.meta
@@ -264,16 +264,18 @@
264
264
  * @param {object} obj
265
265
  * @returns {CollecionesEvent}
266
266
  */
267
- static fromJSON(obj) {
267
+ static fromJSON(obj) {
268
268
  if (!obj || obj.class !== 'CollecionesEvent') {
269
- throw new Error('Invalid or missing event class type');
270
- }
269
+ throw new Error('Invalid or missing event class type');
270
+ }
271
271
  const instance = new CollecionesEvent();
272
272
  instance.entity = obj.entity;
273
273
  instance.adjevtives = obj.adjectives || [];
274
274
  instance.identifiers = obj.identifiers || {};
275
275
  instance.action = obj.action;
276
- instance.actor = obj.actor || { name: '', identifiers: {} };
276
+ instance.actor = obj.actor;
277
+ instance.actorIdentifiers = obj.actorIdentifiers;
278
+ instance.actorIds = obj.actorIds;
277
279
  instance.context = obj.context || {};
278
280
  instance.references = obj.references || {};
279
281
  instance.meta = obj.meta || {};
@@ -317,6 +319,7 @@
317
319
  this.flushSize = flushSize;
318
320
  this.buffer = [];
319
321
  this.timer = null;
322
+ this.lastPayload = null;
320
323
  }
321
324
 
322
325
  /**
@@ -391,7 +394,9 @@
391
394
  async flush() {
392
395
  if (this.buffer.length === 0) return;
393
396
  this.stopTimer();
394
- let body = this.getBody();
397
+ const body = this.buildBody();
398
+ this.lastPayload = body;
399
+ this.buffer = [];
395
400
  try {
396
401
  const response = await fetch(this.endpoint, {
397
402
  method: 'POST',
@@ -405,20 +410,19 @@
405
410
  console.log(`Failed to send events: ${response.statusText}`);
406
411
  }
407
412
  return true;
408
- } catch (error) {
413
+ } catch (error) {
409
414
  console.log(`Network error sending events: ${error.message}`);
410
415
  }
411
416
  }
412
417
 
413
- getBody() {
414
- const eventsToSend = [...this.buffer];
415
- this.buffer = [];
416
- let postPayload = [];
417
- eventsToSend.forEach((e) => {
418
- postPayload.push( toBase64( JSON.stringify(e.toJSON())) );
419
- });
420
- return JSON.stringify(postPayload);
418
+ /**
419
+ * Builds a POST-ready payload from the current buffer, without clearing it.
420
+ * @returns {string} JSON string of base64-encoded serialized events.
421
+ */
422
+ buildBody() {
423
+ return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));
421
424
  }
425
+
422
426
  }
423
427
 
424
428
  /**
@@ -436,7 +440,6 @@
436
440
  this.emitters = emitters;
437
441
  this.trackerName = trackerName;
438
442
  this.appName = appName;
439
- this.identifiers = {};
440
443
  }
441
444
 
442
445
  /**
@@ -448,9 +451,6 @@
448
451
  if (!(collecionesEvent instanceof CollecionesEvent)) {
449
452
  throw new Error('Event must be of type CollecionesEvent');
450
453
  }
451
- for (const [key, value] of Object.entries(this.identifiers)) {
452
- collecionesEvent.addIdentifier(key, value);
453
- }
454
454
  collecionesEvent.setTracker(this.trackerName);
455
455
  collecionesEvent.setAppName(this.appName);
456
456
  this.emitters.forEach(element => {
@@ -691,11 +691,12 @@
691
691
  }
692
692
  };
693
693
 
694
- // Final dispatch: .then.track.with(emitter)
695
- track = (emitter) => {
696
- if(emitter instanceof CollecionesEmitter){
697
- emitter.track(eventInstance);
694
+ // Final dispatch: .then.track.with(tracker)
695
+ track = (tracker) => {
696
+ if(!(tracker instanceof CollecionesTracker)){
697
+ throw new Error('can only be a CollecionesTracker')
698
698
  }
699
+ tracker.track(eventInstance);
699
700
  return {
700
701
  and: track,
701
702
  helpers,
@@ -1 +1 @@
1
- {"version":3,"file":"collecionesClientos.iife.js","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js","../src/collecionesClientos.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {\n name:'', \n identifiers: []\n };\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actor.identifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) {\n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type');\n }\n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor || { name: '', identifiers: {} };\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n let body = this.getBody();\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) {\n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n getBody() {\n const eventsToSend = [...this.buffer];\n this.buffer = [];\n let postPayload = [];\n eventsToSend.forEach((e) => {\n postPayload.push( toBase64( JSON.stringify(e.toJSON())) );\n });\n return JSON.stringify(postPayload);\n }\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n this.identifiers = {};\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n for (const [key, value] of Object.entries(this.identifiers)) {\n collecionesEvent.addIdentifier(key, value);\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesEmitter from './CollecionesEmitter.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(emitter)\n track = (emitter) => {\n if(emitter instanceof CollecionesEmitter){\n emitter.track(eventInstance);\n }\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;","import CollecionesEmitter from './CollecionesEmitter.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport CollecionesWebTracker from './CollecionesWebTracker.js';\nimport CollecionesEvent from './CollecionesEvent.js';\nimport collecionesDsl from './collecionesDsl.js';\n\n(function(global) {\n global.CollecionesEmitter = CollecionesEmitter;\n global.CollecionesTracker = CollecionesTracker;\n global.CollecionesWebTracker = CollecionesWebTracker;\n global.CollecionesEvent = CollecionesEvent;\n global.collecionesDsl = collecionesDsl;\n})(typeof window !== 'undefined' ? window : globalThis);"],"names":[],"mappings":";;;IAAA;;;IAGA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE;IAChC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;IAC5E,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM;IACX,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC3D;IACA;;IAgBA;IACA;IACA;IACA;IACA;IACA,MAAM,iBAAiB,GAAG,WAAW;IACrC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IAC3E,QAAQ,OAAO,EAAE;IACjB;IACA,IAAI,OAAO;IACX,QAAQ,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpC,QAAQ,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpC,QAAQ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;IACnC,QAAQ,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;IAC1C,QAAQ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;IACxC,QAAQ,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;IAClE,QAAQ,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;IACjC,QAAQ,SAAS,EAAE,SAAS,CAAC,SAAS;IACtC,QAAQ,cAAc,EAAE,MAAM,CAAC,WAAW;IAC1C,QAAQ,aAAa,EAAE,MAAM,CAAC,UAAU;IACxC,KAAK;IACL;;ICrDA;IACA;IACA;IACA;IACA,MAAM,gBAAgB,CAAC;;IAEvB;IACA;IACA;IACA,IAAI,WAAW,GAAG;IAClB;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;IAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;IAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG;IACrB,YAAY,IAAI,CAAC,EAAE;IACnB,YAAY,WAAW,EAAE;IACzB,SAAS;IACT,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;IACzB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;IAC5B;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG;IACpB,YAAY,WAAW,EAAE,kBAAkB;IAC3C,YAAY,kBAAkB,EAAE;IAChC,SAAS;IACT,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACzE,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,QAAQ,EAAE;IACrG,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE;IAClI,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;IAC5F,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB;IAC9E,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC/E,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK;IACjD;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW;IACtC,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,GAAG,GAAG;IACnD;;IAEA;IACA;IACA;IACA;IACA,IAAI,qBAAqB,GAAG;IAC5B,QAAQ,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB;IAC9C,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,GAAG,kBAAkB;IAClE;;IAEA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,cAAc,GAAG,EAAE,EAAE;IAC1C,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;IACnE,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;IAC7C;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;IAChC;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;IAChC;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,MAAM,EAAE;IACtB,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;IACtD;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM;IACjC;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG,SAAS,MAAM,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG,SAAS,MAAM,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B;;IAEA;IACA;IACA;IACA;IACA,IAAI,YAAY,GAAG,SAAS,SAAS,EAAE;IACvC,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;IAC3C,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;IACzD;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACvC;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,GAAG,SAAS,IAAI,EAAE,UAAU,EAAE;IAC/C,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;IAC/D;IACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU;IAC3C;;IAEA;IACA;IACA;IACA;IACA,IAAI,QAAQ,GAAG,SAAS,IAAI,EAAE;IAC9B,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IAC1D;IACA,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;IAC9B;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,GAAG,SAAS,IAAI,EAAE,UAAU,EAAE;IACpD,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU;IACjD;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;IAC1C,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;IACzC,YAAY,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;IACvD;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK;IACrC;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG,SAAS,MAAM,EAAE;IAClC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;IACjE;IACA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;IAClD,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACvD;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,oBAAoB,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;IAC9D,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;IACtE;IACA,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU;IAC9D;;IAEA;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO;IACf,YAAY,KAAK,EAAE,kBAAkB;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;IACvC,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;IACzC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;IAC7B,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;IACjC,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;IACvC,YAAY,IAAI,EAAE,IAAI,CAAC;IACvB,SAAS;IACT;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE;IACzB,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,kBAAkB,EAAE;IACtD,YAAY,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;IAClE;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;IAC/C,QAAQ,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IACpC,QAAQ,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE;IAClD,QAAQ,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE;IACpD,QAAQ,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IACpC,QAAQ,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACnE,QAAQ,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE;IAC5C,QAAQ,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE;IAClD,QAAQ,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;IACtC,QAAQ,OAAO,QAAQ;IACvB;IACA;IACA;;IC3OA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,kBAAkB,CAAC;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,GAAG,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,aAAa,GAAG,KAAK,EAAE;IAC9E,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;IAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;IAClC,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,QAAQ,IAAI,OAAO,IAAI,CAAC,aAAa,IAAI,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;IAC7E,YAAY,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC;IAC5E;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,GAAG;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACzB,YAAY,IAAI,CAAC,UAAU,EAAE;IAC7B;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;IACxB,YAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,KAAK,EAAE;IACjB,QAAQ,IAAI,EAAE,KAAK,YAAY,gBAAgB,CAAC,EAAE;IAClD,YAAY,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IAC5E;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE;IAC5B,QAAQ,IAAI,EAAE,KAAK,YAAY,gBAAgB,CAAC,EAAE;IAClD,YAAY,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IAC5E;IACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE;IAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;IACxF;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,KAAK,GAAG;IAClB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;IACtC,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;IACjC,QAAQ,IAAI;IACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;IACxD,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,WAAW,EAAE,SAAS;IACtC,gBAAgB,OAAO,EAAE;IACzB,oBAAoB,cAAc,EAAE;IACpC,iBAAiB;IACjB,gBAAgB;IAChB,aAAa,CAAC;IACd,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAC9B,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E;IACA,YAAY,OAAO,IAAI;IACvB,SAAS,CAAC,OAAO,KAAK,EAAE;IACxB,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,SAAS;IACT;;IAEA,IAAI,OAAO,GAAG;IACd,QAAQ,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,WAAW,GAAG,EAAE;IAC5B,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;IACpC,YAAY,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;IACrE,SAAS,CAAC;IACV,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;IAC1C;IACA;;IC1IA;IACA;IACA;IACA,MAAM,kBAAkB,CAAC;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;IAChD,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;IACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;IAC7B;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC5B,QAAQ,IAAI,EAAE,gBAAgB,YAAY,gBAAgB,CAAC,EAAE;IAC7D,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;IACrE,YAAY,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;IACtD;IACA,QAAQ,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IACrD,QAAQ,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;IACzC,YAAY,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;IAC3E,SAAS,CAAC;IACV;IACA;;IClCA;IACA;IACA;IACA;IACA,MAAM,qBAAqB,SAAS,kBAAkB,CAAC;IACvD;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;IAChD,QAAQ,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC;IAC7C;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC5B,QAAQ,IAAI,EAAE,gBAAgB,YAAY,gBAAgB,CAAC,EAAE;IAC7D,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IAC1E,QAAQ,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtC;IACA;;IC/BA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;IAKA,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK;IACvB,IAAI,OAAO,CAAC,CAAC,MAAM,GAAG;IACtB,QAAQ,IAAI,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACnD,QAAQ,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;;IAEvC,QAAQ,IAAI,OAAO,GAAG;IACtB,YAAY,QAAQ,EAAE,MAAM;IAC5B,gBAAgB,OAAO,aAAa;IACpC,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,IAAI,iBAAiB,GAAG,MAAM,EAAE,CAAC;IACzC,QAAQ,IAAI,oBAAoB,GAAG,MAAM,EAAE,CAAC;IAC5C,QAAQ,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;IAChC,QAAQ,IAAI,kBAAkB,GAAG,MAAM,EAAE,CAAC;IAC1C,QAAQ,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,IAAI,YAAY,GAAG,MAAM,EAAE,CAAC;IACpC,QAAQ,IAAI,eAAe,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,IAAI,sBAAsB,GAAG,MAAM,EAAE,CAAC;IAC9C,QAAQ,IAAI,YAAY,GAAG,MAAM,EAAE,CAAC;IACpC,QAAQ,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;;IAE7B;IACA,QAAQ,iBAAiB,GAAG,CAAC,MAAM,KAAK;IACxC,YAAY,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5D,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,MAAM;IAC1B,oBAAoB,OAAO,EAAE,OAAO;IACpC,iBAAiB;IACjB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,iBAAiB;IACjB,gBAAgB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACxC,gBAAgB;IAChB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,oBAAoB,GAAG,CAAC,IAAI,KAAK;IACzC,YAAY,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;IACnD,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,CAAC,KAAK,KAAK;IAC/B,oBAAoB,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;IAC5D,oBAAoB,OAAO;IAC3B,wBAAwB,OAAO;IAC/B,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,EAAE,EAAE;IAChC,yBAAyB;IACzB,wBAAwB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAChD;IACA,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK;IAChC,YAAY,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5D,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,GAAG,EAAE,SAAS;IAC9B,gBAAgB,CAAC,GAAG,iBAAiB;IACrC,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK;IAChC,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,QAAQ;IAC5B,gBAAgB,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IAC/C,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IAC3C,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,QAAQ,GAAG,CAAC,IAAI,KAAK;IAC7B,YAAY,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC,YAAY,OAAO;IACnB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,iBAAiB;IACjB,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,kBAAkB,GAAG,CAAC,IAAI,KAAK;IACvC,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,CAAC,KAAK,KAAK;IAC/B,oBAAoB,aAAa,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;IACjE,oBAAoB,OAAO;IAC3B,wBAAwB,OAAO;IAC/B,wBAAwB,GAAG,EAAE,kBAAkB;IAC/C,wBAAwB,IAAI,EAAE,UAAU;IACxC,wBAAwB,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IACvD;IACA,iBAAiB;IACjB,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,UAAU,GAAG,CAAC,OAAO,KAAK;IAClC,YAAY,OAAO;IACnB,gBAAgB,OAAO;IACvB,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,EAAE,EAAE,CAAC,KAAK,KAAK;IACnC,wBAAwB,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IAChE,wBAAwB,OAAO;IAC/B,4BAA4B,OAAO;IACnC,4BAA4B,GAAG,EAAE,UAAU;IAC3C,4BAA4B,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IAC3D;IACA;IACA;IACA;IACA,SAAS;;IAET;IACA,QAAQ,YAAY,GAAG,CAAC,MAAM,KAAK;IACnC,YAAY,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;IAC5C,YAAY,OAAO;IACnB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE,eAAe,CAAC,MAAM;IAC9C,iBAAiB;IACjB,gBAAgB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IAC3C,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,eAAe,GAAG,CAAC,MAAM,KAAK;IACtC,YAAY,OAAO,CAAC,IAAI,KAAK;IAC7B,gBAAgB,OAAO;IACvB,oBAAoB,EAAE,EAAE,CAAC,KAAK,KAAK;IACnC,wBAAwB,aAAa,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC;IAC/E,wBAAwB,OAAO;IAC/B,4BAA4B,OAAO;IACnC,4BAA4B,GAAG,EAAE,sBAAsB;IACvD,4BAA4B,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IACvD,4BAA4B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD;IACA,qBAAqB;IACrB,oBAAoB,OAAO;IAC3B,iBAAiB;IACjB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,YAAY,GAAG,CAAC,IAAI,KAAK;IACjC,YAAY,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;IACzC,YAAY,OAAO;IACnB,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,KAAK,GAAG,CAAC,OAAO,KAAK;IAC7B,YAAY,GAAG,OAAO,YAAY,kBAAkB,CAAC;IACrD,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;IAC5C;IACA,YAAY,OAAO;IACnB,gBAAgB,GAAG,EAAE,KAAK;IAC1B,gBAAgB,OAAO;IACvB;IACA,SAAS;;IAET,QAAQ,OAAO;IACf,YAAY,GAAG,EAAE,SAAS;IAC1B,YAAY,CAAC,EAAE,iBAAiB;IAChC,YAAY,UAAU,EAAE;IACxB,gBAAgB,EAAE,EAAE;IACpB,aAAa;IACb,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;IACnC,YAAY,IAAI,EAAE,OAAO;IACzB,YAAY;IACZ;;IAEA,KAAK,EAAE,MAAM,CAAC;IACd;;IAEA,IAAI,cAAc,GAAG;IACrB,IAAI,GAAG,EAAE;IACT,CAAC;;IClOD,CAAC,SAAS,MAAM,EAAE;IAClB,EAAE,MAAM,CAAC,kBAAkB,GAAG,kBAAkB;IAChD,EAAE,MAAM,CAAC,kBAAkB,GAAG,kBAAkB;IAChD,EAAE,MAAM,CAAC,qBAAqB,GAAG,qBAAqB;IACtD,EAAE,MAAM,CAAC,gBAAgB,GAAG,gBAAgB;IAC5C,EAAE,MAAM,CAAC,cAAc,GAAG,cAAc;IACxC,CAAC,EAAE,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;;;;;;"}
1
+ {"version":3,"file":"collecionesClientos.iife.js","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js","../src/collecionesClientos.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {};\n this.actorIdentifiers = {};\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actorIdentifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n actorIdentifiers: this.actorIdentifiers,\n actorIds: this.actorIds,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) { \n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type'); \n } \n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor;\n instance.actorIdentifiers = obj.actorIdentifiers;\n instance.actorIds = obj.actorIds;\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { fromBase64, toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n this.lastPayload = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n const body = this.buildBody();\n this.lastPayload = body;\n this.buffer = [];\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) { \n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n /**\n * Builds a POST-ready payload from the current buffer, without clearing it.\n * @returns {string} JSON string of base64-encoded serialized events.\n */\n buildBody() {\n return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));\n }\n\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(tracker)\n track = (tracker) => {\n if(!(tracker instanceof CollecionesTracker)){\n throw new Error('can only be a CollecionesTracker')\n }\n tracker.track(eventInstance);\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;","import CollecionesEmitter from './CollecionesEmitter.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport CollecionesWebTracker from './CollecionesWebTracker.js';\nimport CollecionesEvent from './CollecionesEvent.js';\nimport collecionesDsl from './collecionesDsl.js';\n\n(function(global) {\n global.CollecionesEmitter = CollecionesEmitter;\n global.CollecionesTracker = CollecionesTracker;\n global.CollecionesWebTracker = CollecionesWebTracker;\n global.CollecionesEvent = CollecionesEvent;\n global.collecionesDsl = collecionesDsl;\n})(typeof window !== 'undefined' ? window : globalThis);"],"names":[],"mappings":";;;IAAA;;;IAGA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE;IAChC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;IAC5E,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM;IACX,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC3D;IACA;;IAgBA;IACA;IACA;IACA;IACA;IACA,MAAM,iBAAiB,GAAG,WAAW;IACrC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IAC3E,QAAQ,OAAO,EAAE;IACjB;IACA,IAAI,OAAO;IACX,QAAQ,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpC,QAAQ,QAAQ,EAAE,SAAS,CAAC,QAAQ;IACpC,QAAQ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;IACnC,QAAQ,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;IAC1C,QAAQ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;IACxC,QAAQ,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;IAClE,QAAQ,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;IACjC,QAAQ,SAAS,EAAE,SAAS,CAAC,SAAS;IACtC,QAAQ,cAAc,EAAE,MAAM,CAAC,WAAW;IAC1C,QAAQ,aAAa,EAAE,MAAM,CAAC,UAAU;IACxC,KAAK;IACL;;ICrDA;IACA;IACA;IACA;IACA,MAAM,gBAAgB,CAAC;;IAEvB;IACA;IACA;IACA,IAAI,WAAW,GAAG;IAClB;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;IAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;IAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;IACvB,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;IACzB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;IAC5B;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG;IACpB,YAAY,WAAW,EAAE,kBAAkB;IAC3C,YAAY,kBAAkB,EAAE;IAChC,SAAS;IACT,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACzE,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,QAAQ,EAAE;IACrG,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE;IAClI,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;IAC5F,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB;IAC9E,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC/E,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK;IACjD;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW;IACtC,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,GAAG,GAAG;IACnD;;IAEA;IACA;IACA;IACA;IACA,IAAI,qBAAqB,GAAG;IAC5B,QAAQ,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB;IAC9C,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,GAAG,kBAAkB;IAClE;;IAEA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,cAAc,GAAG,EAAE,EAAE;IAC1C,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;IACnE,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;IAC7C;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;IAChC;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;IAChC;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,MAAM,EAAE;IACtB,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;IACtD;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM;IACjC;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG,SAAS,MAAM,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG,SAAS,MAAM,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B;;IAEA;IACA;IACA;IACA;IACA,IAAI,YAAY,GAAG,SAAS,SAAS,EAAE;IACvC,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;IAC3C,YAAY,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;IACzD;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACvC;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,GAAG,SAAS,IAAI,EAAE,UAAU,EAAE;IAC/C,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;IAC/D;IACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU;IAC3C;;IAEA;IACA;IACA;IACA;IACA,IAAI,QAAQ,GAAG,SAAS,IAAI,EAAE;IAC9B,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IAC1D;IACA,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;IAC9B;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,GAAG,SAAS,IAAI,EAAE,UAAU,EAAE;IACpD,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU;IAChD;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;IAC1C,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;IACzC,YAAY,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;IACvD;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK;IACrC;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG,SAAS,MAAM,EAAE;IAClC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;IACjE;IACA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;IAClD,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACvD;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,oBAAoB,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;IAC9D,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;IACtE;IACA,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IACtC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU;IAC9D;;IAEA;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO;IACf,YAAY,KAAK,EAAE,kBAAkB;IACrC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;IACvC,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;IACzC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;IAC7B,YAAY,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;IACnD,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACnC,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;IACjC,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;IACvC,YAAY,IAAI,EAAE,IAAI,CAAC;IACvB,SAAS;IACT;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE;IACzB,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,kBAAkB,EAAE;IACtD,YAAY,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACnE,SAAS;IACT,QAAQ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;IAC/C,QAAQ,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IACpC,QAAQ,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE;IAClD,QAAQ,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE;IACpD,QAAQ,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IACpC,QAAQ,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;IAClC,QAAQ,QAAQ,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB;IACxD,QAAQ,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;IACxC,QAAQ,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE;IAC5C,QAAQ,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE;IAClD,QAAQ,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;IACtC,QAAQ,OAAO,QAAQ;IACvB;IACA;IACA;;IC7OA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,kBAAkB,CAAC;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,GAAG,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,aAAa,GAAG,KAAK,EAAE;IAC9E,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;IAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;IAClC,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;IAC/B;;IAEA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,QAAQ,IAAI,OAAO,IAAI,CAAC,aAAa,IAAI,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;IAC7E,YAAY,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC;IAC5E;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,GAAG;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACzB,YAAY,IAAI,CAAC,UAAU,EAAE;IAC7B;IACA;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;IACxB,YAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,KAAK,EAAE;IACjB,QAAQ,IAAI,EAAE,KAAK,YAAY,gBAAgB,CAAC,EAAE;IAClD,YAAY,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IAC5E;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE;IAC5B,QAAQ,IAAI,EAAE,KAAK,YAAY,gBAAgB,CAAC,EAAE;IAClD,YAAY,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IAC5E;IACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE;IAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;IACxF;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,KAAK,GAAG;IAClB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;IACtC,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;IACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;IAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,IAAI;IACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;IACxD,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,WAAW,EAAE,SAAS;IACtC,gBAAgB,OAAO,EAAE;IACzB,oBAAoB,cAAc,EAAE;IACpC,iBAAiB;IACjB,gBAAgB;IAChB,aAAa,CAAC;IACd,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAC9B,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E;IACA,YAAY,OAAO,IAAI;IACvB,SAAS,CAAC,OAAO,KAAK,EAAE;IACxB,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,SAAS;IACT;;IAEA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF;;IAEA;;IC5IA;IACA;IACA;IACA,MAAM,kBAAkB,CAAC;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;IAChD,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;IACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC5B,QAAQ,IAAI,EAAE,gBAAgB,YAAY,gBAAgB,CAAC,EAAE;IAC7D,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IACrD,QAAQ,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;IACzC,YAAY,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;IAC3E,SAAS,CAAC;IACV;IACA;;IC9BA;IACA;IACA;IACA;IACA,MAAM,qBAAqB,SAAS,kBAAkB,CAAC;IACvD;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;IAChD,QAAQ,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC;IAC7C;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC5B,QAAQ,IAAI,EAAE,gBAAgB,YAAY,gBAAgB,CAAC,EAAE;IAC7D,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;IACrE;IACA,QAAQ,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IAC1E,QAAQ,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtC;IACA;;IC/BA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;IAKA,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK;IACvB,IAAI,OAAO,CAAC,CAAC,MAAM,GAAG;IACtB,QAAQ,IAAI,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACnD,QAAQ,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;;IAEvC,QAAQ,IAAI,OAAO,GAAG;IACtB,YAAY,QAAQ,EAAE,MAAM;IAC5B,gBAAgB,OAAO,aAAa;IACpC,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,IAAI,iBAAiB,GAAG,MAAM,EAAE,CAAC;IACzC,QAAQ,IAAI,oBAAoB,GAAG,MAAM,EAAE,CAAC;IAC5C,QAAQ,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;IAChC,QAAQ,IAAI,kBAAkB,GAAG,MAAM,EAAE,CAAC;IAC1C,QAAQ,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,IAAI,YAAY,GAAG,MAAM,EAAE,CAAC;IACpC,QAAQ,IAAI,eAAe,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,IAAI,sBAAsB,GAAG,MAAM,EAAE,CAAC;IAC9C,QAAQ,IAAI,YAAY,GAAG,MAAM,EAAE,CAAC;IACpC,QAAQ,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;;IAE7B;IACA,QAAQ,iBAAiB,GAAG,CAAC,MAAM,KAAK;IACxC,YAAY,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5D,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,MAAM;IAC1B,oBAAoB,OAAO,EAAE,OAAO;IACpC,iBAAiB;IACjB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,iBAAiB;IACjB,gBAAgB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACxC,gBAAgB;IAChB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,oBAAoB,GAAG,CAAC,IAAI,KAAK;IACzC,YAAY,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;IACnD,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,CAAC,KAAK,KAAK;IAC/B,oBAAoB,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;IAC5D,oBAAoB,OAAO;IAC3B,wBAAwB,OAAO;IAC/B,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,EAAE,EAAE;IAChC,yBAAyB;IACzB,wBAAwB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAChD;IACA,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK;IAChC,YAAY,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5D,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,GAAG,EAAE,SAAS;IAC9B,gBAAgB,CAAC,GAAG,iBAAiB;IACrC,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK;IAChC,YAAY,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC3C,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,QAAQ;IAC5B,gBAAgB,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IAC/C,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IAC3C,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,QAAQ,GAAG,CAAC,IAAI,KAAK;IAC7B,YAAY,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC,YAAY,OAAO;IACnB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,iBAAiB;IACjB,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,kBAAkB,GAAG,CAAC,IAAI,KAAK;IACvC,YAAY,OAAO;IACnB,gBAAgB,EAAE,EAAE,CAAC,KAAK,KAAK;IAC/B,oBAAoB,aAAa,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;IACjE,oBAAoB,OAAO;IAC3B,wBAAwB,OAAO;IAC/B,wBAAwB,GAAG,EAAE,kBAAkB;IAC/C,wBAAwB,IAAI,EAAE,UAAU;IACxC,wBAAwB,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IACvD;IACA,iBAAiB;IACjB,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,UAAU,GAAG,CAAC,OAAO,KAAK;IAClC,YAAY,OAAO;IACnB,gBAAgB,OAAO;IACvB,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,EAAE,EAAE,CAAC,KAAK,KAAK;IACnC,wBAAwB,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IAChE,wBAAwB,OAAO;IAC/B,4BAA4B,OAAO;IACnC,4BAA4B,GAAG,EAAE,UAAU;IAC3C,4BAA4B,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IAC3D;IACA;IACA;IACA;IACA,SAAS;;IAET;IACA,QAAQ,YAAY,GAAG,CAAC,MAAM,KAAK;IACnC,YAAY,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;IAC5C,YAAY,OAAO;IACnB,gBAAgB,UAAU,EAAE;IAC5B,oBAAoB,EAAE,EAAE,eAAe,CAAC,MAAM;IAC9C,iBAAiB;IACjB,gBAAgB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IAC3C,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,eAAe,GAAG,CAAC,MAAM,KAAK;IACtC,YAAY,OAAO,CAAC,IAAI,KAAK;IAC7B,gBAAgB,OAAO;IACvB,oBAAoB,EAAE,EAAE,CAAC,KAAK,KAAK;IACnC,wBAAwB,aAAa,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC;IAC/E,wBAAwB,OAAO;IAC/B,4BAA4B,OAAO;IACnC,4BAA4B,GAAG,EAAE,sBAAsB;IACvD,4BAA4B,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;IACvD,4BAA4B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD;IACA,qBAAqB;IACrB,oBAAoB,OAAO;IAC3B,iBAAiB;IACjB,aAAa;IACb,SAAS;;IAET;IACA,QAAQ,YAAY,GAAG,CAAC,IAAI,KAAK;IACjC,YAAY,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;IACzC,YAAY,OAAO;IACnB,gBAAgB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,gBAAgB;IAChB;IACA,SAAS;;IAET;IACA,QAAQ,KAAK,GAAG,CAAC,OAAO,KAAK;IAC7B,YAAY,GAAG,EAAE,OAAO,YAAY,kBAAkB,CAAC,CAAC;IACxD,gBAAgB,MAAM,IAAI,KAAK,CAAC,kCAAkC;IAClE;IACA,YAAY,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;IACxC,YAAY,OAAO;IACnB,gBAAgB,GAAG,EAAE,KAAK;IAC1B,gBAAgB,OAAO;IACvB;IACA,SAAS;;IAET,QAAQ,OAAO;IACf,YAAY,GAAG,EAAE,SAAS;IAC1B,YAAY,CAAC,EAAE,iBAAiB;IAChC,YAAY,UAAU,EAAE;IACxB,gBAAgB,EAAE,EAAE;IACpB,aAAa;IACb,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;IACnC,YAAY,IAAI,EAAE,OAAO;IACzB,YAAY;IACZ;;IAEA,KAAK,EAAE,MAAM,CAAC;IACd;;IAEA,IAAI,cAAc,GAAG;IACrB,IAAI,GAAG,EAAE;IACT,CAAC;;ICnOD,CAAC,SAAS,MAAM,EAAE;IAClB,EAAE,MAAM,CAAC,kBAAkB,GAAG,kBAAkB;IAChD,EAAE,MAAM,CAAC,kBAAkB,GAAG,kBAAkB;IAChD,EAAE,MAAM,CAAC,qBAAqB,GAAG,qBAAqB;IACtD,EAAE,MAAM,CAAC,gBAAgB,GAAG,gBAAgB;IAC5C,EAAE,MAAM,CAAC,cAAc,GAAG,cAAc;IACxC,CAAC,EAAE,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;;;;;;"}
package/dist/index.cjs CHANGED
@@ -56,10 +56,8 @@ class CollecionesEvent {
56
56
  this.adjevtives = [];
57
57
  this.identifiers = {};
58
58
  this.action = '';
59
- this.actor = {
60
- name:'',
61
- identifiers: []
62
- };
59
+ this.actor = {};
60
+ this.actorIdentifiers = {};
63
61
  this.context = {};
64
62
  this.references = {};
65
63
  // set default values
@@ -195,7 +193,7 @@ class CollecionesEvent {
195
193
  if (typeof name !== 'string') {
196
194
  throw new Error('Actor Identifier name must be a string');
197
195
  }
198
- this.actor.identifiers[name] = identifier;
196
+ this.actorIdentifiers[name] = identifier;
199
197
  }
200
198
 
201
199
  /**
@@ -252,6 +250,8 @@ class CollecionesEvent {
252
250
  identifiers: this.identifiers,
253
251
  action: this.action,
254
252
  actor: this.actor,
253
+ actorIdentifiers: this.actorIdentifiers,
254
+ actorIds: this.actorIds,
255
255
  context: this.context,
256
256
  references: this.references,
257
257
  meta: this.meta
@@ -263,16 +263,18 @@ class CollecionesEvent {
263
263
  * @param {object} obj
264
264
  * @returns {CollecionesEvent}
265
265
  */
266
- static fromJSON(obj) {
266
+ static fromJSON(obj) {
267
267
  if (!obj || obj.class !== 'CollecionesEvent') {
268
- throw new Error('Invalid or missing event class type');
269
- }
268
+ throw new Error('Invalid or missing event class type');
269
+ }
270
270
  const instance = new CollecionesEvent();
271
271
  instance.entity = obj.entity;
272
272
  instance.adjevtives = obj.adjectives || [];
273
273
  instance.identifiers = obj.identifiers || {};
274
274
  instance.action = obj.action;
275
- instance.actor = obj.actor || { name: '', identifiers: {} };
275
+ instance.actor = obj.actor;
276
+ instance.actorIdentifiers = obj.actorIdentifiers;
277
+ instance.actorIds = obj.actorIds;
276
278
  instance.context = obj.context || {};
277
279
  instance.references = obj.references || {};
278
280
  instance.meta = obj.meta || {};
@@ -316,6 +318,7 @@ class CollecionesEmitter {
316
318
  this.flushSize = flushSize;
317
319
  this.buffer = [];
318
320
  this.timer = null;
321
+ this.lastPayload = null;
319
322
  }
320
323
 
321
324
  /**
@@ -390,7 +393,9 @@ class CollecionesEmitter {
390
393
  async flush() {
391
394
  if (this.buffer.length === 0) return;
392
395
  this.stopTimer();
393
- let body = this.getBody();
396
+ const body = this.buildBody();
397
+ this.lastPayload = body;
398
+ this.buffer = [];
394
399
  try {
395
400
  const response = await fetch(this.endpoint, {
396
401
  method: 'POST',
@@ -404,20 +409,19 @@ class CollecionesEmitter {
404
409
  console.log(`Failed to send events: ${response.statusText}`);
405
410
  }
406
411
  return true;
407
- } catch (error) {
412
+ } catch (error) {
408
413
  console.log(`Network error sending events: ${error.message}`);
409
414
  }
410
415
  }
411
416
 
412
- getBody() {
413
- const eventsToSend = [...this.buffer];
414
- this.buffer = [];
415
- let postPayload = [];
416
- eventsToSend.forEach((e) => {
417
- postPayload.push( toBase64( JSON.stringify(e.toJSON())) );
418
- });
419
- return JSON.stringify(postPayload);
417
+ /**
418
+ * Builds a POST-ready payload from the current buffer, without clearing it.
419
+ * @returns {string} JSON string of base64-encoded serialized events.
420
+ */
421
+ buildBody() {
422
+ return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));
420
423
  }
424
+
421
425
  }
422
426
 
423
427
  /**
@@ -435,7 +439,6 @@ class CollecionesTracker {
435
439
  this.emitters = emitters;
436
440
  this.trackerName = trackerName;
437
441
  this.appName = appName;
438
- this.identifiers = {};
439
442
  }
440
443
 
441
444
  /**
@@ -447,9 +450,6 @@ class CollecionesTracker {
447
450
  if (!(collecionesEvent instanceof CollecionesEvent)) {
448
451
  throw new Error('Event must be of type CollecionesEvent');
449
452
  }
450
- for (const [key, value] of Object.entries(this.identifiers)) {
451
- collecionesEvent.addIdentifier(key, value);
452
- }
453
453
  collecionesEvent.setTracker(this.trackerName);
454
454
  collecionesEvent.setAppName(this.appName);
455
455
  this.emitters.forEach(element => {
@@ -690,11 +690,12 @@ let init = (entity) => {
690
690
  }
691
691
  };
692
692
 
693
- // Final dispatch: .then.track.with(emitter)
694
- track = (emitter) => {
695
- if(emitter instanceof CollecionesEmitter){
696
- emitter.track(eventInstance);
693
+ // Final dispatch: .then.track.with(tracker)
694
+ track = (tracker) => {
695
+ if(!(tracker instanceof CollecionesTracker)){
696
+ throw new Error('can only be a CollecionesTracker')
697
697
  }
698
+ tracker.track(eventInstance);
698
699
  return {
699
700
  and: track,
700
701
  helpers,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {\n name:'', \n identifiers: []\n };\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actor.identifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) {\n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type');\n }\n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor || { name: '', identifiers: {} };\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n let body = this.getBody();\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) {\n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n getBody() {\n const eventsToSend = [...this.buffer];\n this.buffer = [];\n let postPayload = [];\n eventsToSend.forEach((e) => {\n postPayload.push( toBase64( JSON.stringify(e.toJSON())) );\n });\n return JSON.stringify(postPayload);\n }\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n this.identifiers = {};\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n for (const [key, value] of Object.entries(this.identifiers)) {\n collecionesEvent.addIdentifier(key, value);\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesEmitter from './CollecionesEmitter.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(emitter)\n track = (emitter) => {\n if(emitter instanceof CollecionesEmitter){\n emitter.track(eventInstance);\n }\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {};\n this.actorIdentifiers = {};\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actorIdentifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n actorIdentifiers: this.actorIdentifiers,\n actorIds: this.actorIds,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) { \n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type'); \n } \n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor;\n instance.actorIdentifiers = obj.actorIdentifiers;\n instance.actorIds = obj.actorIds;\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { fromBase64, toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n this.lastPayload = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n const body = this.buildBody();\n this.lastPayload = body;\n this.buffer = [];\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) { \n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n /**\n * Builds a POST-ready payload from the current buffer, without clearing it.\n * @returns {string} JSON string of base64-encoded serialized events.\n */\n buildBody() {\n return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));\n }\n\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(tracker)\n track = (tracker) => {\n if(!(tracker instanceof CollecionesTracker)){\n throw new Error('can only be a CollecionesTracker')\n }\n tracker.track(eventInstance);\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -54,10 +54,8 @@ class CollecionesEvent {
54
54
  this.adjevtives = [];
55
55
  this.identifiers = {};
56
56
  this.action = '';
57
- this.actor = {
58
- name:'',
59
- identifiers: []
60
- };
57
+ this.actor = {};
58
+ this.actorIdentifiers = {};
61
59
  this.context = {};
62
60
  this.references = {};
63
61
  // set default values
@@ -193,7 +191,7 @@ class CollecionesEvent {
193
191
  if (typeof name !== 'string') {
194
192
  throw new Error('Actor Identifier name must be a string');
195
193
  }
196
- this.actor.identifiers[name] = identifier;
194
+ this.actorIdentifiers[name] = identifier;
197
195
  }
198
196
 
199
197
  /**
@@ -250,6 +248,8 @@ class CollecionesEvent {
250
248
  identifiers: this.identifiers,
251
249
  action: this.action,
252
250
  actor: this.actor,
251
+ actorIdentifiers: this.actorIdentifiers,
252
+ actorIds: this.actorIds,
253
253
  context: this.context,
254
254
  references: this.references,
255
255
  meta: this.meta
@@ -261,16 +261,18 @@ class CollecionesEvent {
261
261
  * @param {object} obj
262
262
  * @returns {CollecionesEvent}
263
263
  */
264
- static fromJSON(obj) {
264
+ static fromJSON(obj) {
265
265
  if (!obj || obj.class !== 'CollecionesEvent') {
266
- throw new Error('Invalid or missing event class type');
267
- }
266
+ throw new Error('Invalid or missing event class type');
267
+ }
268
268
  const instance = new CollecionesEvent();
269
269
  instance.entity = obj.entity;
270
270
  instance.adjevtives = obj.adjectives || [];
271
271
  instance.identifiers = obj.identifiers || {};
272
272
  instance.action = obj.action;
273
- instance.actor = obj.actor || { name: '', identifiers: {} };
273
+ instance.actor = obj.actor;
274
+ instance.actorIdentifiers = obj.actorIdentifiers;
275
+ instance.actorIds = obj.actorIds;
274
276
  instance.context = obj.context || {};
275
277
  instance.references = obj.references || {};
276
278
  instance.meta = obj.meta || {};
@@ -314,6 +316,7 @@ class CollecionesEmitter {
314
316
  this.flushSize = flushSize;
315
317
  this.buffer = [];
316
318
  this.timer = null;
319
+ this.lastPayload = null;
317
320
  }
318
321
 
319
322
  /**
@@ -388,7 +391,9 @@ class CollecionesEmitter {
388
391
  async flush() {
389
392
  if (this.buffer.length === 0) return;
390
393
  this.stopTimer();
391
- let body = this.getBody();
394
+ const body = this.buildBody();
395
+ this.lastPayload = body;
396
+ this.buffer = [];
392
397
  try {
393
398
  const response = await fetch(this.endpoint, {
394
399
  method: 'POST',
@@ -402,20 +407,19 @@ class CollecionesEmitter {
402
407
  console.log(`Failed to send events: ${response.statusText}`);
403
408
  }
404
409
  return true;
405
- } catch (error) {
410
+ } catch (error) {
406
411
  console.log(`Network error sending events: ${error.message}`);
407
412
  }
408
413
  }
409
414
 
410
- getBody() {
411
- const eventsToSend = [...this.buffer];
412
- this.buffer = [];
413
- let postPayload = [];
414
- eventsToSend.forEach((e) => {
415
- postPayload.push( toBase64( JSON.stringify(e.toJSON())) );
416
- });
417
- return JSON.stringify(postPayload);
415
+ /**
416
+ * Builds a POST-ready payload from the current buffer, without clearing it.
417
+ * @returns {string} JSON string of base64-encoded serialized events.
418
+ */
419
+ buildBody() {
420
+ return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));
418
421
  }
422
+
419
423
  }
420
424
 
421
425
  /**
@@ -433,7 +437,6 @@ class CollecionesTracker {
433
437
  this.emitters = emitters;
434
438
  this.trackerName = trackerName;
435
439
  this.appName = appName;
436
- this.identifiers = {};
437
440
  }
438
441
 
439
442
  /**
@@ -445,9 +448,6 @@ class CollecionesTracker {
445
448
  if (!(collecionesEvent instanceof CollecionesEvent)) {
446
449
  throw new Error('Event must be of type CollecionesEvent');
447
450
  }
448
- for (const [key, value] of Object.entries(this.identifiers)) {
449
- collecionesEvent.addIdentifier(key, value);
450
- }
451
451
  collecionesEvent.setTracker(this.trackerName);
452
452
  collecionesEvent.setAppName(this.appName);
453
453
  this.emitters.forEach(element => {
@@ -688,11 +688,12 @@ let init = (entity) => {
688
688
  }
689
689
  };
690
690
 
691
- // Final dispatch: .then.track.with(emitter)
692
- track = (emitter) => {
693
- if(emitter instanceof CollecionesEmitter){
694
- emitter.track(eventInstance);
691
+ // Final dispatch: .then.track.with(tracker)
692
+ track = (tracker) => {
693
+ if(!(tracker instanceof CollecionesTracker)){
694
+ throw new Error('can only be a CollecionesTracker')
695
695
  }
696
+ tracker.track(eventInstance);
696
697
  return {
697
698
  and: track,
698
699
  helpers,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {\n name:'', \n identifiers: []\n };\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actor.identifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) {\n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type');\n }\n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor || { name: '', identifiers: {} };\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n let body = this.getBody();\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) {\n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n getBody() {\n const eventsToSend = [...this.buffer];\n this.buffer = [];\n let postPayload = [];\n eventsToSend.forEach((e) => {\n postPayload.push( toBase64( JSON.stringify(e.toJSON())) );\n });\n return JSON.stringify(postPayload);\n }\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n this.identifiers = {};\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n for (const [key, value] of Object.entries(this.identifiers)) {\n collecionesEvent.addIdentifier(key, value);\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesEmitter from './CollecionesEmitter.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(emitter)\n track = (emitter) => {\n if(emitter instanceof CollecionesEmitter){\n emitter.track(eventInstance);\n }\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/utils.js","../src/CollecionesEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesWebTracker.js","../src/collecionesDsl.js"],"sourcesContent":["// helper 'private' functions\n\n\n/**\n * Encodes a string to Base64.\n * Uses browser or Node.js method depending on environment.\n * @param {string} str\n * @returns {string}\n */\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\n/**\n * Decodes a Base64 string to UTF-8.\n * Uses browser or Node.js method depending on environment.\n * @param {string} b64\n * @returns {string}\n */\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\n/**\n * Collects browser-related context values like screen size, language, etc.\n * Returns an empty object if not in browser environment.\n * @returns {Object}\n */\nconst getBrowserContext = function() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return {};\n }\n return {\n hasFocus: document.hasFocus(),\n language: navigator.language,\n platform: navigator.platform,\n referrer: document.referrer,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n url: window.location.href,\n userAgent: navigator.userAgent,\n viewportHeight: window.innerHeight,\n viewportWidth: window.innerWidth,\n };\n}\n\nexport {\n fromBase64,\n getBrowserContext,\n toBase64,\n};","/**\n * Base class representing a structured event with timestamp, identifiers, and data fields.\n * This class is used to model events in a semantic and structured format for tracking purposes.\n */\nclass CollecionesEvent {\n\n /**\n * Constructs a new event with default metadata and timestamps.\n */\n constructor() {\n // initialize event properties\n this.entity = '';\n this.adjevtives = [];\n this.identifiers = {};\n this.action = '';\n this.actor = {};\n this.actorIdentifiers = {};\n this.context = {};\n this.references = {};\n // set default values\n this.meta = {\n eventFormat: 'CollecionesEvent',\n eventFormatVersion: '1'\n };\n this.meta.tracker = '';\n this.meta.app = '';\n this.meta.timestamps = {};\n this.meta.timestamps.clientDatetimeUtc = new Date().toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.meta.timestamps.clientDatetimeLocal = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString();\n this.meta.timestamps.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.meta.timestamps.timeZoneOffset = new Date().getTimezoneOffset()\n } else {\n this.meta.timestamps.clientDatetimeLocal = new Date().toISOString();\n this.meta.timestamps.timeZone = 'UTC';\n }\n }\n\n /**\n * Returns the declared event format.\n * @returns {string} The format name (e.g. 'CollecionesEvent').\n */\n getEventFormat() {\n let v = this.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n /**\n * Returns the version of the event format.\n * @returns {string} The format version string.\n */\n getEventFormatVersion() {\n let v = this?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesEvent';\n }\n\n /**\n * Overrides or supplements the event's timestamp fields with custom values.\n * @param {object} dateTimeObject - Key-value pairs to merge into the existing timestamp object.\n */\n overrideDatetime(dateTimeObject = {}) {\n for (const [key, value] of Object.entries(dateTimeObject)) {\n this.meta.timestamps[key] = value;\n }\n }\n\n /**\n * Sets the name of the tracker responsible for generating this event.\n * @param {string} name - Tracker name.\n */\n setTracker(name) {\n this.meta.tracker = name;\n }\n\n /**\n * Sets the name of the application that generated the event.\n * @param {string} name - Application name.\n */\n setAppName(name) {\n this.meta.appName = name;\n }\n\n /**\n * Sets the expected schema name for this event.\n * @param {string} schema - The name of the schema.\n */\n setSchema(schema) {\n if (typeof schema !== 'string') {\n throw new Error('Schema must be a string');\n }\n this.meta.schema = schema;\n }\n\n /**\n * Sets the entity (subject) of the event.\n * @param {string} entity - The entity name.\n */\n setEntity = function(entity) {\n this.entity = entity;\n }\n \n /**\n * Defines the main action of the event (e.g., 'clicked').\n * @param {string} action - The action string.\n */\n setAction = function(action) {\n this.action = action;\n }\n\n /**\n * Adds an adjective that describes the entity in more detail.\n * @param {string} adjective - An adjective string.\n */\n addAdjective = function(adjective) {\n if (typeof adjective !== 'string') {\n throw new Error('Adjective must be a string');\n }\n this.adjevtives.push(adjective);\n }\n\n /**\n * Adds or updates an identifier for the primary entity.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Identifier name must be a string');\n }\n this.identifiers[name] = identifier;\n }\n\n /**\n * Defines the name of the actor (who or what performed the action).\n * @param {string} name - Actor name (e.g., 'user').\n */\n setActor = function(name) {\n if (typeof name !== 'string') {\n throw new Error('Actor name must be a string');\n }\n this.actor.name = name;\n }\n\n /**\n * Adds or updates an identifier for the actor.\n * @param {string} name - Identifier name.\n * @param {*} identifier - Identifier value.\n */\n setActorIdentifier = function(name, identifier) {\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.actorIdentifiers[name] = identifier;\n }\n\n /**\n * Adds contextual information to the event.\n * @param {string} context - The key of the context field.\n * @param {*} value - The value of the context field.\n */\n setContext = function(context, value) {\n if (typeof context !== 'string') {\n throw new Error('Context must be a string');\n }\n this.context[context] = value;\n }\n\n /**\n * Declares an entity referenced by this event.\n * @param {string} entity - The referenced entity name.\n */\n setRefence = function(entity) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity must be a string');\n }\n if(this.references[entity] === undefined) {\n this.references[entity] = {identifiers: {}};\n }\n }\n\n /**\n * Adds or updates an identifier for a referenced entity.\n * @param {string} entity - The referenced entity name.\n * @param {string} name - The identifier key.\n * @param {*} identifier - The identifier value.\n */\n setRefenceIdentifier = function(entity, name, identifier) {\n if (typeof entity !== 'string') {\n throw new Error('Referenced entity name must be a string');\n }\n if (typeof name !== 'string') {\n throw new Error('Actor Identifier name must be a string');\n }\n this.setRefence(entity);\n this.references[entity].identifiers[name] = identifier;\n }\n\n /**\n * Serializes the event to a plain object suitable for JSON.stringify().\n * @returns {object}\n */\n toJSON() {\n return {\n class: 'CollecionesEvent',\n entity: this.entity,\n adjectives: this.adjevtives,\n identifiers: this.identifiers,\n action: this.action,\n actor: this.actor,\n actorIdentifiers: this.actorIdentifiers,\n actorIds: this.actorIds,\n context: this.context,\n references: this.references,\n meta: this.meta\n };\n }\n\n /**\n * Recreates an instance of CollecionesEvent from a plain object.\n * @param {object} obj\n * @returns {CollecionesEvent}\n */\n static fromJSON(obj) { \n if (!obj || obj.class !== 'CollecionesEvent') {\n throw new Error('Invalid or missing event class type'); \n } \n const instance = new CollecionesEvent();\n instance.entity = obj.entity;\n instance.adjevtives = obj.adjectives || [];\n instance.identifiers = obj.identifiers || {};\n instance.action = obj.action;\n instance.actor = obj.actor;\n instance.actorIdentifiers = obj.actorIdentifiers;\n instance.actorIds = obj.actorIds;\n instance.context = obj.context || {};\n instance.references = obj.references || {};\n instance.meta = obj.meta || {};\n return instance;\n }\n \n}\n\nexport default CollecionesEvent;","import { fromBase64, toBase64 } from './utils/utils.js';\nimport CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * CollecionesEmitter\n * -------------------\n * This class collects and sends event objects to a remote endpoint (e.g., an event collector API).\n * It is used in both client- and server-side tracking scenarios, typically in combination with\n * CollecionesEvent or subclasses like CollecionesBaseEvent.\n *\n * Behavior:\n * - Events are buffered via `.track()` or `.trackAsync()`.\n * - If the number of buffered events reaches `flushSize`, the buffer is automatically flushed.\n * - If `flushInterval` is provided, the buffer is flushed at a fixed interval.\n * - Flushing serializes each event using `.toJSON()`, encodes it with base64, and posts\n * the resulting array to the configured endpoint.\n *\n * Example usage:\n * const emitter = new CollecionesEmitter('/track', 5, 10000);\n * emitter.track(new CollecionesEvent());\n *\n * Note:\n * This class is stateful. To stop periodic flushing, call `.stopTimer()` when the emitter is no longer in use.\n */\nclass CollecionesEmitter {\n\n /**\n * Initializes the emitter with buffering settings.\n * @param {string} [endpoint='/collect'] - The URL to send events to.\n * @param {number} [flushSize=10] - Number of events to buffer before flushing.\n * @param {number|boolean} [flushInterval=false] - Time in ms to flush events periodically.\n */\n constructor(endpoint = '/collect', flushSize = 10, flushInterval = false) {\n this.endpoint = endpoint;\n this.flushInterval = flushInterval;\n this.flushSize = flushSize;\n this.buffer = [];\n this.timer = null;\n this.lastPayload = null;\n }\n\n /**\n * Starts the flush timer if a valid interval is set.\n * @returns {void}\n */\n startTimer() {\n this.stopTimer();\n if (typeof this.flushInterval == 'number' && this.flushInterval > 0) {\n this.timer = setInterval(() => this.flush(), this.flushInterval);\n }\n }\n\n /**\n * Starts the flush timer only if not already running.\n * @returns {void}\n */\n startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n /**\n * Stops the active flush timer.\n * @returns {void}\n */\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n /**\n * Adds an event to the buffer and flushes if threshold is reached.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {void}\n */\n track(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.trackAsync(event);\n }\n\n /**\n * Asynchronously adds an event and flushes if the buffer size is exceeded.\n * Validates that the event is an instance of CollecionesEvent to ensure correct event type.\n * @param {CollecionesEvent} event - Event instance to be tracked asynchronously.\n * @throws {Error} Throws if event is not a CollecionesEvent instance.\n * @returns {Promise<void>} Resolves when event is added and flush triggered if needed.\n */\n async trackAsync(event) {\n if (!(event instanceof CollecionesEvent)) {\n throw new Error('Event must be an instance of CollecionesEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n /**\n * Sends all buffered events in a single POST request to the server.\n * Each event is serialized via `.toJSON()` and encoded as a base64 string.\n * Response status is checked for HTTP success; errors are logged but not thrown.\n *\n * @returns {Promise<boolean|undefined>} Resolves true if flush was triggered, or undefined if buffer was empty.\n */\n async flush() {\n if (this.buffer.length === 0) return;\n this.stopTimer();\n const body = this.buildBody();\n this.lastPayload = body;\n this.buffer = [];\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body\n });\n if (!response.ok) {\n console.log(`Failed to send events: ${response.statusText}`);\n }\n return true;\n } catch (error) { \n console.log(`Network error sending events: ${error.message}`);\n } \n }\n\n /**\n * Builds a POST-ready payload from the current buffer, without clearing it.\n * @returns {string} JSON string of base64-encoded serialized events.\n */\n buildBody() {\n return JSON.stringify(this.buffer.map(e => toBase64(JSON.stringify(e.toJSON()))));\n }\n\n}\n\nexport default CollecionesEmitter;","import CollecionesEvent from './CollecionesEvent.js';\n\n/**\n * Tracks events by enriching them with shared identifiers and routing through configured emitters.\n */\nclass CollecionesTracker {\n\n /**\n * Constructs a new tracker instance.\n * @param {Array} emitters - Array of emitter instances responsible for sending events.\n * @param {string} trackerName - Name identifying this tracker.\n * @param {string} appName - Name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n }\n\n /**\n * Sends an event to all emitters after enriching it with identifiers and metadata.\n * @param {CollecionesEvent} collecionesEvent - The event to be sent.\n * @throws {Error} If the input is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setTracker(this.trackerName);\n collecionesEvent.setAppName(this.appName); \n this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n }\n}\n\nexport default CollecionesTracker;","import CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport { getBrowserContext } from './utils/utils.js';\n\n/**\n * Web-specific tracker that enriches events with browser context before sending them.\n * Extends the base CollecionesTracker.\n */\nclass CollecionesWebTracker extends CollecionesTracker {\n /**\n * Creates a new instance of CollecionesWebTracker.\n * @param {Array} emitters - A list of emitter instances used to send the event.\n * @param {string} trackerName - The name of the tracker.\n * @param {string} appName - The name of the application generating events.\n */\n constructor(emitters, trackerName, appName) {\n super(emitters, trackerName, appName);\n }\n\n /**\n * Tracks an event, enriching it with browser context information.\n * @param {CollecionesEvent} collecionesEvent - The event object to track.\n * @throws {Error} If the event is not an instance of CollecionesEvent.\n */\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesEvent)) {\n throw new Error('Event must be of type CollecionesEvent');\n }\n collecionesEvent.setContext('browserContext', getBrowserContext());\n super.track(collecionesEvent); \n }\n}\n\nexport default CollecionesWebTracker;","/**\n * Colleciones DSL\n * ---------------\n * This module provides a fluent, human-readable DSL (domain-specific language) for constructing\n * structured tracking events based on CollecionesBaseEvent. Each step in the chain represents\n * a semantically meaningful piece of the event: the entity, the action, the actor, references, etc.\n *\n * Entry Point:\n * collecionesDsl.the('dark')\n *\n * Chaining:\n * - .and('...') : add additional adjectives\n * - ._('entity') : specify the entity being acted on\n * - .identified.by('field') : declare primary identifier for the subject\n * - .has.been('action') : declare what happened\n * - .by('actor') : describe the actor performing the action\n * - .identified.by('id') : add identifiers for the actor\n * - .with('key').set.to('val') : add contextual data fields\n * - .referring.to('entity') : describe referenced/related entities\n * - .identified.by('refId') : add identifiers for the reference\n * - .conform.to('SchemaName') : attach schema metadata\n * - .then.track.with(emitter) : finalize and emit the event\n *\n * Each function in the chain passes forward a scoped version of the CollecionesBaseEvent instance,\n * and enforces semantic constraints (e.g. `.as()` is required after `.by()`).\n *\n * Internal:\n * - Uses setRefence / setRefenceIdentifier for references\n * - Uses helpers.getEvent() for test access\n * - Uses instanceof CollecionesEmitter for validation\n *\n * This file is designed for internal use by developers building with the Colleciones tracking model.\n */\n\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesTracker from './CollecionesTracker.js';\n\nlet init = (entity) => {\n return ((entity)=>{\n let eventInstance = new CollecionesEvent(); // Core event object\n eventInstance.setEntity(entity);\n\n let helpers = {\n getEvent: () => {\n return eventInstance;\n },\n };\n\n // DSL function groups\n let andEntity = () => {}; // .and(...) chaining after the()\n let setEntityAfterAnd = () => {}; // ._('entity') after .and\n let setEntityIdentifiers = () => {}; // .identified.by(...) for main subject\n let setAction = () => {}; // .has.been(...) for action\n let setActor = () => {}; // .by('actor')\n let setActorIdentifier = () => {}; // .identified.by(...) inside .by(...)\n let addContext = () => {}; // .with(...).set.to(...)\n let addReference = () => {}; // .referring.to(...)\n let getAddReference = () => {}; // .identified.by().as() inside .referring\n let addReferenceIdentifier = () => {}; // .and(...) after reference\n let conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n\n // Adjective chaining: .and(...)._('entity')\n setEntityAfterAnd = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n as: () => {\n return { helpers }\n },\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n helpers\n };\n };\n\n // Identifier setup: .identified.by().as()\n setEntityIdentifiers = (name) => {\n eventInstance.setIdentifier(name, null);\n return {\n as: (value) => {\n eventInstance.setIdentifier(name, value);\n return {\n helpers,\n and: {\n by: setEntityIdentifiers\n },\n has: { been: setAction },\n }\n },\n helpers\n };\n };\n\n // Additional adjectives: .and('...')._()\n andEntity = (entity) => {\n eventInstance.addAdjective(eventInstance.entity);\n eventInstance.setEntity(entity);\n return {\n and: andEntity,\n _ : setEntityAfterAnd,\n helpers\n }\n };\n\n // Action: .has.been('...')\n setAction = (action) => {\n eventInstance.setAction(action);\n return {\n by: setActor,\n referring: { to: addReference },\n with: addContext,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Actor: .by('user')\n setActor = (name) => {\n eventInstance.setActor(name);\n return { \n identified: {\n by: setActorIdentifier\n },\n with: addContext,\n helpers\n }\n };\n\n // Actor identifier: .identified.by().as()\n setActorIdentifier = (name) => {\n return {\n as: (value) => {\n eventInstance.setActorIdentifier(name, value);\n return {\n helpers,\n and: setActorIdentifier,\n with: addContext,\n referring: { to: addReference },\n }\n },\n helpers\n }\n };\n\n // Contextual field: .with('key').set.to('value')\n addContext = (context) => {\n return {\n helpers,\n set: {\n to: (value) => {\n eventInstance.setContext(context, value);\n return {\n helpers,\n and: addContext,\n referring: { to: addReference },\n }\n }\n }\n }\n };\n\n // Reference: .referring.to('...')\n addReference = (entity) => {\n eventInstance.setRefence(entity);\n return {\n identified: {\n by: getAddReference(entity)\n },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n helpers\n }\n };\n\n // Reference identifier setup: .identified.by().as()\n getAddReference = (entity) => {\n return (name) => {\n return {\n as: (value) => {\n eventInstance.setRefenceIdentifier(entity, name, value);\n return {\n helpers,\n and: addReferenceIdentifier,\n conform: {to: conformingTo},\n then: {track: {with: track}},\n }\n },\n helpers,\n };\n };\n };\n\n // Schema declaration: .conform.to('...')\n conformingTo = (name) => {\n eventInstance.setSchema(name);\n return { \n then: {track: {with: track}},\n helpers\n }\n };\n\n // Final dispatch: .then.track.with(tracker)\n track = (tracker) => {\n if(!(tracker instanceof CollecionesTracker)){\n throw new Error('can only be a CollecionesTracker')\n }\n tracker.track(eventInstance);\n return {\n and: track,\n helpers,\n }\n };\n\n return {\n and: andEntity,\n _: setEntityAfterAnd,\n identified: {\n by: setEntityIdentifiers\n },\n has: { been: setAction},\n node: '_base',\n helpers\n }\n\n })(entity);\n}\n\nlet collecionesDsl = {\n the: init\n};\n\n\nexport default collecionesDsl;"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compilacion/colleciones-clientos",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "main": "dist/index.cjs",
5
5
  "module": "dist/index.mjs",
6
6
  "exports": {
@@ -11,7 +11,7 @@
11
11
  "scripts": {
12
12
  "test": "vitest",
13
13
  "test:watch": "vitest --watch",
14
- "manual-runner": "node ./test/manual-runner.js",
14
+ "manual-runner": "node ./test/manual.js",
15
15
  "build:package": "rollup -c",
16
16
  "watch:build": "rollup -c --watch",
17
17
  "start:server": "node ./test/webclient/devServer.js",