App-Mxpress-PDF
view release on metacpan or search on metacpan
lib/App/Mxpress/Client.pm view on Meta::CPAN
package App::Mxpress::Client;
use Moo;
use Compiled::Params::OO qw/cpo/;
use Types::Standard qw/Object Str StrMatch Enum Optional HashRef Bool/;
use Future::HTTP;
use HTTP::CookieJar;
use JSON;
our ($validate, $session);
BEGIN {
$validate = cpo(
login => {
username => Str,
password => Str
},
generate => {
name => Str,
size => Str,
params => Optional->of(HashRef),
save => Optional->of(Str),
filename => Optional->of(Str)
},
pod => {
styles => Optional->of(HashRef),
type => Enum[qw/module distribution raw/],
module => Optional->of(StrMatch[ qr{([a-zA-Z0-9\-\:]*)} ]),
distribution => Optional->of(StrMatch[ qr{([a-zA-Z0-9\-\:]*)} ],),
name => Optional->of(Str),
raw => Optional->of(Str),
save => Optional->of(Str),
filename => Optional->of(Str)
},
save => [Object, Object, Str]
);
}
has host => (
is => 'ro',
isa => Str,
default => sub {
return 'http://localhost:5000'
}
);
has [qw/csrf/] => (
is => 'rw',
isa => Str
);
has json => (
is => 'ro',
default => sub {
return JSON->new->allow_blessed->convert_blessed;
}
);
has ua => (
is => 'ro',
default => sub {
return Future::HTTP->new(
cookie_jar => HTTP::CookieJar->new
);
}
);
sub session {
my $self = shift;
return $self->ua->http_get(
sprintf("%s/api/session", $self->host),
headers => {
'Accept' => 'application/json'
}
)->then(sub {
my ($body, $headers) = @_;
$self->csrf($headers->{token});
return Future->new->done($body);
});
}
sub login {
my $self = shift;
my $params = $validate->login->(@_);
$self->session->then(sub {
return $self->ua->http_post(
sprintf("%s/api/login", $self->host),
$self->json->encode({%$params}),
headers => {
'Token' => $self->csrf,
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
)->then(sub {
my ($body, $headers) = @_;
$self->csrf($headers->{token});
return Future->new->done($body);
});
})->get
}
sub templates {
my $self = shift;
$self->ua->http_get(
sprintf("%s/api/templates", $self->host),
headers => {
'Accept' => 'application/json'
}
)->then(sub {
my ($body, $headers) = @_;
$body = $self->json->decode($body);
return Future->new->done($body);
})->else(sub {
return Future->new->done($_[0]);
})->get;
}
sub generate {
my $self = shift;
my $params = $validate->generate->(@_);
$self->ua->http_post(
sprintf("%s/api/generate/pdf", $self->host),
$self->json->encode({
( run in 0.599 second using v1.01-cache-2.11-cpan-39bf76dae61 )