Sha256: adfbfe7ad8ab715b6dfb65e6a20ab15388a99e42461d2da8127a000d505c5212

Contents?: true

Size: 699 Bytes

Versions: 4

Compression:

Stored size: 699 Bytes

Contents

# frozen_string_literal: true

module ErpIntegration
  module Middleware
    class ApiKeysRotation < Faraday::Middleware
      HTTP_ROTATE_CODES = [404, 429].freeze

      attr_reader :options

      def initialize(app, options = {})
        super(app)

        @options = options
      end

      def call(env)
        on_request(env)

        @app.call(env).on_complete { |response| on_complete(response) }
      end

      def on_request(env)
        env[:request_headers]['X-API-KEY'] = options[:api_keys_pool].current_key
      end

      def on_complete(env)
        return unless HTTP_ROTATE_CODES.include?(env.status)

        options[:api_keys_pool].rotate_key!
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
erp_integration-0.55.0 lib/erp_integration/middleware/api_keys_rotation.rb
erp_integration-0.54.0 lib/erp_integration/middleware/api_keys_rotation.rb
erp_integration-0.53.1 lib/erp_integration/middleware/api_keys_rotation.rb
erp_integration-0.53.0 lib/erp_integration/middleware/api_keys_rotation.rb