Sha256: c81aa4edd3acd0a777b38fb84c66483962c1006ef8488fa0bc711aac6e1aa0ff

Contents?: true

Size: 1.57 KB

Versions: 16

Compression:

Stored size: 1.57 KB

Contents

# typed: strict
# frozen_string_literal: true

module ShopifyAPI
  module Utils
    module GraphqlProxy
      class << self
        extend T::Sig

        sig do
          params(
            session: Auth::Session,
            headers: T::Hash[String, T.untyped],
            body: String,
            cookies: T.nilable(T::Hash[String, String]),
            tries: Integer,
          ).returns(Clients::HttpResponse)
        end
        def proxy_query(session:, headers:, body:, cookies: nil, tries: 1)
          raise Errors::PrivateAppError, "GraphQL proxing is unsupported for private apps." if Context.private?

          normalized_headers = HttpUtils.normalize_headers(headers)

          unless session.online?
            raise Errors::SessionNotFoundError,
              "Failed to load an online session from the provided parameters."
          end

          client = Clients::Graphql::Admin.new(session: session)

          case normalized_headers["content-type"]
          when "application/graphql"
            return client.query(query: body, tries: tries)
          when "application/json"
            parsed_body = JSON.parse(body)

            query = parsed_body["query"]
            raise Errors::InvalidGraphqlRequestError,
              "Request missing 'query' field in GraphQL proxy request." if query.nil?

            return client.query(query: query, variables: parsed_body["variables"], tries: tries)
          end

          raise Errors::InvalidGraphqlRequestError, "Unsupported Content-Type #{normalized_headers["content-type"]}."
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
shopify_api-14.8.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.7.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.6.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.5.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.4.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.3.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.2.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.1.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.0.1 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-14.0.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.4.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.3.1 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.3.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.2.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.1.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-13.0.0 lib/shopify_api/utils/graphql_proxy.rb