@streamlayer/sdk-web-analytics 1.10.0 → 1.11.0

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.
@@ -12,8 +12,16 @@ export declare class AdvertisementAnalytics {
12
12
  received: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
13
13
  opened: ({ id, openedFrom }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
14
14
  viewed: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
15
+ videoMuted: ({ id }: EventBusActionPayload["advertisement"], { topicSubType, muted }: TransformedPayload & {
16
+ muted: boolean;
17
+ }) => void;
18
+ quartileCompleted: ({ id, quartile }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
19
+ videoReplayed: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
15
20
  videoPlay: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
21
+ videoEnd: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
22
+ videoRendered: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
16
23
  buttonSelect: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
17
24
  bannerSelect: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
25
+ bannerShown: ({ id }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
18
26
  }
19
27
  export {};
@@ -14,17 +14,26 @@ const MAP_PROMOTION_TYPE_TO_TOPIC_TYPE = {
14
14
  [PromotionType.EXTERNAL_AD]: TopicSubType.PROMOTION_GAM,
15
15
  [PromotionType.VIDEO_SIDE_BY_SIDE]: TopicSubType.PROMOTION_VIDEO_SIDE_BY_SIDE,
16
16
  [PromotionType.PICTURE_IN_PICTURE]: TopicSubType.PROMOTION_PICTURE_IN_PICTURE,
17
- [PromotionType.LOWER_THIRD]: TopicSubType.UNSET,
17
+ [PromotionType.LOWER_THIRD]: TopicSubType.PROMOTION_LOWER_THIRD,
18
18
  [PromotionType.SHOP_LBAR]: TopicSubType.PROMOTION_SHOP_LBAR,
19
19
  [PromotionType.SHOP_OVERLAY]: TopicSubType.PROMOTION_SHOP_OVERLAY,
20
20
  [PromotionType.SHOP_SIDEBAR]: TopicSubType.PROMOTION_SHOP_SIDEBAR,
21
21
  [PromotionType.NFL_SHOP_LBAR]: TopicSubType.PROMOTION_SHOP_LBAR,
22
22
  [PromotionType.NFL_SHOP_OVERLAY]: TopicSubType.PROMOTION_SHOP_OVERLAY,
23
23
  [PromotionType.NFL_SHOP_SIDEBAR]: TopicSubType.PROMOTION_SHOP_SIDEBAR,
24
+ [PromotionType.STATS]: TopicSubType.UNSET,
25
+ [PromotionType.STANDARD]: TopicSubType.UNSET,
26
+ [PromotionType.SHOP]: TopicSubType.UNSET,
27
+ [PromotionType.NFL_SHOP]: TopicSubType.UNSET,
24
28
  };
25
29
  export const getPromotionSubType = (type) => {
26
30
  return type ? MAP_PROMOTION_TYPE_TO_TOPIC_TYPE[type] : TopicSubType.UNSET;
27
31
  };
32
+ const QuartilesMap = {
33
+ 25: Kind.AD_VIDEO_Q25,
34
+ 50: Kind.AD_VIDEO_Q50,
35
+ 75: Kind.AD_VIDEO_Q75,
36
+ };
28
37
  export class AdvertisementAnalytics {
29
38
  analytics;
30
39
  constructor(analytics) {
@@ -40,12 +49,21 @@ export class AdvertisementAnalytics {
40
49
  case 'videoPlay':
41
50
  this.videoPlay(event.slEventBus.payload, { topicSubType });
42
51
  break;
52
+ case 'videoEnd':
53
+ this.videoEnd(event.slEventBus.payload, { topicSubType });
54
+ break;
55
+ case 'videoRendered':
56
+ this.videoRendered(event.slEventBus.payload, { topicSubType });
57
+ break;
43
58
  case 'buttonSelect':
44
59
  this.buttonSelect(event.slEventBus.payload, { topicSubType });
45
60
  break;
46
61
  case 'bannerSelect':
47
62
  this.bannerSelect(event.slEventBus.payload, { topicSubType });
48
63
  break;
64
+ case 'bannerShown':
65
+ this.bannerShown(event.slEventBus.payload, { topicSubType });
66
+ break;
49
67
  case 'received':
50
68
  this.received(event.slEventBus.payload, { topicSubType });
51
69
  break;
@@ -55,6 +73,19 @@ export class AdvertisementAnalytics {
55
73
  case 'viewed':
56
74
  this.viewed(event.slEventBus.payload, { topicSubType });
57
75
  break;
76
+ case 'videoMuted':
77
+ case 'videoUnmuted':
78
+ this.videoMuted(event.slEventBus.payload, {
79
+ topicSubType,
80
+ muted: event.slEventBus.action === 'videoMuted',
81
+ });
82
+ break;
83
+ case 'videoReplayed':
84
+ this.videoReplayed(event.slEventBus.payload, { topicSubType });
85
+ break;
86
+ case 'quartileCompleted':
87
+ this.quartileCompleted(event.slEventBus.payload, { topicSubType });
88
+ break;
58
89
  }
59
90
  }
60
91
  };
@@ -85,12 +116,52 @@ export class AdvertisementAnalytics {
85
116
  pollOpenedFrom: openedFrom === 'notification' ? PollOpenedFrom.IN_APP : PollOpenedFrom.UNSET,
86
117
  });
87
118
  };
119
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
88
120
  viewed = ({ id }, { topicSubType }) => {
121
+ // skip send same event as opened
122
+ // this.analytics.write('games', {
123
+ // common: {
124
+ // ...this.analytics.commonStore.getValues(),
125
+ // kind: Kind.POLLS_OPENED,
126
+ // topicId: id,
127
+ // topicType: TopicType.POLLS_PROMOTION,
128
+ // topicSubType,
129
+ // },
130
+ // pollOpenedFrom: PollOpenedFrom.UNSET,
131
+ // })
132
+ };
133
+ videoMuted = ({ id }, { topicSubType, muted }) => {
89
134
  this.analytics.write('games', {
90
135
  common: {
91
136
  ...this.analytics.commonStore.getValues(),
92
- kind: Kind.POLLS_OPENED,
93
137
  topicId: id,
138
+ kind: muted ? Kind.AD_VIDEO_MUTED : Kind.AD_VIDEO_UNMUTED,
139
+ topicType: TopicType.POLLS_PROMOTION,
140
+ topicSubType,
141
+ },
142
+ pollOpenedFrom: PollOpenedFrom.UNSET,
143
+ });
144
+ };
145
+ quartileCompleted = ({ id, quartile }, { topicSubType }) => {
146
+ if (quartile) {
147
+ this.analytics.write('games', {
148
+ common: {
149
+ ...this.analytics.commonStore.getValues(),
150
+ topicId: id,
151
+ kind: QuartilesMap[quartile],
152
+ topicType: TopicType.POLLS_PROMOTION,
153
+ topicSubType,
154
+ },
155
+ pollOpenedFrom: PollOpenedFrom.UNSET,
156
+ });
157
+ }
158
+ };
159
+ videoReplayed = ({ id }, { topicSubType }) => {
160
+ this.analytics.write('games', {
161
+ common: {
162
+ ...this.analytics.commonStore.getValues(),
163
+ topicId: id,
164
+ kind: Kind.AD_VIDEO_REPLAYED,
94
165
  topicType: TopicType.POLLS_PROMOTION,
95
166
  topicSubType,
96
167
  },
@@ -109,12 +180,36 @@ export class AdvertisementAnalytics {
109
180
  pollOpenedFrom: PollOpenedFrom.UNSET,
110
181
  });
111
182
  };
183
+ videoEnd = ({ id }, { topicSubType }) => {
184
+ this.analytics.write('games', {
185
+ common: {
186
+ ...this.analytics.commonStore.getValues(),
187
+ topicId: id,
188
+ kind: Kind.AD_VIDEO_COMPLETE,
189
+ topicType: TopicType.POLLS_PROMOTION,
190
+ topicSubType,
191
+ },
192
+ pollOpenedFrom: PollOpenedFrom.UNSET,
193
+ });
194
+ };
195
+ videoRendered = ({ id }, { topicSubType }) => {
196
+ this.analytics.write('games', {
197
+ common: {
198
+ ...this.analytics.commonStore.getValues(),
199
+ topicId: id,
200
+ kind: Kind.AD_VIDEO_RENDERED,
201
+ topicType: TopicType.POLLS_PROMOTION,
202
+ topicSubType,
203
+ },
204
+ pollOpenedFrom: PollOpenedFrom.UNSET,
205
+ });
206
+ };
112
207
  buttonSelect = ({ id }, { topicSubType }) => {
113
208
  this.analytics.write('games', {
114
209
  common: {
115
210
  ...this.analytics.commonStore.getValues(),
116
211
  topicId: id,
117
- kind: Kind.AD_BUTTON_NAVIGATED,
212
+ kind: Kind.AD_INTERACTION_BUTTON_NAVIGATED,
118
213
  topicType: TopicType.POLLS_PROMOTION,
119
214
  topicSubType,
120
215
  },
@@ -126,7 +221,19 @@ export class AdvertisementAnalytics {
126
221
  common: {
127
222
  ...this.analytics.commonStore.getValues(),
128
223
  topicId: id,
129
- kind: Kind.AD_BANNER_NAVIGATED,
224
+ kind: Kind.AD_INTERACTION_BANNER_NAVIGATED,
225
+ topicType: TopicType.POLLS_PROMOTION,
226
+ topicSubType,
227
+ },
228
+ pollOpenedFrom: PollOpenedFrom.UNSET,
229
+ });
230
+ };
231
+ bannerShown = ({ id }, { topicSubType }) => {
232
+ this.analytics.write('games', {
233
+ common: {
234
+ ...this.analytics.commonStore.getValues(),
235
+ topicId: id,
236
+ kind: Kind.AD_BANNER_SHOWN,
130
237
  topicType: TopicType.POLLS_PROMOTION,
131
238
  topicSubType,
132
239
  },
package/lib/polls.d.ts CHANGED
@@ -11,14 +11,16 @@ export declare class PollsAnalytics {
11
11
  questionId?: string;
12
12
  questionType?: QuestionType;
13
13
  }) => void;
14
- opened: ({ questionId, questionType, questionOpenedFrom, }: {
14
+ viewed: ({ questionId, questionType, questionOpenedFrom, isAd, }: {
15
15
  questionId?: string;
16
16
  questionType?: QuestionType;
17
17
  questionOpenedFrom?: "list" | "notification";
18
+ isAd?: boolean;
18
19
  }) => void;
19
- voted: ({ questionId, questionType }: {
20
+ voted: ({ questionId, questionType, isAd, }: {
20
21
  questionId?: string;
21
22
  questionType?: QuestionType;
23
+ isAd?: boolean;
22
24
  }) => void;
23
25
  onboardingPassed: () => void;
24
26
  navigated: () => void;
package/lib/polls.js CHANGED
@@ -25,8 +25,8 @@ export class PollsAnalytics {
25
25
  case 'received':
26
26
  this.received(event.slEventBus.payload);
27
27
  break;
28
- case 'opened':
29
- this.opened(event.slEventBus.payload);
28
+ case 'viewed':
29
+ this.viewed(event.slEventBus.payload);
30
30
  break;
31
31
  }
32
32
  }
@@ -46,12 +46,12 @@ export class PollsAnalytics {
46
46
  pollOpenedFrom: PollOpenedFrom.UNSET,
47
47
  });
48
48
  };
49
- // poll is opened from notification or list
50
- opened = ({ questionId, questionType, questionOpenedFrom, }) => {
49
+ // poll is viewed from notification or list
50
+ viewed = ({ questionId, questionType, questionOpenedFrom, isAd, }) => {
51
51
  this.analytics.write('games', {
52
52
  common: {
53
53
  ...this.analytics.commonStore.getValues(),
54
- kind: Kind.POLLS_OPENED,
54
+ kind: isAd ? Kind.POLLS_AD_OPENED : Kind.POLLS_OPENED,
55
55
  topicId: questionId,
56
56
  topicType: questionType ? TOPIC_TYPE_MAP[questionType] : TopicType.UNSET,
57
57
  },
@@ -59,11 +59,11 @@ export class PollsAnalytics {
59
59
  });
60
60
  };
61
61
  // poll is voted
62
- voted = ({ questionId, questionType }) => {
62
+ voted = ({ questionId, questionType, isAd, }) => {
63
63
  this.analytics.write('games', {
64
64
  common: {
65
65
  ...this.analytics.commonStore.getValues(),
66
- kind: Kind.POLLS_VOTE,
66
+ kind: isAd ? Kind.POLLS_AD_VOTE : Kind.POLLS_VOTE,
67
67
  topicId: questionId,
68
68
  topicType: questionType ? TOPIC_TYPE_MAP[questionType] : TopicType.UNSET,
69
69
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamlayer/sdk-web-analytics",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "type": "module",
5
5
  "main": "./lib/index.js",
6
6
  "typings": "./lib/index.d.ts",
@@ -12,13 +12,13 @@
12
12
  "@bufbuild/protobuf": "^2.2.2",
13
13
  "@connectrpc/connect": "^2.0.0",
14
14
  "uuid": "^11.1.0",
15
- "@streamlayer/sl-eslib": "^5.179.1",
16
- "@streamlayer/sdk-web-api": "^1.11.0",
17
- "@streamlayer/sdk-web-logger": "^1.0.65",
18
- "@streamlayer/sdk-web-interfaces": "^1.6.3",
19
- "@streamlayer/sdk-web-features": "^1.0.65",
20
- "@streamlayer/feature-gamification": "^1.19.0",
21
- "@streamlayer/sdk-web-core": "^1.14.0"
15
+ "@streamlayer/sl-eslib": "^5.216.1",
16
+ "@streamlayer/sdk-web-api": "^1.12.0",
17
+ "@streamlayer/sdk-web-interfaces": "^1.7.0",
18
+ "@streamlayer/sdk-web-logger": "^1.0.67",
19
+ "@streamlayer/sdk-web-features": "^1.0.67",
20
+ "@streamlayer/sdk-web-core": "^1.15.0",
21
+ "@streamlayer/feature-gamification": "^1.20.0"
22
22
  },
23
23
  "exports": {
24
24
  ".": {