The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package LWP::Authen::OAuth2::ServiceProvider::Line::AccessToken;

use strict;
use warnings;
use parent 'LWP::Authen::OAuth2::AccessToken::Bearer';

our $REFRESH_PERIOD = 864000; # 10 days. https://devdocs.line.me/en/#refreshing-access-tokens

# Line tokens can be refreshed until the refresh period is over.
sub should_refresh {
    my ($self, @args) = @_;

    return 0 unless $self->SUPER::should_refresh(@args);

    my $refresh_expires_time = $self->expires_time + $REFRESH_PERIOD;
    my $refresh_token_valid = time < $refresh_expires_time;

    return $refresh_token_valid;
}

# These are exposed for use with /oauth/verify and /oauth/revoke API requests
sub access_token  { shift->{access_token}  }
sub refresh_token { shift->{refresh_token} }

1;