@compilacion/colleciones-clientos 1.0.0 → 1.0.5
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 +112 -1
- package/dist/collecionesClientos.js +42 -0
- package/dist/collecionesClientos.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,114 @@
|
|
|
1
1
|
npm run dev:testclient
|
|
2
2
|
|
|
3
|
-
zever gezever
|
|
3
|
+
zever gezever
|
|
4
|
+
# @compilacion/colleciones-clientos
|
|
5
|
+
|
|
6
|
+
A minimal, semantic-aware tracking client for compiling and emitting structured event data, designed for clean integration with web applications.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ✨ Why this package?
|
|
11
|
+
|
|
12
|
+
This package provides a modular, semantically structured way to track events in a browser or Node.js context. It introduces an expressive abstraction over raw event logging, allowing you to:
|
|
13
|
+
|
|
14
|
+
- Build meaningful tracking data using domain and semantic context
|
|
15
|
+
- Manage event batching and network traffic efficiently
|
|
16
|
+
- Decouple semantic structure from transport
|
|
17
|
+
- Keep client-side tracking logic testable and declarative
|
|
18
|
+
|
|
19
|
+
### About "semantic" events
|
|
20
|
+
|
|
21
|
+
We use a consistent structure: `entity`, `action`, and `adjective`. This allows us to describe events like:
|
|
22
|
+
|
|
23
|
+
- `"session" "start" "engaged"`
|
|
24
|
+
- `"property" "display" "preview"`
|
|
25
|
+
|
|
26
|
+
This semantic approach gives us flexibility and consistency across tracking implementations.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🚀 Usage
|
|
31
|
+
|
|
32
|
+
You can run the [manual runner](./test/manual-runner.js) to test locally:
|
|
33
|
+
```bash
|
|
34
|
+
npm run manual-runner
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Example
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
import CollecionesEmitter from '../src/CollecionesEmitter.js';
|
|
41
|
+
import CollecionesTracker from '../src/CollecionesTracker.js';
|
|
42
|
+
import CollecionesSemanticCollectionEvent from '../src/CollecionesSemanticCollectionEvent.js';
|
|
43
|
+
|
|
44
|
+
// Setup
|
|
45
|
+
let emitter = new CollecionesEmitter('http://localhost:8080/collect', 3, 10);
|
|
46
|
+
let tracker = new CollecionesTracker([emitter], 'myTracker', 'theWebsiteApp');
|
|
47
|
+
tracker.addIdentifier('visitorId', '12');
|
|
48
|
+
|
|
49
|
+
// Create semantic collection event
|
|
50
|
+
let eC = new CollecionesSemanticCollectionEvent(
|
|
51
|
+
'property',
|
|
52
|
+
'display',
|
|
53
|
+
'preview'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
eC.addEntityIdentifier('serpPage', 1234);
|
|
57
|
+
eC.addAttribute('pageUrl', 'https://');
|
|
58
|
+
eC.addEntityItemIdentifier('propertyId', 1);
|
|
59
|
+
eC.addEntityItemIdentifier('propertyId', 2);
|
|
60
|
+
eC.addEntityItemIdentifier('propertyId', 3);
|
|
61
|
+
eC.addEntityItemIdentifier('propertyId', [4, 5, 6]);
|
|
62
|
+
|
|
63
|
+
console.log(eC.getPayload());
|
|
64
|
+
tracker.track(eC);
|
|
65
|
+
|
|
66
|
+
// Send events
|
|
67
|
+
emitter.flush();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 🛠 Branching model
|
|
73
|
+
|
|
74
|
+
This project uses a dual-branch setup:
|
|
75
|
+
|
|
76
|
+
- `uat`: the **staging branch**. All feature work should merge into this first.
|
|
77
|
+
- `main`: the **release branch**, protected and only updated via pull requests from `uat`.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## ⚙️ CI/CD Setup
|
|
82
|
+
|
|
83
|
+
We use GitHub Actions:
|
|
84
|
+
|
|
85
|
+
- PRs to `uat` and `main` trigger the `build-and-test` job.
|
|
86
|
+
- Version tags (e.g. `v1.2.0`) trigger the `release` job.
|
|
87
|
+
|
|
88
|
+
Only PRs to `main` from `uat` should be used to promote code to production.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 📦 Release process
|
|
93
|
+
|
|
94
|
+
To publish a new version:
|
|
95
|
+
|
|
96
|
+
1. Merge to `main` via PR from `uat`
|
|
97
|
+
2. Go to **GitHub → Releases → Draft a new release**
|
|
98
|
+
3. Create a tag (e.g. `v1.0.1`)
|
|
99
|
+
4. Target the `main` branch
|
|
100
|
+
5. Publish the release
|
|
101
|
+
|
|
102
|
+
GitHub Actions will:
|
|
103
|
+
- Build the package
|
|
104
|
+
- Publish to npm
|
|
105
|
+
|
|
106
|
+
The package is published as:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
@compilacion/colleciones-clientos
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
If you encounter issues with scope or publishing, ensure your npm org is set up and the scope `@compilacion` is correctly authorized.
|
|
113
|
+
|
|
114
|
+
---
|
|
@@ -343,11 +343,53 @@
|
|
|
343
343
|
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
+
class CollecionesSemanticCollectionEvent extends CollecionesSemanticEvent {
|
|
347
|
+
|
|
348
|
+
constructor(itemEntity, action, adjective, identifiers, collectionEntity) {
|
|
349
|
+
if(typeof collectionEntity == 'undefined') {
|
|
350
|
+
collectionEntity = `${itemEntity}Collection`;
|
|
351
|
+
}
|
|
352
|
+
super(collectionEntity, action, undefined, identifiers);
|
|
353
|
+
this.data.meta = {
|
|
354
|
+
eventFormat: 'CollecionesSemanticCollectionEvent',
|
|
355
|
+
eventFormatVersion: '1'
|
|
356
|
+
};
|
|
357
|
+
this.adjective = formatAdjectives(adjective);
|
|
358
|
+
let adjectiveString = stringifyAdjectives(this.adjective);
|
|
359
|
+
itemEntity = underscoreToCamelCase(itemEntity);
|
|
360
|
+
this.data.itemEntity = itemEntity;
|
|
361
|
+
this.data.itemEventName = `${itemEntity}${(adjectiveString !== undefined) ? adjectiveString : ''}__${this.action}`;
|
|
362
|
+
this.data.entityItemIdentifiers = {};
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
addEntityItemIdentifier(key, value) {
|
|
366
|
+
if (typeof key !== 'string') {
|
|
367
|
+
throw new Error('Entity identifier key must be a string');
|
|
368
|
+
}
|
|
369
|
+
if (typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value)) {
|
|
370
|
+
throw new Error('Entity identifier value must be a string or number');
|
|
371
|
+
}
|
|
372
|
+
if(typeof this.data.entityItemIdentifiers[key] == 'undefined') {
|
|
373
|
+
this.data.entityItemIdentifiers[key] = [];
|
|
374
|
+
}
|
|
375
|
+
if(Array.isArray(value)) {
|
|
376
|
+
value.forEach((v)=> {
|
|
377
|
+
this.data.entityItemIdentifiers[key].push(v);
|
|
378
|
+
});
|
|
379
|
+
} else {
|
|
380
|
+
this.data.entityItemIdentifiers[key].push(value);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
346
387
|
(function(global) {
|
|
347
388
|
global.CollecionesEmitter = CollecionesEmitter;
|
|
348
389
|
global.CollecionesTracker = CollecionesTracker;
|
|
349
390
|
global.CollecionesEvent = CollecionesEvent;
|
|
350
391
|
global.CollecionesSemanticEvent = CollecionesSemanticEvent;
|
|
392
|
+
global.CollecionesSemanticCollectionEvent = CollecionesSemanticCollectionEvent;
|
|
351
393
|
})(typeof window !== 'undefined' ? window : globalThis);
|
|
352
394
|
|
|
353
395
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collecionesClientos.js","sources":["../src/utils/utils.js","../src/CollecionesBaseEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesEvent.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/CollecionesSemanticEvent.js","../src/collecionesClientos.js"],"sourcesContent":["// helper 'private' functions\nconst underscoreToCamelCase = function (str) {\n str = str.replace(/[^\\x00-\\x7F_]/g, '');\n return str\n .split('_')\n .map((word, index) => {\n if (index === 0) {\n return word;\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n}\n\nconst formatAdjectives = function (adjectiveParameter) {\n let errorMsg = new Error('Adjective must be a string, an array of strings, or undefined');\n if (typeof adjectiveParameter === 'undefined') {\n return undefined;\n }\n if (typeof adjectiveParameter === 'string') {\n return [underscoreToCamelCase(adjectiveParameter)];\n }\n if (Array.isArray(adjectiveParameter) && adjectiveParameter.every(item => typeof item === 'string')) {\n let returnValue = [];\n adjectiveParameter.forEach((adjectiveParameter) => {\n if (!typeof item === 'string') {\n throw errorMsg;\n }\n returnValue.push(underscoreToCamelCase(adjectiveParameter));\n });\n return returnValue;\n }\n throw errorMsg;\n}\n\nconst stringifyAdjectives = function (adjective) {\n if (!Array.isArray(adjective) || adjective.length === 0) {\n return undefined;\n }\n const uniqueSorted = [...new Set(adjective)].sort();\n return '.' + uniqueSorted.join('.');\n}\n\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && window.btoa) {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && window.atob) {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\nexport {\n underscoreToCamelCase,\n formatAdjectives,\n stringifyAdjectives,\n toBase64,\n fromBase64\n};","import { toBase64 } from './utils/utils.js';\n\nclass CollecionesBaseEvent {\n\n constructor() {\n this.eventName = '';\n this.data = {};\n this.data.meta = {\n eventFormat: 'CollecionesBaseEvent',\n eventFormatVersion: '1'\n };\n const now = new Date();\n this.data.timestamps = {};\n this.data.timestamps.clientDatetimeUtc = now.toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.data.timestamps.clientDatetimeLocal = now.toLocaleString(navigator.language);\n this.data.timestamps.timeZone = navigator.language;\n } else {\n this.data.timestamps.clientDatetimeLocal = now.toISOString();\n this.data.timestamps.timeZone = 'UTC';\n }\n }\n\n setEventName(name) {\n this.eventName = name;\n }\n\n getEventName() {\n return this.eventName;\n }\n\n getEventFormat() {\n let v = this.data?.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n getEventFormatVersion() {\n let v = this.data?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesBaseEvent';\n }\n\n getPostObject() {\n const now = new Date();\n if (typeof navigator !== 'undefined' && navigator.language) {\n this.data.timestamps.sentDatetime = now.toLocaleString(navigator.language);\n } else {\n this.data.timestamps.sentDatetime = now.toISOString();\n }\n return {\n eventname: this.getEventName(),\n eventFormat: this.getEventFormat(),\n eventFormatVersion: this.getEventFormatVersion(),\n payload: toBase64(this.getPayload())\n };\n }\n\n setData(data) {\n this.data = data;\n }\n\n convertParamIdentifiers(param) {\n if (typeof param === 'object' && param !== null && !Array.isArray(param)) {\n for (const [key, value] of Object.entries(param)) {\n this.addIdentifier(key, value);\n }\n }\n }\n\n addIdentifier(name, value) {\n if (typeof this.data.identifiers !== 'object' || this.data.identifiers === null) {\n this.data.identifiers = {};\n }\n this.data.identifiers[name] = value;\n }\n\n getPayload() {\n return JSON.stringify(this.data);\n }\n\n}\n\nexport default CollecionesBaseEvent;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\nimport {toBase64} from './utils/utils.js';\n\nclass CollecionesEmitter {\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 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 startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n track(event) {\n if (!(event instanceof CollecionesBaseEvent)) {\n throw new Error('Event must be an instance of CollecionesBaseEvent');\n }\n this.trackAsync(event);\n }\n\n async trackAsync(event) {\n if (!(event instanceof CollecionesBaseEvent)) {\n throw new Error('Event must be an instance of CollecionesBaseEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n async flush() {\n if (this.buffer.length === 0) return;\n const eventsToSend = [...this.buffer];\n this.buffer = [];\n let postPayload = [];\n eventsToSend.forEach((e) => {\n postPayload.push( e.getPostObject() );\n });\n this.stopTimer();\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(postPayload)\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\nexport default CollecionesEmitter;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesTracker {\n \n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n this.identifiers = {};\n }\n\n addIdentifier(name, value) {\n this.identifiers[name] = value;\n }\n\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesBaseEvent)) {\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 this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n \n }\n}\n\nexport default CollecionesTracker;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesEvent extends CollecionesBaseEvent {\n\n constructor(name, data, identifiers) {\n super();\n this.setEventName(name);\n Object.assign(this.data, data);\n this.convertParamIdentifiers(identifiers);\n }\n\n}\n\nexport default CollecionesEvent;","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid';\nimport {underscoreToCamelCase, formatAdjectives, stringifyAdjectives } from './utils/utils.js';\nimport CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesSemanticEvent extends CollecionesBaseEvent {\n\n constructor(entity, action, adjective, identifiers) {\n super();\n this.entity = underscoreToCamelCase(entity);\n this.action = underscoreToCamelCase(action);\n this.adjective = formatAdjectives(adjective);\n let adjectiveString = stringifyAdjectives(this.adjective);\n this.eventName = `${this.entity}${(adjectiveString !== undefined) ? adjectiveString : ''}__${this.action}`;\n this.convertParamIdentifiers(identifiers);\n this.data.entityIdentifiers = {};\n this.data.attributes = {};\n this.data.clientEventId = uuidv4();\n this.data.meta = {\n eventFormat: 'CollecionesSemanticEvent',\n eventFormatVersion: '1'\n };\n }\n\n setData() {\n throw new Error('setData deprecated in semantic events');\n }\n\n addEntityIdentifier(key, value) {\n if (typeof key !== 'string') {\n throw new Error('Entity identifier key must be a string');\n }\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new Error('Entity identifier value must be a string or number');\n }\n this.data.entityIdentifiers[key] = value;\n }\n\n addAttribute(key, value) {\n if (typeof key !== 'string') {\n throw new Error('Attribute key must be a string');\n }\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new Error('Attribute value must be a string or number');\n }\n this.data.attributes[key] = value;\n }\n\n}\n\nexport default CollecionesSemanticEvent;","import CollecionesEmitter from './CollecionesEmitter.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesSemanticEvent from './CollecionesSemanticEvent.js';\n\n(function(global) {\n global.CollecionesEmitter = CollecionesEmitter;\n global.CollecionesTracker = CollecionesTracker;\n global.CollecionesEvent = CollecionesEvent;\n global.CollecionesSemanticEvent = CollecionesSemanticEvent;\n})(typeof window !== 'undefined' ? window : globalThis);"],"names":["uuidv4"],"mappings":"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","x_google_ignoreList":[5,6,7,8]}
|
|
1
|
+
{"version":3,"file":"collecionesClientos.js","sources":["../src/utils/utils.js","../src/CollecionesBaseEvent.js","../src/CollecionesEmitter.js","../src/CollecionesTracker.js","../src/CollecionesEvent.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/CollecionesSemanticEvent.js","../src/CollecionesSemanticCollectionEvent.js","../src/collecionesClientos.js"],"sourcesContent":["// helper 'private' functions\nconst underscoreToCamelCase = function (str) {\n str = str.replace(/[^\\x00-\\x7F_]/g, '');\n return str\n .split('_')\n .map((word, index) => {\n if (index === 0) {\n return word;\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n}\n\nconst formatAdjectives = function (adjectiveParameter) {\n let errorMsg = new Error('Adjective must be a string, an array of strings, or undefined');\n if (typeof adjectiveParameter === 'undefined') {\n return undefined;\n }\n if (typeof adjectiveParameter === 'string') {\n return [underscoreToCamelCase(adjectiveParameter)];\n }\n if (Array.isArray(adjectiveParameter) && adjectiveParameter.every(item => typeof item === 'string')) {\n let returnValue = [];\n adjectiveParameter.forEach((adjectiveParameter) => {\n if (!typeof item === 'string') {\n throw errorMsg;\n }\n returnValue.push(underscoreToCamelCase(adjectiveParameter));\n });\n return returnValue;\n }\n throw errorMsg;\n}\n\nconst stringifyAdjectives = function (adjective) {\n if (!Array.isArray(adjective) || adjective.length === 0) {\n return undefined;\n }\n const uniqueSorted = [...new Set(adjective)].sort();\n return '.' + uniqueSorted.join('.');\n}\n\nconst toBase64 = function (str) {\n if (typeof window !== 'undefined' && window.btoa) {\n return window.btoa(unescape(encodeURIComponent(str)));\n } else {\n return Buffer.from(str, 'utf-8').toString('base64');\n }\n}\n\nconst fromBase64 = function (b64) {\n if (typeof window !== 'undefined' && window.atob) {\n return decodeURIComponent(escape(window.atob(b64)));\n } else {\n return Buffer.from(b64, 'base64').toString('utf-8');\n }\n}\n\nexport {\n underscoreToCamelCase,\n formatAdjectives,\n stringifyAdjectives,\n toBase64,\n fromBase64\n};","import { toBase64 } from './utils/utils.js';\n\nclass CollecionesBaseEvent {\n\n constructor() {\n this.eventName = '';\n this.data = {};\n this.data.meta = {\n eventFormat: 'CollecionesBaseEvent',\n eventFormatVersion: '1'\n };\n const now = new Date();\n this.data.timestamps = {};\n this.data.timestamps.clientDatetimeUtc = now.toISOString();\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && navigator.language) {\n this.data.timestamps.clientDatetimeLocal = now.toLocaleString(navigator.language);\n this.data.timestamps.timeZone = navigator.language;\n } else {\n this.data.timestamps.clientDatetimeLocal = now.toISOString();\n this.data.timestamps.timeZone = 'UTC';\n }\n }\n\n setEventName(name) {\n this.eventName = name;\n }\n\n getEventName() {\n return this.eventName;\n }\n\n getEventFormat() {\n let v = this.data?.meta?.eventFormat;\n return (typeof v !== 'undefined') ? v : '1';\n }\n\n getEventFormatVersion() {\n let v = this.data?.meta?.eventFormatVersion;\n return (typeof v !== 'undefined') ? v : 'CollecionesBaseEvent';\n }\n\n getPostObject() {\n const now = new Date();\n if (typeof navigator !== 'undefined' && navigator.language) {\n this.data.timestamps.sentDatetime = now.toLocaleString(navigator.language);\n } else {\n this.data.timestamps.sentDatetime = now.toISOString();\n }\n return {\n eventname: this.getEventName(),\n eventFormat: this.getEventFormat(),\n eventFormatVersion: this.getEventFormatVersion(),\n payload: toBase64(this.getPayload())\n };\n }\n\n setData(data) {\n this.data = data;\n }\n\n convertParamIdentifiers(param) {\n if (typeof param === 'object' && param !== null && !Array.isArray(param)) {\n for (const [key, value] of Object.entries(param)) {\n this.addIdentifier(key, value);\n }\n }\n }\n\n addIdentifier(name, value) {\n if (typeof this.data.identifiers !== 'object' || this.data.identifiers === null) {\n this.data.identifiers = {};\n }\n this.data.identifiers[name] = value;\n }\n\n getPayload() {\n return JSON.stringify(this.data);\n }\n\n}\n\nexport default CollecionesBaseEvent;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\nimport {toBase64} from './utils/utils.js';\n\nclass CollecionesEmitter {\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 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 startTimerIfStopped() {\n if (!this.timer) {\n this.startTimer();\n }\n }\n\n stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.timer = null;\n }\n\n track(event) {\n if (!(event instanceof CollecionesBaseEvent)) {\n throw new Error('Event must be an instance of CollecionesBaseEvent');\n }\n this.trackAsync(event);\n }\n\n async trackAsync(event) {\n if (!(event instanceof CollecionesBaseEvent)) {\n throw new Error('Event must be an instance of CollecionesBaseEvent');\n }\n this.startTimerIfStopped();\n this.buffer.push(event);\n return (this.buffer.length >= this.flushSize) ? this.flush() : Promise.resolve();\n }\n\n async flush() {\n if (this.buffer.length === 0) return;\n const eventsToSend = [...this.buffer];\n this.buffer = [];\n let postPayload = [];\n eventsToSend.forEach((e) => {\n postPayload.push( e.getPostObject() );\n });\n this.stopTimer();\n try {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(postPayload)\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\nexport default CollecionesEmitter;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesTracker {\n \n constructor(emitters, trackerName, appName) {\n this.emitters = emitters;\n this.trackerName = trackerName;\n this.appName = appName;\n this.identifiers = {};\n }\n\n addIdentifier(name, value) {\n this.identifiers[name] = value;\n }\n\n track(collecionesEvent) {\n if (!(collecionesEvent instanceof CollecionesBaseEvent)) {\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 this.emitters.forEach(element => {\n element.track(collecionesEvent, this.trackerName, this.appName);\n });\n \n }\n}\n\nexport default CollecionesTracker;","import CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesEvent extends CollecionesBaseEvent {\n\n constructor(name, data, identifiers) {\n super();\n this.setEventName(name);\n Object.assign(this.data, data);\n this.convertParamIdentifiers(identifiers);\n }\n\n}\n\nexport default CollecionesEvent;","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid';\nimport {underscoreToCamelCase, formatAdjectives, stringifyAdjectives } from './utils/utils.js';\nimport CollecionesBaseEvent from './CollecionesBaseEvent.js';\n\nclass CollecionesSemanticEvent extends CollecionesBaseEvent {\n\n constructor(entity, action, adjective, identifiers) {\n super();\n this.entity = underscoreToCamelCase(entity);\n this.action = underscoreToCamelCase(action);\n this.adjective = formatAdjectives(adjective);\n let adjectiveString = stringifyAdjectives(this.adjective);\n this.eventName = `${this.entity}${(adjectiveString !== undefined) ? adjectiveString : ''}__${this.action}`;\n this.convertParamIdentifiers(identifiers);\n this.data.entityIdentifiers = {};\n this.data.attributes = {};\n this.data.clientEventId = uuidv4();\n this.data.meta = {\n eventFormat: 'CollecionesSemanticEvent',\n eventFormatVersion: '1'\n };\n }\n\n setData() {\n throw new Error('setData deprecated in semantic events');\n }\n\n addEntityIdentifier(key, value) {\n if (typeof key !== 'string') {\n throw new Error('Entity identifier key must be a string');\n }\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new Error('Entity identifier value must be a string or number');\n }\n this.data.entityIdentifiers[key] = value;\n }\n\n addAttribute(key, value) {\n if (typeof key !== 'string') {\n throw new Error('Attribute key must be a string');\n }\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new Error('Attribute value must be a string or number');\n }\n this.data.attributes[key] = value;\n }\n\n}\n\nexport default CollecionesSemanticEvent;","import {underscoreToCamelCase, formatAdjectives, stringifyAdjectives } from './utils/utils.js';\nimport CollecionesSemanticEvent from './CollecionesSemanticEvent.js';\n\nclass CollecionesSemanticCollectionEvent extends CollecionesSemanticEvent {\n\n constructor(itemEntity, action, adjective, identifiers, collectionEntity) {\n if(typeof collectionEntity == 'undefined') {\n collectionEntity = `${itemEntity}Collection`;\n }\n super(collectionEntity, action, undefined, identifiers);\n this.data.meta = {\n eventFormat: 'CollecionesSemanticCollectionEvent',\n eventFormatVersion: '1'\n };\n this.adjective = formatAdjectives(adjective);\n let adjectiveString = stringifyAdjectives(this.adjective);\n itemEntity = underscoreToCamelCase(itemEntity);\n this.data.itemEntity = itemEntity;\n this.data.itemEventName = `${itemEntity}${(adjectiveString !== undefined) ? adjectiveString : ''}__${this.action}`;\n this.data.entityItemIdentifiers = {};\n }\n\n addEntityItemIdentifier(key, value) {\n if (typeof key !== 'string') {\n throw new Error('Entity identifier key must be a string');\n }\n if (typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value)) {\n throw new Error('Entity identifier value must be a string or number');\n }\n if(typeof this.data.entityItemIdentifiers[key] == 'undefined') {\n this.data.entityItemIdentifiers[key] = [];\n }\n if(Array.isArray(value)) {\n value.forEach((v)=> {\n this.data.entityItemIdentifiers[key].push(v);\n });\n } else {\n this.data.entityItemIdentifiers[key].push(value);\n }\n }\n\n \n}\n\nexport default CollecionesSemanticCollectionEvent;","import CollecionesEmitter from './CollecionesEmitter.js';\nimport CollecionesTracker from './CollecionesTracker.js';\nimport CollecionesEvent from './CollecionesEvent.js';\nimport CollecionesSemanticEvent from './CollecionesSemanticEvent.js';\nimport CollecionesSemanticCollectionEvent from './CollecionesSemanticCollectionEvent.js';\n\n(function(global) {\n global.CollecionesEmitter = CollecionesEmitter;\n global.CollecionesTracker = CollecionesTracker;\n global.CollecionesEvent = CollecionesEvent;\n global.CollecionesSemanticEvent = CollecionesSemanticEvent;\n global.CollecionesSemanticCollectionEvent = CollecionesSemanticCollectionEvent;\n})(typeof window !== 'undefined' ? window : globalThis);"],"names":["uuidv4"],"mappings":"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","x_google_ignoreList":[5,6,7,8]}
|