@codeleap/analytics 7.0.1 → 7.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.
- package/dist/Analytics/index.js +22 -4
- package/dist/Analytics/index.js.map +1 -1
- package/dist/Analytics/types.js +2 -1
- package/dist/Segment/index.js +20 -2
- package/dist/Segment/index.js.map +1 -1
- package/dist/Segment/types.js +2 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/obfuscate.js +13 -7
- package/dist/obfuscate.js.map +1 -1
- package/package.json +1 -1
package/dist/Analytics/index.js
CHANGED
|
@@ -1,16 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Analytics = void 0;
|
|
18
|
+
const obfuscate_1 = require("../obfuscate");
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
3
20
|
/**
|
|
4
21
|
* Generic analytics dispatcher that merges shared context, obfuscates sensitive fields, and fans out to `onEvent` / `onInteraction` handlers.
|
|
5
22
|
* All tracking is silently skipped when `enabled` is false; errors are routed to `onError` rather than thrown.
|
|
6
23
|
*/
|
|
7
|
-
|
|
24
|
+
class Analytics {
|
|
8
25
|
prepareAnalyticsData() {
|
|
9
26
|
const data = this.options.prepareData();
|
|
10
27
|
return data;
|
|
11
28
|
}
|
|
12
29
|
obfuscateAnalyticsData(data) {
|
|
13
|
-
return obfuscate({
|
|
30
|
+
return (0, obfuscate_1.obfuscate)({
|
|
14
31
|
object: data,
|
|
15
32
|
keys: this.options.obfuscateKeys || [],
|
|
16
33
|
values: this.options.obfuscateValues || [],
|
|
@@ -46,4 +63,5 @@ export class Analytics {
|
|
|
46
63
|
}
|
|
47
64
|
}
|
|
48
65
|
}
|
|
66
|
+
exports.Analytics = Analytics;
|
|
49
67
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Analytics/index.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Analytics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,4CAAwC;AAGxC,0CAAuB;AAEvB;;;GAGG;AACH,MAAa,SAAS;IAGZ,oBAAoB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,sBAAsB,CAAC,IAAS;QACtC,OAAO,IAAA,qBAAS,EAAC;YACf,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE;YACtC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE;SAC3C,CAAC,CAAA;IACJ,CAAC;IAED,YACU,OAAyB,EACzB,SAA6B;QAD7B,YAAO,GAAP,OAAO,CAAkB;QACzB,cAAS,GAAT,SAAS,CAAoB;QAErC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAyB,IAAO,EAAE,OAAkB,EAAe;QACtE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1D,CAAC;IAED,WAAW,CAAyB,IAAO,EAAE,OAAkB,EAAe;QAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACtE,CAAC;IAEO,MAAM,CAAC,IAAkB,EAAE,IAAS,EAAE,IAA6B,EAAE,EAAe;QAC1F,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,iCACzC,IAAI,GACJ,IAAI,CAAC,oBAAoB,EAAE,EAC9B,CAAA;YAEF,EAAE,CAAC;gBACD,IAAI;gBACJ,IAAI;gBACJ,IAAI,EAAE,UAAU;aACjB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;CACF;AArDD,8BAqDC"}
|
package/dist/Analytics/types.js
CHANGED
package/dist/Segment/index.js
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
1
16
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
17
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
18
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -18,7 +33,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
33
|
}
|
|
19
34
|
return t;
|
|
20
35
|
};
|
|
21
|
-
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.Segment = void 0;
|
|
38
|
+
__exportStar(require("./types"), exports);
|
|
22
39
|
const defaultConfig = {
|
|
23
40
|
getUserTraits: (user) => user,
|
|
24
41
|
mode: 'prod',
|
|
@@ -33,7 +50,7 @@ const defaultConfig = {
|
|
|
33
50
|
* Event names are automatically prefixed/suffixed per mode (e.g. `dev_` in dev) so staging traffic never pollutes prod workspaces.
|
|
34
51
|
* `identifyUser` is idempotent within a session — it calls `identify` at most once per instance.
|
|
35
52
|
*/
|
|
36
|
-
|
|
53
|
+
class Segment {
|
|
37
54
|
get enabled() {
|
|
38
55
|
return this.client !== null && this._enabled;
|
|
39
56
|
}
|
|
@@ -118,4 +135,5 @@ export class Segment {
|
|
|
118
135
|
this.config = Object.assign(Object.assign({}, this.config), { mode: newMode });
|
|
119
136
|
}
|
|
120
137
|
}
|
|
138
|
+
exports.Segment = Segment;
|
|
121
139
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Segment/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Segment/index.ts"],"names":[],"mappings":"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"}
|
package/dist/Segment/types.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Segment"), exports);
|
|
18
|
+
__exportStar(require("./Analytics"), exports);
|
|
3
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,8CAA2B"}
|
package/dist/obfuscate.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.obfuscate = obfuscate;
|
|
1
7
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
8
|
+
const utils_1 = require("@codeleap/utils");
|
|
9
|
+
const util_1 = require("util");
|
|
10
|
+
const url_parse_1 = __importDefault(require("url-parse"));
|
|
5
11
|
function removeKey(obj, key) {
|
|
6
12
|
if (obj === null || obj === void 0 ? void 0 : obj.hasOwnProperty(key)) {
|
|
7
13
|
obj[key] = '[secret]';
|
|
@@ -20,7 +26,7 @@ function removeValue(obj, value) {
|
|
|
20
26
|
const match = isRegex ? value.test(obj[subObj]) : obj[subObj].includes(value);
|
|
21
27
|
if (match) {
|
|
22
28
|
if (obj[subObj].startsWith('http')) {
|
|
23
|
-
const url =
|
|
29
|
+
const url = (0, url_parse_1.default)(obj[subObj]);
|
|
24
30
|
obj[subObj] = `${url.origin}${url.pathname}/[secret]`;
|
|
25
31
|
}
|
|
26
32
|
else {
|
|
@@ -37,7 +43,7 @@ function removeValue(obj, value) {
|
|
|
37
43
|
* Deep-clones `object` and replaces matched keys with `"[secret]"` and matched values with `"[secret]"` (or strips query strings from URLs).
|
|
38
44
|
* Handles circular references gracefully by returning a shallow copy with a `WARNING` flag instead of throwing.
|
|
39
45
|
*/
|
|
40
|
-
|
|
46
|
+
function obfuscate(args) {
|
|
41
47
|
const { object, keys, values } = args;
|
|
42
48
|
let isCircular = false;
|
|
43
49
|
try {
|
|
@@ -49,13 +55,13 @@ export function obfuscate(args) {
|
|
|
49
55
|
if (typeof object === 'object' && !isCircular) {
|
|
50
56
|
let cleanData = {};
|
|
51
57
|
try {
|
|
52
|
-
cleanData = cloneDeep(object);
|
|
58
|
+
cleanData = (0, utils_1.cloneDeep)(object);
|
|
53
59
|
keys.forEach(fieldName => removeKey(cleanData, fieldName));
|
|
54
60
|
values.forEach(fieldName => removeValue(cleanData, fieldName));
|
|
55
61
|
}
|
|
56
62
|
catch (err1) {
|
|
57
63
|
try {
|
|
58
|
-
cleanData = inspect(object, { depth: 1 });
|
|
64
|
+
cleanData = (0, util_1.inspect)(object, { depth: 1 });
|
|
59
65
|
}
|
|
60
66
|
catch (err2) {
|
|
61
67
|
cleanData = { value: `Couldn't process data` };
|
package/dist/obfuscate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obfuscate.js","sourceRoot":"","sources":["../src/obfuscate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"obfuscate.js","sourceRoot":"","sources":["../src/obfuscate.ts"],"names":[],"mappings":"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"}
|