@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@clipboard-health/analytics",
3
- "description": "",
4
- "version": "0.1.0",
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",
@@ -1,5 +1,11 @@
1
1
  import { type Logger } from "@clipboard-health/util-ts";
2
- export type UserId = string | number;
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
  }
@@ -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.logger.info("Analytics identify is disabled, skipping", { params });
44
+ this.log({ logParams, message: "disabled, skipping", metadata: { params } });
34
45
  return;
35
46
  }
36
- this.segment.identify({
37
- userId: String(userId),
38
- traits: this.normalizeTraits(traits),
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.logger.info("Analytics tracking is disabled, skipping", {
52
- params,
53
- });
72
+ this.log({ logParams, message: "disabled, skipping", metadata: { params } });
54
73
  return;
55
74
  }
56
- this.segment.track({
57
- userId: String(userId),
58
- event,
59
- properties: traits,
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(traits) {
97
+ normalizeTraits(params) {
98
+ const { logParams, traits } = params;
70
99
  const normalized = { ...traits };
71
- if (traits.phone && typeof traits.phone === "string") {
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.logger.error(result.left.issues.map((issue) => issue.message).join(", "), {
75
- phone: traits.phone,
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
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../packages/analytics/src/lib/analytics.ts"],"names":[],"mappings":";;;AAAA,uDAAqE;AACrE,4DAAwE;AAExE,2DAAwD;AA8BxD,MAAa,SAAS;IACH,OAAO,CAAU;IACjB,MAAM,CAAS;IACf,OAAO,CAAmB;IAE3C;;;;;;OAMG;IACH,YAAY,MAA4D;QACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAE3C,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,MAAuB;QACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAoB;QAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;gBAC3D,MAAM;aACP,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,KAAK;YACL,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CAAC,MAAc;QACpC,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAA,qCAAiB,EAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAE1D,IAAI,gBAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC7E,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAvFD,8BAuFC"}
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../packages/analytics/src/lib/analytics.ts"],"names":[],"mappings":"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"}