[![Actions Status](https://github.com/spiritloose/uid2-client-perlxs/workflows/test/badge.svg)](https://github.com/spiritloose/uid2-client-perlxs/actions) [![MetaCPAN Release](https://badge.fury.io/pl/UID2-Client-XS.svg)](https://metacpan.org/release/UID2-Client-XS)
# NAME

UID2::Client::XS - Unified ID 2.0 Client for Perl (binding to the UID2 C++ library)

# SYNOPSIS

    use UID2::Client::XS;

    my $client = UID2::Client::XS->new({
        endpoint => '...',
        auth_key => '...',
        secret_key => '...',
    });
    my $result = $client->refresh();
    die $result->{reason} unless $result->{is_success};
    my $decrypted = $client->decrypt($uid2_token);
    if ($result->{is_success}) {
        say $result->{uid};
    }

# DESCRIPTION

This module provides an interface to Unified ID 2.0 API.

# CONSTRUCTOR METHODS

## new

    my $client = UID2::Client::XS->new(\%options);

Creates and returns a new UID2 client with a hashref of options.

Valid options are:

- endpoint

    The UID2 Endpoint (required).

    Please note that not to specify a trailing slash.

- auth\_key

    A bearer token in the request's authorization header (required).

- secret\_key

    A secret key for encrypting/decrypting the request/response body (required).

- identity\_scope

    UID2 or EUID. Defaults to UID2.

## new\_euid

    my $client = UID2::Client::XS->new_euid(\%options);

Calls _new()_ with EUID identity\_scope.

# METHODS

## refresh

    my $result = $client->refresh();

Fetch the latest keys and returns a hashref containing the response. The hashref will have the following keys:

- is\_success

    Boolean indicating whether the operation succeeded.

- reason

    Returns reason for failure if _is\_success_ is false.

## refresh\_json

    my $result = $client->refresh_json($json);

Updates keys with the JSON string and returns a hashref containing the response. The hashref will have same keys of _refresh_.

## decrypt

    my $result = $client->decrypt($token);
    # or
    my $result = $client->decrypt($token, $timestamp);

Decrypts an advertising token and returns a hashref containing the response. The hashref will have the following keys:

- is\_success

    Boolean indicating whether the operation succeeded.

- status

    Returns failed status if is\_success is false.

    See [UID2::Client::XS::DecryptionStatus](https://metacpan.org/pod/UID2%3A%3AClient%3A%3AXS%3A%3ADecryptionStatus) for more details.

- uid

    The UID2 string.

- site\_id
- site\_key\_site\_id
- established

## encrypt\_data

    my $result = $client->encrypt_data($data, \%request);

Encrypts arbitrary data with a hashref of requests.

Valid options are:

- advertising\_token

    Specify the UID2 Token.

- site\_id
- initialization\_vector
- now

One of _advertising\_token_ or _site\_id_ must be passed.

Returns a hashref containing the response. The hashref will have the following keys:

- is\_success

    Boolean indicating whether the operation succeeded.

- status

    Returns failed status if is\_success is false.

    See [UID2::Client::XS::EncryptionStatus](https://metacpan.org/pod/UID2%3A%3AClient%3A%3AXS%3A%3AEncryptionStatus) for more details.

- encrypted\_data

## decrypt\_data

    my $result = $client->decrypt_data($encrypted_data);

Decrypts data encrypted with _encrypt\_data()_. Returns a hashref containing the response. The hashref will have the following keys:

- is\_success
- status
- decrypted\_data
- encrypted\_at

# SEE ALSO

[https://github.com/IABTechLab/uid2-client-cpp11](https://github.com/IABTechLab/uid2-client-cpp11)

# AUTHOR

Jiro Nishiguchi <jiro@cpan.org>