@clipboard-health/analytics 0.1.0 → 0.1.1
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/package.json +2 -2
- package/src/lib/analytics.d.ts +10 -5
- package/src/lib/analytics.js +56 -17
- package/src/lib/analytics.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/analytics",
|
|
3
|
-
"description": "",
|
|
4
|
-
"version": "0.1.
|
|
3
|
+
"description": "Type-safe analytics wrapper around our third-party analytics provider for user identification and event tracking.",
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"bugs": "https://github.com/ClipboardHealth/core-utils/issues",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@clipboard-health/util-ts": "3.8.0",
|
package/src/lib/analytics.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { type Logger } from "@clipboard-health/util-ts";
|
|
2
|
-
export
|
|
2
|
+
export interface UserId {
|
|
3
|
+
userId: string | number;
|
|
4
|
+
}
|
|
5
|
+
export interface LogContext extends UserId {
|
|
6
|
+
destination: string;
|
|
7
|
+
traceName: string;
|
|
8
|
+
}
|
|
3
9
|
export interface CommonTraits {
|
|
4
10
|
createdAt?: Date;
|
|
5
11
|
email?: string;
|
|
@@ -8,12 +14,10 @@ export interface CommonTraits {
|
|
|
8
14
|
type?: string;
|
|
9
15
|
}
|
|
10
16
|
export type Traits = Record<string, unknown> & Readonly<CommonTraits>;
|
|
11
|
-
export interface IdentifyRequest {
|
|
12
|
-
userId: UserId;
|
|
17
|
+
export interface IdentifyRequest extends UserId {
|
|
13
18
|
traits: Traits;
|
|
14
19
|
}
|
|
15
|
-
export interface TrackRequest {
|
|
16
|
-
userId: UserId;
|
|
20
|
+
export interface TrackRequest extends UserId {
|
|
17
21
|
event: string;
|
|
18
22
|
traits: Traits;
|
|
19
23
|
}
|
|
@@ -60,4 +64,5 @@ export declare class Analytics {
|
|
|
60
64
|
* See https://www.braze.com/docs/user_guide/message_building_by_channel/sms_mms_rcs/user_phone_numbers
|
|
61
65
|
*/
|
|
62
66
|
private normalizeTraits;
|
|
67
|
+
private log;
|
|
63
68
|
}
|
package/src/lib/analytics.js
CHANGED
|
@@ -4,6 +4,16 @@ exports.Analytics = void 0;
|
|
|
4
4
|
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
5
5
|
const analytics_node_1 = require("@segment/analytics-node");
|
|
6
6
|
const formatPhoneAsE164_1 = require("./formatPhoneAsE164");
|
|
7
|
+
const LOG_PARAMS = {
|
|
8
|
+
identify: {
|
|
9
|
+
traceName: "analytics.identify",
|
|
10
|
+
destination: "segment.identify",
|
|
11
|
+
},
|
|
12
|
+
track: {
|
|
13
|
+
traceName: "analytics.track",
|
|
14
|
+
destination: "segment.track",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
7
17
|
class Analytics {
|
|
8
18
|
enabled;
|
|
9
19
|
logger;
|
|
@@ -29,14 +39,24 @@ class Analytics {
|
|
|
29
39
|
*/
|
|
30
40
|
identify(params) {
|
|
31
41
|
const { userId, traits } = params;
|
|
42
|
+
const logParams = { ...LOG_PARAMS.identify, userId: String(userId) };
|
|
32
43
|
if (!this.enabled.identify) {
|
|
33
|
-
this.
|
|
44
|
+
this.log({ logParams, message: "disabled, skipping", metadata: { params } });
|
|
34
45
|
return;
|
|
35
46
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
try {
|
|
48
|
+
this.segment.identify({
|
|
49
|
+
userId: String(userId),
|
|
50
|
+
traits: this.normalizeTraits({ logParams, traits }),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
this.log({
|
|
55
|
+
logParams,
|
|
56
|
+
logFunction: this.logger.error,
|
|
57
|
+
metadata: { error: (0, util_ts_1.toError)(error) },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
40
60
|
}
|
|
41
61
|
/**
|
|
42
62
|
* Tracks a user event in our third-party analytics provider.
|
|
@@ -47,17 +67,25 @@ class Analytics {
|
|
|
47
67
|
*/
|
|
48
68
|
track(params) {
|
|
49
69
|
const { userId, event, traits } = params;
|
|
70
|
+
const logParams = { ...LOG_PARAMS.track, userId: String(userId) };
|
|
50
71
|
if (!this.enabled.track) {
|
|
51
|
-
this.
|
|
52
|
-
params,
|
|
53
|
-
});
|
|
72
|
+
this.log({ logParams, message: "disabled, skipping", metadata: { params } });
|
|
54
73
|
return;
|
|
55
74
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
75
|
+
try {
|
|
76
|
+
this.segment.track({
|
|
77
|
+
userId: String(userId),
|
|
78
|
+
event,
|
|
79
|
+
properties: this.normalizeTraits({ logParams, traits }),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.log({
|
|
84
|
+
logParams,
|
|
85
|
+
logFunction: this.logger.error,
|
|
86
|
+
metadata: { error: (0, util_ts_1.toError)(error) },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
61
89
|
}
|
|
62
90
|
/**
|
|
63
91
|
* Knock and Braze update user data based on Segment Identify events. Knock requires E.164 phone
|
|
@@ -66,13 +94,17 @@ class Analytics {
|
|
|
66
94
|
* See https://docs.knock.app/api-reference/users/update
|
|
67
95
|
* See https://www.braze.com/docs/user_guide/message_building_by_channel/sms_mms_rcs/user_phone_numbers
|
|
68
96
|
*/
|
|
69
|
-
normalizeTraits(
|
|
97
|
+
normalizeTraits(params) {
|
|
98
|
+
const { logParams, traits } = params;
|
|
70
99
|
const normalized = { ...traits };
|
|
71
|
-
if (traits.phone &&
|
|
100
|
+
if (traits.phone && (0, util_ts_1.isString)(traits.phone)) {
|
|
72
101
|
const result = (0, formatPhoneAsE164_1.formatPhoneAsE164)({ phone: traits.phone });
|
|
73
102
|
if (util_ts_1.either.isLeft(result)) {
|
|
74
|
-
this.
|
|
75
|
-
|
|
103
|
+
this.log({
|
|
104
|
+
logParams,
|
|
105
|
+
message: result.left.issues.map((issue) => issue.message).join(", "),
|
|
106
|
+
logFunction: this.logger.error,
|
|
107
|
+
metadata: { traits },
|
|
76
108
|
});
|
|
77
109
|
}
|
|
78
110
|
else {
|
|
@@ -81,6 +113,13 @@ class Analytics {
|
|
|
81
113
|
}
|
|
82
114
|
return normalized;
|
|
83
115
|
}
|
|
116
|
+
log(params) {
|
|
117
|
+
const { logParams, logFunction = this.logger.info, message, metadata } = params;
|
|
118
|
+
logFunction(message ? `${logParams.traceName}: ${message}` : logParams.traceName, {
|
|
119
|
+
...logParams,
|
|
120
|
+
...metadata,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
84
123
|
}
|
|
85
124
|
exports.Analytics = Analytics;
|
|
86
125
|
//# sourceMappingURL=analytics.js.map
|
package/src/lib/analytics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../packages/analytics/src/lib/analytics.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../packages/analytics/src/lib/analytics.ts"],"names":[],"mappings":"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"}
|