Apple-AppStoreConnect
view release on metacpan or search on metacpan
lib/Apple/AppStoreConnect.pm view on Meta::CPAN
=over 4
=item * C<id> : The app ID.
=item * C<platform> : Optional shortcut for C<filter[appPlatform]>, for example
C<IOS>, C<MAC_OS>, C<TV_OS>, or C<VISION_OS>.
=item * C<limit> : Optional maximum number of results to return. Default C<50>.
=item * C<sort> : Optional sort order. Default C<-createdDate>.
=item * C<crash_log> : If true, fetch C<betaFeedbackCrashSubmissions/$id/crashLog>
for each crash submission and attach it as C<crashLog>.
=item * C<crash_log_fields> : Optional fields to return for each C<betaCrashLogs>
resource, for example C<logText>.
=item * C<params> : Any other query params to pass to the
C<apps/$app_id/betaFeedbackCrashSubmissions> request, for example
C<fields[betaFeedbackCrashSubmissions]> or C<include>. Passing
C<fields[betaCrashLogs]> here is also supported; it is applied to the crash log
request.
=back
=cut
sub new {
my $class = shift;
my $self = {};
bless($self, $class);
my %args = @_;
($self->{$_} = $args{$_} || croak("$_ (string) required."))
foreach qw/issuer key_id/;
unless ($args{key}) {
croak("key or key_file required.") unless $args{key_file};
open my $fh, '<', $args{key_file} or die "Can't open file $!";
$args{key} = do { local $/; <$fh> };
}
$self->{key} = \$args{key};
$self->{timeout} = $args{timeout} || 30;
$self->{expiration} = $args{expiration} || 900;
$self->{$_} = $args{$_} for qw/ua curl scope jwt_payload/;
$self->{base_url} = "https://api.appstoreconnect.apple.com/v1/";
return $self;
}
sub get {
my $self = shift;
my %args = @_;
my $resp = $self->get_response(%args);
unless ($self->{curl}) {
die $resp->status_line unless $resp->is_success;
$resp = $resp->decoded_content;
}
return $args{raw} ? $resp : JSON::decode_json($resp);
}
sub get_response {
my $self = shift;
my %args = @_;
croak("url required") unless $args{url};
$args{url} = $self->{base_url}.$args{url} unless $args{url} =~ /^http/;
my $jwt = $self->jwt;
my $url = _build_url(%args);
unless ($self->{curl} || $self->{ua}) {
require LWP::UserAgent;
$self->{ua} = LWP::UserAgent->new(
agent => "libwww-perl Apple::AppStoreConnect/$VERSION",
timeout => $self->{timeout}
);
}
return _fetch($self->{ua}, $url, $jwt);
}
sub get_apps {
my $self = shift;
my %args = @_;
my %params = $args{params} ? %{$args{params}} : ();
$params{'filter[platform]'} = $args{platform} if $args{platform};
$args{params} = \%params if %params;
$args{url} = $self->{base_url} . 'apps';
$args{url} .= "/$args{id}" if $args{id};
$args{url} .= "/$args{path}" if $args{path};
my $res = $self->get(%args);
return _process_data($res);
}
sub get_app_store_versions {
my $self = shift;
my %args = @_;
croak("id required") unless $args{id};
my %params = $args{params} ? %{$args{params}} : ();
$params{'filter[platform]'} = $args{platform} if $args{platform};
$params{limit} ||= 200;
my $localizations = $args{localizations};
$localizations ||= 1 if $args{localization_fields};
my $versions = _flatten_resources($self->_get_all_pages(
url => "apps/$args{id}/appStoreVersions",
params => \%params,
));
if ($localizations) {
foreach my $version (@$versions) {
( run in 1.352 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )