@streamlayer/sdk-web-analytics 1.0.3 → 1.1.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.
@@ -0,0 +1,16 @@
1
+ import { EventBusActionPayload } from '@streamlayer/sdk-web-interfaces';
2
+ import { TopicSubType } from '@streamlayer/sl-eslib/analytics/v1/common/analytics.common_pb';
3
+ import { Analytics } from './analytics';
4
+ type TransformedPayload = {
5
+ topicSubType: TopicSubType;
6
+ };
7
+ export declare class AdvertisementAnalytics {
8
+ private analytics;
9
+ constructor(analytics: Analytics);
10
+ received: ({ advertisementId }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
11
+ opened: ({ advertisementId }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
12
+ videoPlay: ({ advertisementId }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
13
+ buttonSelect: ({ advertisementId }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
14
+ bannerSelect: ({ advertisementId }: EventBusActionPayload["advertisement"], { topicSubType }: TransformedPayload) => void;
15
+ }
16
+ export {};
@@ -0,0 +1,102 @@
1
+ import { eventBus } from '@streamlayer/sdk-web-interfaces';
2
+ import { PromotionType } from '@streamlayer/sdk-web-types';
3
+ import { Kind, PollOpenedFrom, TopicType, TopicSubType, } from '@streamlayer/sl-eslib/analytics/v1/common/analytics.common_pb';
4
+ const MAP_PROMOTION_TYPE_TO_TOPIC_TYPE = {
5
+ [PromotionType.UNSET]: TopicSubType.UNSET,
6
+ [PromotionType.INGAME_IAB21]: TopicSubType.PROMOTION_INGAME_IAB21,
7
+ [PromotionType.INGAME_IAB11_LBAR]: TopicSubType.PROMOTION_INGAME_IAB11_LBAR,
8
+ [PromotionType.INGAME_IAB11]: TopicSubType.PROMOTION_INGAME_IAB11,
9
+ [PromotionType.INGAME_IAB21_LBAR]: TopicSubType.PROMOTION_INGAME_IAB21_LBAR,
10
+ [PromotionType.INGAME_IAB61]: TopicSubType.PROMOTION_INGAME_IAB61,
11
+ [PromotionType.EXTERNAL_AD]: TopicSubType.PROMOTION_GAM,
12
+ };
13
+ export class AdvertisementAnalytics {
14
+ analytics;
15
+ constructor(analytics) {
16
+ this.analytics = analytics;
17
+ this.analytics.onConnect(() => {
18
+ const listener = (event) => {
19
+ if (event.slEventBus?.type === 'advertisement') {
20
+ const topicSubType = event.slEventBus.payload.advertisementType
21
+ ? MAP_PROMOTION_TYPE_TO_TOPIC_TYPE[event.slEventBus.payload.advertisementType]
22
+ : TopicSubType.UNSET;
23
+ switch (event.slEventBus.action) {
24
+ case 'videoPlay':
25
+ this.videoPlay(event.slEventBus.payload, { topicSubType });
26
+ break;
27
+ case 'buttonSelect':
28
+ this.buttonSelect(event.slEventBus.payload, { topicSubType });
29
+ break;
30
+ case 'bannerSelect':
31
+ this.bannerSelect(event.slEventBus.payload, { topicSubType });
32
+ break;
33
+ case 'received':
34
+ this.received(event.slEventBus.payload, { topicSubType });
35
+ break;
36
+ case 'opened':
37
+ this.opened(event.slEventBus.payload, { topicSubType });
38
+ break;
39
+ }
40
+ }
41
+ };
42
+ return eventBus.listen(listener);
43
+ });
44
+ }
45
+ received = ({ advertisementId }, { topicSubType }) => {
46
+ this.analytics.write('games', {
47
+ common: {
48
+ ...this.analytics.commonStore.getValues(),
49
+ kind: Kind.POLLS_RECEIVED,
50
+ topicId: advertisementId,
51
+ topicType: TopicType.POLLS_PROMOTION,
52
+ topicSubType,
53
+ },
54
+ pollOpenedFrom: PollOpenedFrom.UNSET,
55
+ });
56
+ };
57
+ opened = ({ advertisementId }, { topicSubType }) => {
58
+ this.analytics.write('games', {
59
+ common: {
60
+ ...this.analytics.commonStore.getValues(),
61
+ kind: Kind.POLLS_OPENED,
62
+ topicId: advertisementId,
63
+ topicType: TopicType.POLLS_PROMOTION,
64
+ topicSubType,
65
+ },
66
+ pollOpenedFrom: PollOpenedFrom.UNSET,
67
+ });
68
+ };
69
+ videoPlay = ({ advertisementId }, { topicSubType }) => {
70
+ this.analytics.write('games', {
71
+ common: {
72
+ ...this.analytics.commonStore.getValues(),
73
+ topicId: advertisementId,
74
+ kind: Kind.AD_VIDEO_PLAYED,
75
+ topicSubType,
76
+ },
77
+ pollOpenedFrom: PollOpenedFrom.UNSET,
78
+ });
79
+ };
80
+ buttonSelect = ({ advertisementId }, { topicSubType }) => {
81
+ this.analytics.write('games', {
82
+ common: {
83
+ ...this.analytics.commonStore.getValues(),
84
+ topicId: advertisementId,
85
+ kind: Kind.AD_BUTTON_NAVIGATED,
86
+ topicSubType,
87
+ },
88
+ pollOpenedFrom: PollOpenedFrom.UNSET,
89
+ });
90
+ };
91
+ bannerSelect = ({ advertisementId }, { topicSubType }) => {
92
+ this.analytics.write('games', {
93
+ common: {
94
+ ...this.analytics.commonStore.getValues(),
95
+ topicId: advertisementId,
96
+ kind: Kind.AD_BANNER_NAVIGATED,
97
+ topicSubType,
98
+ },
99
+ pollOpenedFrom: PollOpenedFrom.UNSET,
100
+ });
101
+ };
102
+ }
@@ -4,6 +4,7 @@ import { GamesMessage, NotificationMessage, SendInvitationsMessage, EventOpenedM
4
4
  import { PlainMessage } from '@bufbuild/protobuf';
5
5
  import { InvitationAnalytics } from './invitation';
6
6
  import { InteractionsAnalytics } from './interactions';
7
+ import { AdvertisementAnalytics } from './advertisement';
7
8
  import { NotificationsAnalytics } from './notifications';
8
9
  import { PollsAnalytics } from './polls';
9
10
  import { AllowedCases } from './constants';
@@ -33,6 +34,7 @@ export declare class Analytics {
33
34
  readonly polls: PollsAnalytics;
34
35
  readonly invitation: InvitationAnalytics;
35
36
  readonly interactions: InteractionsAnalytics;
37
+ readonly advertisement: AdvertisementAnalytics;
36
38
  private heartbeat;
37
39
  private analyticsClient;
38
40
  private listeners;
package/lib/analytics.js CHANGED
@@ -6,6 +6,7 @@ import { ScreenOrientation } from '@streamlayer/sl-eslib/analytics/v1/common/ana
6
6
  import { AnalyticsService } from '@streamlayer/sl-eslib/analytics/v2/streaming/streaming_connect';
7
7
  import { InvitationAnalytics } from './invitation';
8
8
  import { InteractionsAnalytics } from './interactions';
9
+ import { AdvertisementAnalytics } from './advertisement';
9
10
  import { NotificationsAnalytics } from './notifications';
10
11
  import { PollsAnalytics } from './polls';
11
12
  import { heartbeat } from './heartbeat';
@@ -29,6 +30,7 @@ export class Analytics {
29
30
  polls;
30
31
  invitation;
31
32
  interactions;
33
+ advertisement;
32
34
  heartbeat;
33
35
  analyticsClient;
34
36
  listeners;
@@ -44,6 +46,7 @@ export class Analytics {
44
46
  this.polls = new PollsAnalytics(this);
45
47
  this.invitation = new InvitationAnalytics(this);
46
48
  this.interactions = new InteractionsAnalytics(this);
49
+ this.advertisement = new AdvertisementAnalytics(this);
47
50
  const { client } = instance.analyticsTransport.createPromiseClient(AnalyticsService, {
48
51
  method: 'send',
49
52
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamlayer/sdk-web-analytics",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "main": "./lib/index.js",
6
6
  "typings": "./lib/index.d.ts",
@@ -10,15 +10,15 @@
10
10
  ],
11
11
  "peerDependencies": {
12
12
  "@bufbuild/protobuf": "^1.10.0",
13
- "@connectrpc/connect": "^1.4.0",
13
+ "@connectrpc/connect": "^1.5.0",
14
14
  "nanoid": "3.3.7",
15
- "@streamlayer/sl-eslib": "^5.104.1",
16
- "@streamlayer/sdk-web-api": "^1.1.2",
17
- "@streamlayer/sdk-web-interfaces": "^1.0.3",
18
- "@streamlayer/sdk-web-logger": "^1.0.3",
19
- "@streamlayer/sdk-web-core": "^1.0.3",
20
- "@streamlayer/sdk-web-features": "^1.0.3",
21
- "@streamlayer/feature-gamification": "^1.2.1"
15
+ "@streamlayer/sl-eslib": "^5.117.0",
16
+ "@streamlayer/sdk-web-api": "^1.2.0",
17
+ "@streamlayer/sdk-web-interfaces": "^1.1.0",
18
+ "@streamlayer/sdk-web-logger": "^1.0.5",
19
+ "@streamlayer/sdk-web-features": "^1.0.5",
20
+ "@streamlayer/sdk-web-core": "^1.1.0",
21
+ "@streamlayer/feature-gamification": "^1.3.0"
22
22
  },
23
23
  "exports": {
24
24
  ".": {