Sha256: 6f400f426748fda4f78c3ba078574ddf7924ce447649096db298a7ee96b07f64

Contents?: true

Size: 1.5 KB

Versions: 37

Compression:

Stored size: 1.5 KB

Contents

module Script
  module Layers
    module Infrastructure
      module ApiClients
        class PartnersProxyApiClient
          def initialize(ctx, api_key)
            @ctx = ctx
            @api_key = api_key
          end

          def query(query_name, variables: {})
            proxy_response = ShimAPI.query(@ctx, query_name, api_key: @api_key, variables: variables.to_json)
            raise_if_graphql_failed(proxy_response)

            response = proxy_response.dig("data", "scriptServiceProxy")
            raise Errors::InvalidResponseError unless response

            JSON.parse(response)
          end

          private

          def raise_if_graphql_failed(response)
            raise Errors::EmptyResponseError if response.nil?

            return unless response.key?("errors")
            case error_code(response["errors"])
            when "forbidden"
              raise Errors::ForbiddenError
            else
              raise Errors::GraphqlError, response["errors"]
            end
          end

          def error_code(errors)
            errors.map do |e|
              code = e.dig("extensions", "code")
              return code if code
            end
          end

          class ShimAPI < ShopifyCLI::PartnersAPI
            def query(query_name, variables: {})
              variables[:query] = load_query(query_name)
              super("script_service_proxy", variables: variables)
            end
          end
          private_constant(:ShimAPI)
        end
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
shopify-cli-2.25.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.24.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.23.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.22.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.21.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.20.1 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.20.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.19.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.18.1 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.18.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.17.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.16.1 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.16.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.6 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.5 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.4 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.3 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.2 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.1 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb
shopify-cli-2.15.0 lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb