Sha256: c4747f4b51a0748f77bd1df7da11140874a4152f36537720b2339273bd8935c0

Contents?: true

Size: 1.7 KB

Versions: 8

Compression:

Stored size: 1.7 KB

Contents

# typed: strict
# frozen_string_literal: true

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

        sig do
          params(
            headers: T::Hash[String, T.untyped],
            body: String,
            cookies: T.nilable(T::Hash[String, String]),
            tries: Integer
          ).returns(Clients::HttpResponse)
        end
        def proxy_query(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)

          session = Utils::SessionUtils.load_current_session(
            auth_header: normalized_headers["authorization"], cookies: cookies, is_online: true
          )

          if session.nil? || !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

8 entries across 8 versions & 1 rubygems

Version Path
shopify_api-11.1.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-11.0.1 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-11.0.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-10.1.0 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-10.0.3 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-10.0.2 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-10.0.1 lib/shopify_api/utils/graphql_proxy.rb
shopify_api-10.0.0 lib/shopify_api/utils/graphql_proxy.rb