Sha256: ddb5f4c9b6ec096dcf6c5618c706c81a31381f67b4b3301020ad8631a7d760f9

Contents?: true

Size: 1.57 KB

Versions: 5

Compression:

Stored size: 1.57 KB

Contents

# typed: true
module Mangadex
  module Api
    class User
      extend T::Sig

      attr_accessor :mangadex_user_id, :session, :refresh, :session_valid_until
      attr_reader :data

      sig { params(mangadex_user_id: String, session: T.nilable(String), refresh: T.nilable(String), data: T.untyped).void }
      def initialize(mangadex_user_id, session: nil, refresh: nil, data: nil)
        raise ArgumentError, 'Missing mangadex_user_id' if mangadex_user_id.to_s.empty?

        @mangadex_user_id = mangadex_user_id
        @session = session
        @session_valid_until = session ? Time.now + (14 * 60) : nil
        @refresh = refresh
        @data = data
      end

      # true: The tokens were successfully refreshed
      # false: Error: refresh token empty or could not refresh the token on the server
      sig { returns(T::Boolean) }
      def refresh!
        return false if refresh.nil?

        response = Mangadex::Api::Context.without_user do
          Mangadex::Internal::Request.post('/auth/refresh', payload: { token: refresh })
        end
        return false unless response['token']

        @session_valid_until = Time.now + (14 * 60)
        @refresh = response.dig('token', 'refresh')
        @session = response.dig('token', 'session')

        true
      end

      sig { returns(Mangadex::Api::User) }
      def with_valid_session
        session_expired? && refresh!
        self
      ensure
        self
      end

      sig { returns(T::Boolean) }
      def session_expired?
        @session_valid_until.nil? || @session_valid_until <= Time.now
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mangadex-5.3.3.1 lib/mangadex/api/user.rb
mangadex-5.3.3 lib/mangadex/api/user.rb
mangadex-5.3.2 lib/mangadex/api/user.rb
mangadex-5.3.1.3 lib/mangadex/api/user.rb
mangadex-5.3.1.2 lib/mangadex/api/user.rb