This commit is contained in:
Christoph Califice
2025-10-09 20:05:31 -03:00
parent ed22ef22bc
commit 0a5f88d75a
1442 changed files with 101562 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
# frozen_string_literal: true
# Loading dependancies in a begin block so that we can give nice errors if they are missing
begin
# Logger should always be the first dependancy we try to load so that we know
# if we can depend on it when logging other errors.
require_relative "../logger"
require 'faraday'
rescue LoadError => error
if error.message.match?(/logger$/)
# If the logger isn't present, manually insert the level character when
# logging (this is what the logger class from the file would have done for us)
error_level_char = "\x01e\x02"
STDERR.puts(error_level_char + "[GraphQL] Missing 'logger.rb' file in the rb_common folder.")
exit
end
logger = Stash::Logger
if error.message.match?(/faraday$/)
logger.error("[GraphQL] Faraday gem is not installed, please install it with 'gem install faraday'")
else
logger.error("[GraphQL] Unexpected error #{error.class} encountered: #{error.message}")
end
exit
end
class GraphQLBase
def query(query, variables = nil)
headers = standard_api_headers.merge(@extra_headers)
connection = Faraday.new(url: @url, headers: headers)
response = connection.post do |request|
body = { "query" => query }
body["variables"] = variables if variables
request.body = body.to_json
end
case response.status
when 200
result = JSON.parse(response.body)
if result["error"]
result["error"]["errors"].each do |error|
logger.error("GraphQL error: #{error}")
exit!
end
else
result["data"]
end
when 401
logger.error("[GraphQL] HTTP Error 401, Unauthorized. Make sure you have added an API Key in the 'config.rb' in the 'rb_common/configs' folder")
return nil
else
logger.error("[GraphQL] Query failed: #{response.status} - #{response.body}")
return nil
end
end
private
def logger
Stash::Logger
end
def standard_api_headers
{
"Content-Type": "application/json",
"Accept": "application/json",
"DNT": "1",
}
end
end