@compilacion/colleciones-clientos 2.0.2 → 2.0.3
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.
- package/README.md +51 -3
- package/dist/collecionesClientos.iife.js +115 -3
- package/dist/collecionesClientos.iife.js.map +1 -1
- package/dist/index.cjs +115 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +115 -3
- package/dist/index.mjs.map +1 -1
- package/docs/dsl.md +10 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,16 +38,64 @@ const tracker = new CollecionesTracker([emitter], 'myTracker', 'myApp');
|
|
|
38
38
|
|
|
39
39
|
You can construct events declaratively using a natural language-like DSL:
|
|
40
40
|
|
|
41
|
+
Most simplistic use case
|
|
41
42
|
```js
|
|
42
43
|
import collecionesDsl from './src/collecionesDsl.js';
|
|
43
44
|
|
|
44
45
|
collecionesDsl
|
|
45
|
-
.the('
|
|
46
|
-
.
|
|
47
|
-
.
|
|
46
|
+
.the('button') // Entity
|
|
47
|
+
.has.been('clicked') // Verb
|
|
48
|
+
.then.track.with(emitter); // Send
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Adding adjectives (states etc) onto the entity
|
|
52
|
+
```js
|
|
53
|
+
import collecionesDsl from './src/collecionesDsl.js';
|
|
54
|
+
|
|
55
|
+
collecionesDsl
|
|
56
|
+
.the('red') // So now this is the adjective
|
|
57
|
+
._('button') // and this becomes the entity
|
|
58
|
+
.has.been('clicked') // still the verb
|
|
48
59
|
.then.track.with(emitter);
|
|
49
60
|
```
|
|
50
61
|
|
|
62
|
+
Full syntax:
|
|
63
|
+
```js
|
|
64
|
+
import collecionesDsl from './src/collecionesDsl.js';
|
|
65
|
+
|
|
66
|
+
collecionesDsl
|
|
67
|
+
the('dark') // adjective 1
|
|
68
|
+
.and('green') // adjective 2
|
|
69
|
+
._('button') // the entity
|
|
70
|
+
.identified.by('id') // the identifier-name for the entity
|
|
71
|
+
.as('button12') // the identifier-value for the entity
|
|
72
|
+
.and.by('externalReference') // yet another reference
|
|
73
|
+
.as ('ext-123') // and it's idnetifier value
|
|
74
|
+
.has.been('clicked') // the verb
|
|
75
|
+
.by('user') // the actor (a user or a system or ..)
|
|
76
|
+
.identified.by('usrId') // an id for a user
|
|
77
|
+
.as('abc-123') // the id value
|
|
78
|
+
.and('email') // another id for the user
|
|
79
|
+
.as('jef@email.com') // the id value
|
|
80
|
+
.with('sourcePage').set.to('homepage') // context
|
|
81
|
+
.and('ctaLabel').set.to('register-now') // context
|
|
82
|
+
.including.a('property').collection()
|
|
83
|
+
.with
|
|
84
|
+
.item.identified.by('propertyId').as('1')
|
|
85
|
+
.and.by('externalId').as('12')
|
|
86
|
+
.and.item.identified.by('propertyId').as('2')
|
|
87
|
+
.and.by('externalId').as('13')
|
|
88
|
+
.and.a('suggest').collection()
|
|
89
|
+
.with
|
|
90
|
+
.item.identified.by('suggestionId').as('1')
|
|
91
|
+
.and.item.identified.by('suggestionId').as('2')
|
|
92
|
+
.referring.to('property') // to what entities this event refers
|
|
93
|
+
.identified.by('id') // optional
|
|
94
|
+
.as('123') // required when preceding with 'identified'
|
|
95
|
+
.conform.to('UserInteractionEvent') // if applicable which schema it should follow
|
|
96
|
+
.then.track.with(emitter);
|
|
97
|
+
```
|
|
98
|
+
|
|
51
99
|
📘 See [docs/dsl.md](./docs/dsl.md) for full DSL documentation.
|
|
52
100
|
|
|
53
101
|
### 4. Manually Create Events (Optional)
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
this.actorIdentifiers = {};
|
|
62
62
|
this.context = {};
|
|
63
63
|
this.references = {};
|
|
64
|
+
this.collections = {};
|
|
64
65
|
// set default values
|
|
65
66
|
this.meta = {
|
|
66
67
|
eventFormat: 'CollecionesEvent',
|
|
@@ -214,6 +215,10 @@
|
|
|
214
215
|
* @param {string} entity - The referenced entity name.
|
|
215
216
|
*/
|
|
216
217
|
setRefence = function(entity) {
|
|
218
|
+
return this.setReference(entity);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
setReference = function(entity) {
|
|
217
222
|
if (typeof entity !== 'string') {
|
|
218
223
|
throw new Error('Referenced entity must be a string');
|
|
219
224
|
}
|
|
@@ -229,6 +234,10 @@
|
|
|
229
234
|
* @param {*} identifier - The identifier value.
|
|
230
235
|
*/
|
|
231
236
|
setRefenceIdentifier = function(entity, name, identifier) {
|
|
237
|
+
return this.setReferenceIdentifier(entity, name, identifier);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
setReferenceIdentifier = function(entity, name, identifier) {
|
|
232
241
|
if (typeof entity !== 'string') {
|
|
233
242
|
throw new Error('Referenced entity name must be a string');
|
|
234
243
|
}
|
|
@@ -239,6 +248,34 @@
|
|
|
239
248
|
this.references[entity].identifiers[name] = identifier;
|
|
240
249
|
}
|
|
241
250
|
|
|
251
|
+
setCollection = function(entity) {
|
|
252
|
+
if(this.collections[entity] == undefined) {
|
|
253
|
+
this.collections[entity] = [];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
setCollectionItem = function(entity) {
|
|
258
|
+
this.setCollection(entity);
|
|
259
|
+
this.collections[entity].push({});
|
|
260
|
+
let itemKey = this.collections[entity].length - 1;
|
|
261
|
+
return itemKey;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
setCollectionItemReference = function(entity, itemKey, name, identifier) {
|
|
265
|
+
this.setCollection(entity);
|
|
266
|
+
if(typeof this.collections[entity][itemKey] !== 'object') {
|
|
267
|
+
throw new Error('bad bad man, the collection key does not exists');
|
|
268
|
+
}
|
|
269
|
+
this.collections[entity][itemKey][name] = identifier;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
setCollectionIdentifier = function(entity, name, identifier) {
|
|
273
|
+
if(this.collections[entity] == undefined) {
|
|
274
|
+
this.collections[entity] = {};
|
|
275
|
+
}
|
|
276
|
+
this.collections[entity][name] = identifier;
|
|
277
|
+
}
|
|
278
|
+
|
|
242
279
|
/**
|
|
243
280
|
* Serializes the event to a plain object suitable for JSON.stringify().
|
|
244
281
|
* @returns {object}
|
|
@@ -255,7 +292,8 @@
|
|
|
255
292
|
actorIds: this.actorIds,
|
|
256
293
|
context: this.context,
|
|
257
294
|
references: this.references,
|
|
258
|
-
meta: this.meta
|
|
295
|
+
meta: this.meta,
|
|
296
|
+
collections: this.collections
|
|
259
297
|
};
|
|
260
298
|
}
|
|
261
299
|
|
|
@@ -279,6 +317,7 @@
|
|
|
279
317
|
instance.context = obj.context || {};
|
|
280
318
|
instance.references = obj.references || {};
|
|
281
319
|
instance.meta = obj.meta || {};
|
|
320
|
+
instance.collections = obj.collections || {};
|
|
282
321
|
return instance;
|
|
283
322
|
}
|
|
284
323
|
|
|
@@ -544,9 +583,9 @@
|
|
|
544
583
|
let addContext = () => {}; // .with(...).set.to(...)
|
|
545
584
|
let addReference = () => {}; // .referring.to(...)
|
|
546
585
|
let getAddReference = () => {}; // .identified.by().as() inside .referring
|
|
547
|
-
let addReferenceIdentifier = () => {}; // .and(...) after reference
|
|
548
586
|
let conformingTo = () => {}; // .conform.to('SchemaName')
|
|
549
587
|
let track = () => {}; // .then.track.with(emitter)
|
|
588
|
+
let addCollection = () => {};
|
|
550
589
|
|
|
551
590
|
// Adjective chaining: .and(...)._('entity')
|
|
552
591
|
setEntityAfterAnd = (entity) => {
|
|
@@ -602,6 +641,9 @@
|
|
|
602
641
|
with: addContext,
|
|
603
642
|
conform: {to: conformingTo},
|
|
604
643
|
then: {track: {with: track}},
|
|
644
|
+
including: {
|
|
645
|
+
a: addCollection,
|
|
646
|
+
},
|
|
605
647
|
helpers
|
|
606
648
|
}
|
|
607
649
|
};
|
|
@@ -614,6 +656,9 @@
|
|
|
614
656
|
by: setActorIdentifier
|
|
615
657
|
},
|
|
616
658
|
with: addContext,
|
|
659
|
+
including: {
|
|
660
|
+
a: addCollection,
|
|
661
|
+
},
|
|
617
662
|
helpers
|
|
618
663
|
}
|
|
619
664
|
};
|
|
@@ -628,6 +673,9 @@
|
|
|
628
673
|
and: setActorIdentifier,
|
|
629
674
|
with: addContext,
|
|
630
675
|
referring: { to: addReference },
|
|
676
|
+
including: {
|
|
677
|
+
a: addCollection,
|
|
678
|
+
},
|
|
631
679
|
}
|
|
632
680
|
},
|
|
633
681
|
helpers
|
|
@@ -645,6 +693,9 @@
|
|
|
645
693
|
helpers,
|
|
646
694
|
and: addContext,
|
|
647
695
|
referring: { to: addReference },
|
|
696
|
+
including: {
|
|
697
|
+
a: addCollection,
|
|
698
|
+
},
|
|
648
699
|
}
|
|
649
700
|
}
|
|
650
701
|
}
|
|
@@ -660,6 +711,9 @@
|
|
|
660
711
|
},
|
|
661
712
|
conform: {to: conformingTo},
|
|
662
713
|
then: {track: {with: track}},
|
|
714
|
+
including: {
|
|
715
|
+
a: addCollection,
|
|
716
|
+
},
|
|
663
717
|
helpers
|
|
664
718
|
}
|
|
665
719
|
};
|
|
@@ -672,9 +726,12 @@
|
|
|
672
726
|
eventInstance.setRefenceIdentifier(entity, name, value);
|
|
673
727
|
return {
|
|
674
728
|
helpers,
|
|
675
|
-
and:
|
|
729
|
+
and: {by: getAddReference(entity) },
|
|
676
730
|
conform: {to: conformingTo},
|
|
677
731
|
then: {track: {with: track}},
|
|
732
|
+
including: {
|
|
733
|
+
a: addCollection,
|
|
734
|
+
},
|
|
678
735
|
}
|
|
679
736
|
},
|
|
680
737
|
helpers,
|
|
@@ -691,6 +748,61 @@
|
|
|
691
748
|
}
|
|
692
749
|
};
|
|
693
750
|
|
|
751
|
+
addCollection = (entity) => {
|
|
752
|
+
const collection = () => {
|
|
753
|
+
eventInstance.setCollection(entity);
|
|
754
|
+
|
|
755
|
+
const addItem = (referenceName) => {
|
|
756
|
+
const itemKey = eventInstance.setCollectionItem(entity);
|
|
757
|
+
const addIdentifier = (referenceNameNewIdentifier) => {
|
|
758
|
+
referenceName = referenceNameNewIdentifier;
|
|
759
|
+
return {
|
|
760
|
+
as: addItemReferenceValue,
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
const addItemReferenceValue = (value) => {
|
|
764
|
+
eventInstance.setCollectionItemReference(entity, itemKey, referenceName, value);
|
|
765
|
+
return {
|
|
766
|
+
and: {
|
|
767
|
+
helpers,
|
|
768
|
+
by: addIdentifier,
|
|
769
|
+
item: {
|
|
770
|
+
identified: {
|
|
771
|
+
by: addItem
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
a: addCollection
|
|
775
|
+
},
|
|
776
|
+
conform: {
|
|
777
|
+
to: conformingTo,
|
|
778
|
+
},
|
|
779
|
+
then: {track: {with: track}},
|
|
780
|
+
helpers
|
|
781
|
+
}
|
|
782
|
+
};
|
|
783
|
+
return {
|
|
784
|
+
as: addItemReferenceValue
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
};
|
|
788
|
+
|
|
789
|
+
return {
|
|
790
|
+
helpers,
|
|
791
|
+
with: {
|
|
792
|
+
item: {
|
|
793
|
+
identified: {
|
|
794
|
+
by: addItem
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
and: { a: addCollection }
|
|
799
|
+
}
|
|
800
|
+
};
|
|
801
|
+
return {
|
|
802
|
+
collection
|
|
803
|
+
}
|
|
804
|
+
};
|
|
805
|
+
|
|
694
806
|
// Final dispatch: .then.track.with(tracker)
|
|
695
807
|
track = (tracker) => {
|
|
696
808
|
if(!(tracker instanceof CollecionesTracker)){
|
|
@@ -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 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":"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"}
|
|
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 this.collections = {};\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 return this.setReference(entity);\n }\n\n setReference = 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 return this.setReferenceIdentifier(entity, name, identifier);\n }\n\n setReferenceIdentifier = 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 setCollection = function(entity) {\n if(this.collections[entity] == undefined) {\n this.collections[entity] = [];\n }\n }\n\n setCollectionItem = function(entity) {\n this.setCollection(entity);\n this.collections[entity].push({});\n let itemKey = this.collections[entity].length - 1;\n return itemKey;\n }\n\n setCollectionItemReference = function(entity, itemKey, name, identifier) {\n this.setCollection(entity);\n if(typeof this.collections[entity][itemKey] !== 'object') {\n throw new Error('bad bad man, the collection key does not exists');\n }\n this.collections[entity][itemKey][name] = identifier;\n }\n \n setCollectionIdentifier = function(entity, name, identifier) {\n if(this.collections[entity] == undefined) {\n this.collections[entity] = {};\n }\n this.collections[entity][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 collections: this.collections\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 instance.collections = obj.collections || {};\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 conformingTo = () => {}; // .conform.to('SchemaName')\n let track = () => {}; // .then.track.with(emitter)\n let addCollection = () => {};\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 including: {\n a: addCollection,\n },\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 including: {\n a: addCollection,\n },\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 including: {\n a: addCollection,\n },\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 including: {\n a: addCollection,\n },\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 including: {\n a: addCollection,\n },\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: {by: getAddReference(entity) },\n conform: {to: conformingTo},\n then: {track: {with: track}},\n including: {\n a: addCollection,\n },\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 addCollection = (entity) => {\n const collection = () => {\n eventInstance.setCollection(entity);\n \n const addItem = (referenceName) => {\n const itemKey = eventInstance.setCollectionItem(entity);\n const addIdentifier = (referenceNameNewIdentifier) => {\n referenceName = referenceNameNewIdentifier;\n return {\n as: addItemReferenceValue,\n }\n }\n const addItemReferenceValue = (value) => {\n eventInstance.setCollectionItemReference(entity, itemKey, referenceName, value);\n return {\n and: {\n helpers, \n by: addIdentifier,\n item: { \n identified: { \n by: addItem\n }\n },\n a: addCollection\n },\n conform: {\n to: conformingTo,\n }, \n then: {track: {with: track}},\n helpers\n }\n }\n return {\n as: addItemReferenceValue\n }\n\n };\n\n return {\n helpers,\n with: {\n item: {\n identified: {\n by: addItem\n }\n }\n },\n and: { a: addCollection }\n }\n };\n return {\n collection\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":"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"}
|