Antybrowser-SDK
view release on metacpan or search on metacpan
lib/Antybrowser/SDK.pm view on Meta::CPAN
package Antybrowser::SDK;
use strict;
use warnings;
our $VERSION = '1.0.2';
use JSON;
use LWP::UserAgent;
sub new {
my ($class, %args) = @_;
my $port = $args{port} || 5173;
return bless {
api_key => $args{api_key} || die "api_key required",
base_url => $args{base_url} || "http://127.0.0.1:$port",
ua => LWP::UserAgent->new,
json => JSON->new->utf8,
}, $class;
}
sub _request {
my ($self, $method, $path, $body) = @_;
my $url = $self->{base_url} . $path;
my @headers = ('x-api-key' => $self->{api_key}, 'Content-Type' => 'application/json');
my $response;
if ($method eq 'GET') {
$response = $self->{ua}->get($url, @headers);
} elsif ($method eq 'POST') {
$response = $self->{ua}->post($url, @headers, Content => $body ? $self->{json}->encode($body) : '{}');
} elsif ($method eq 'PUT') {
my $req = HTTP::Request->new(PUT => $url);
$req->push_header(@headers);
$req->content($self->{json}->encode($body));
$response = $self->{ua}->request($req);
} elsif ($method eq 'DELETE') {
my $req = HTTP::Request->new(DELETE => $url);
$req->push_header(@headers);
$response = $self->{ua}->request($req);
}
die "HTTP " . $response->code . ": " . $response->decoded_content unless $response->is_success;
return $self->{json}->decode($response->decoded_content);
}
# System
sub get_status { $_[0]->_request('GET', '/api/status') }
sub get_settings { $_[0]->_request('GET', '/api/settings') }
sub get_sync_status { $_[0]->_request('GET', '/api/sync/status') }
sub refresh_sync { my ($self, $pid) = @_; $self->_request('POST', '/api/sync/refresh', $pid ? {profileId => $pid} : {}) }
# Profiles
sub get_profiles { $_[0]->_request('GET', '/api/profiles') }
sub create_profile { $_[0]->_request('POST', '/api/profiles', $_[1]) }
sub update_profile { $_[0]->_request('PUT', "/api/profiles/$_[1]", $_[2]) }
sub delete_profile { $_[0]->_request('DELETE', "/api/profiles/$_[1]") }
sub start_profile { $_[0]->_request('POST', "/api/profiles/$_[1]/start") }
sub stop_profile { $_[0]->_request('POST', "/api/profiles/$_[1]/stop") }
sub duplicate_profile { my ($self, $id, $name) = @_; $self->_request('POST', "/api/profiles/$id/duplicate", $name ? {name => $name} : {}) }
# Automations
sub get_automations { $_[0]->_request('GET', '/api/automations') }
sub run_automation { $_[0]->_request('POST', "/api/automations/$_[1]/run", {profileId => $_[2]}) }
# Groups
sub get_groups { $_[0]->_request('GET', '/api/groups') }
sub create_group { $_[0]->_request('POST', '/api/groups', $_[1]) }
sub update_group { $_[0]->_request('PUT', "/api/groups/$_[1]", $_[2]) }
sub delete_group { $_[0]->_request('DELETE', "/api/groups/$_[1]") }
# Proxies
sub get_proxies { $_[0]->_request('GET', '/api/proxies') }
sub create_proxy { $_[0]->_request('POST', '/api/proxies', $_[1]) }
sub check_proxy { $_[0]->_request('POST', '/api/proxies/check', $_[1]) }
sub delete_proxy { $_[0]->_request('DELETE', "/api/proxies/$_[1]") }
# Extensions
sub get_extensions { $_[0]->_request('GET', '/api/extensions') }
sub delete_extension { $_[0]->_request('DELETE', "/api/extensions/$_[1]") }
sub get_profile_extensions { $_[0]->_request('GET', "/api/profiles/$_[1]/extensions") }
sub set_profile_extensions { $_[0]->_request('POST', "/api/profiles/$_[1]/extensions", {extensionIds => $_[2]}) }
1;
__END__
=head1 NAME
Antybrowser::SDK - Official Antybrowser SDK for Perl
=head1 VERSION
Version 1.0.2
=head1 SYNOPSIS
use Antybrowser::SDK;
my $client = Antybrowser::SDK->new(api_key => 'your_api_key');
# System status
my $status = $client->get_status();
# List profiles
my $profiles = $client->get_profiles();
# Create a profile
my $profile = $client->create_profile({ name => 'My Profile' });
# Start a profile (returns debug port)
my $result = $client->start_profile($profile->{id});
print "Debug port: $result->{data}{debugPort}\n";
# Stop and delete
$client->stop_profile($profile->{id});
$client->delete_profile($profile->{id});
=head1 DESCRIPTION
C<Antybrowser::SDK> is the official Perl client for the
L<Antybrowser|https://antybrowser.com> Local API. It provides access to
profiles, automations, groups, proxies, and extensions of a running
Antybrowser desktop application.
=head1 INSTALLATION
=head2 From CPAN
cpan Antybrowser::SDK
( run in 1.246 second using v1.01-cache-2.11-cpan-364913b4093 )