-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathanalytics.go
42 lines (37 loc) · 1.55 KB
/
analytics.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package stream
import (
"context"
"encoding/json"
)
// AnalyticsClient is a specialized client used to send and track
// analytics events for enabled apps.
type AnalyticsClient struct {
client *Client
}
// TrackEngagement is used to send and track analytics EngagementEvents.
func (c *AnalyticsClient) TrackEngagement(ctx context.Context, events ...EngagementEvent) (*BaseResponse, error) {
endpoint := c.client.makeEndpoint("engagement/")
data := map[string]any{
"content_list": events,
}
return decode(c.client.post(ctx, endpoint, data, c.client.authenticator.analyticsAuth))
}
// TrackImpression is used to send and track analytics ImpressionEvents.
func (c *AnalyticsClient) TrackImpression(ctx context.Context, eventsData ImpressionEventsData) (*BaseResponse, error) {
endpoint := c.client.makeEndpoint("impression/")
return decode(c.client.post(ctx, endpoint, eventsData, c.client.authenticator.analyticsAuth))
}
// RedirectAndTrack is used to send and track analytics ImpressionEvents. It tracks
// the events data (either EngagementEvents or ImpressionEvents) and redirects to the provided
// URL string.
func (c *AnalyticsClient) RedirectAndTrack(url string, events ...map[string]any) (string, error) {
endpoint := c.client.makeEndpoint("redirect/")
eventsData, err := json.Marshal(events)
if err != nil {
return "", err
}
endpoint.addQueryParam(makeRequestOption("events", string(eventsData)))
endpoint.addQueryParam(makeRequestOption("url", url))
err = c.client.authenticator.signAnalyticsRedirectEndpoint(&endpoint)
return endpoint.String(), err
}