Class: InstacartApi::GraphqlClient
- Inherits:
-
Object
- Object
- InstacartApi::GraphqlClient
- Defined in:
- lib/instacart_api/graphql_client.rb
Overview
Thin transport over Instacart's GraphQL endpoint.
Authentication is the logged-in session cookie (the
__Host-instacart_sid cookie, plus its companions) captured from a real
browser login — Instacart's login flow is bot-protected and can't be
scripted, so the caller supplies the cookie string. Every request also
needs the X-Client-Identifier: web header, without which the
persisted-query resolver rejects the variables.
Constant Summary collapse
- ENDPOINT =
URI("https://www.instacart.com/graphql")
- DEFAULT_USER_AGENT =
A recent desktop Chrome UA; Instacart serves the web GraphQL API to it.
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " \ "AppleWebKit/537.36 (KHTML, like Gecko) " \ "Chrome/126.0.0.0 Safari/537.36"
Instance Method Summary collapse
-
#initialize(session_cookie:, user_agent: DEFAULT_USER_AGENT) ⇒ GraphqlClient
constructor
A new instance of GraphqlClient.
-
#mutate(operation, variables) ⇒ Object
Run a persisted mutation (HTTP POST).
-
#query(operation, variables) ⇒ Object
Run a persisted query (HTTP GET).
Constructor Details
#initialize(session_cookie:, user_agent: DEFAULT_USER_AGENT) ⇒ GraphqlClient
Returns a new instance of GraphqlClient.
21 22 23 24 |
# File 'lib/instacart_api/graphql_client.rb', line 21 def initialize(session_cookie:, user_agent: DEFAULT_USER_AGENT) @session_cookie = @user_agent = user_agent end |
Instance Method Details
#mutate(operation, variables) ⇒ Object
Run a persisted mutation (HTTP POST). Returns the data hash.
38 39 40 41 42 43 44 45 46 |
# File 'lib/instacart_api/graphql_client.rb', line 38 def mutate(operation, variables) request = Net::HTTP::Post.new(ENDPOINT) request.body = JSON.generate( operationName: operation, variables: variables, extensions: extensions(operation) ) perform(request) end |
#query(operation, variables) ⇒ Object
Run a persisted query (HTTP GET). Returns the data hash.
27 28 29 30 31 32 33 34 35 |
# File 'lib/instacart_api/graphql_client.rb', line 27 def query(operation, variables) uri = ENDPOINT.dup uri.query = URI.encode_www_form( operationName: operation, variables: JSON.generate(variables), extensions: JSON.generate(extensions(operation)) ) perform(Net::HTTP::Get.new(uri)) end |