Client   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 41
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A track() 0 4 1
A trackOnce() 0 4 1
A encodePayload() 0 11 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Th3Mouk\ReactiveKlaviyo;
6
7
use Rx\Observable;
8
use Rxnet\HttpClient\Browser;
9
10
final class Client
11
{
12
    private const TRACKING_API_URL = 'https://a.klaviyo.com/api';
13
    /** @var string */
14
    private $token;
15
    /** @var Browser */
16
    private $browser;
17
18
    public function __construct(
19
        string $token,
20
        Browser $browser
21
    ) {
22
        $this->token   = $token;
23
        $this->browser = $browser;
24
    }
25
26
    public function track(Payload $payload): Observable
27
    {
28
        return $this->browser->get(
29
            self::TRACKING_API_URL . '/track?data=' . $this->encodePayload($payload)
30
        );
31
    }
32
33
    public function trackOnce(Payload $payload): Observable
34
    {
35
        return $this->browser->get(
36
            self::TRACKING_API_URL . '/track-once?data=' . $this->encodePayload($payload)
37
        );
38
    }
39
40
    private function encodePayload(Payload $payload): string
41
    {
42
        $json = \json_encode(
43
            array_merge(
44
                ['token' => $this->token],
45
                $payload->toArray()
46
            ),
47
            JSON_THROW_ON_ERROR
48
        );
49
50
        return base64_encode($json);
51
    }
52
}
53