fragment-alpha-sdk 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,17 +11,17 @@ require 'sorbet-runtime'
11
11
  # A support module for the client
12
12
  module FragmentGraphQl
13
13
  extend T::Sig
14
- http = GraphQL::Client.const_get(:HTTP).new('https://api.fragment.dev/graphql') do
14
+ HTTP = T.let(GraphQL::Client.const_get(:HTTP).new('https://api.fragment.dev/graphql') do
15
15
  extend T::Sig
16
16
  sig { params(context: T.untyped).returns(T::Hash[T.untyped, T.untyped]) }
17
17
  def headers(context)
18
18
  { 'Authorization' => 'Bearer %s' % context[:access_token] }
19
19
  end
20
- end
20
+ end, GraphQL::Client::HTTP)
21
21
 
22
22
  Schema = T.let(GraphQL::Client.load_schema("#{__dir__}/fragment.schema.json"), T.untyped)
23
23
 
24
- Client = T.let(GraphQL::Client.new(schema: Schema, execute: http), GraphQL::Client)
24
+ Client = T.let(GraphQL::Client.new(schema: Schema, execute: HTTP), GraphQL::Client)
25
25
 
26
26
  Queries = T.let(Client.parse(
27
27
  File.read("#{__dir__}/queries.graphql")
@@ -32,9 +32,14 @@ end
32
32
  class FragmentClient
33
33
  extend T::Sig
34
34
 
35
- sig { params(client_id: String, client_secret: String, extra_queries_filename: T.nilable(String)).void }
36
- def initialize(client_id, client_secret, extra_queries_filename: nil)
35
+ sig do
36
+ params(client_id: String, client_secret: String, extra_queries_filename: T.nilable(String),
37
+ execute: GraphQL::Client::HTTP).void
38
+ end
39
+ def initialize(client_id, client_secret, extra_queries_filename: nil, execute: FragmentGraphQl::HTTP)
40
+ @client = T.let(GraphQL::Client.new(schema: FragmentGraphQl::Schema, execute: execute), GraphQL::Client)
37
41
  conn = create_conn(client_id, client_secret)
42
+ # TODO: the token may need to be refreshed if the client is around for a long time
38
43
  @token = T.let(get_token(conn, client_id), String)
39
44
  FragmentGraphQl::Queries.constants.each do |q|
40
45
  name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
@@ -51,12 +56,16 @@ class FragmentClient
51
56
  File.read(extra_queries_filename)
52
57
  )
53
58
  queries.constants.each do |q|
54
- name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
55
- format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
56
- end.gsub(/^[A-Z]/, &:downcase)
57
- define_singleton_method(name) do |v|
58
- query(queries.const_get(q), v)
59
- end
59
+ define_method_from_query(q, queries)
60
+ end
61
+ end
62
+
63
+ def define_method_from_query(q, queries)
64
+ name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
65
+ format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
66
+ end.gsub(/^[A-Z]/, &:downcase)
67
+ define_singleton_method(name) do |v|
68
+ query(queries.const_get(q), v)
60
69
  end
61
70
  end
62
71
 
@@ -65,22 +74,26 @@ class FragmentClient
65
74
  f.request :url_encoded
66
75
  f.request :authorization, :basic, client_id, client_secret
67
76
  f.adapter :net_http
77
+ f.response :raise_error
68
78
  end, Faraday::Connection)
69
79
  end
70
80
 
71
81
  sig { params(query: T.untyped, variables: T.untyped).returns(T.untyped) }
72
82
  def query(query, variables)
73
- FragmentGraphQl::Client.query(query, variables: variables, context: { access_token: @token })
83
+ @client.query(query, variables: variables, context: { access_token: @token })
74
84
  end
75
85
 
76
86
  private
77
87
 
78
88
  sig { params(conn: Faraday::Connection, client_id: String).returns(String) }
79
89
  def get_token(conn, client_id)
80
- response = conn.post('/oauth2/token') do |req|
81
- req.body = format('grant_type=client_credentials&scope=https://api.fragment.dev/*&client_id=%s', client_id)
90
+ begin
91
+ response = conn.post('/oauth2/token') do |req|
92
+ req.body = format('grant_type=client_credentials&scope=https://api.fragment.dev/*&client_id=%s', client_id)
93
+ end
94
+ rescue Faraday::ClientError => e
95
+ raise StandardError, "oauth Authentication failed: '%s'" % e.to_s
82
96
  end
83
-
84
97
  T.let(JSON.parse(response.body)['access_token'], String)
85
98
  end
86
99
  end
data/lib/queries.graphql CHANGED
@@ -1,6 +1,6 @@
1
- mutation CreateLedger($ik: ID!, $ledger: CreateLedgerInput!) {
1
+ mutation CreateLedger($ik: SafeString!, $ledger: CreateLedgerInput!) {
2
2
  createLedger(ik: $ik, ledger: $ledger) {
3
- __typename
3
+ __typename
4
4
  ... on CreateLedgerResult {
5
5
  ledger {
6
6
  id
@@ -75,7 +75,7 @@ mutation ReconcileTx($entry: LedgerEntryInput!) {
75
75
  }
76
76
  }
77
77
 
78
- mutation AddLedgerEntry($entry: LedgerEntryInput!, $ik: ID!) {
78
+ mutation AddLedgerEntry($entry: LedgerEntryInput!, $ik: SafeString!) {
79
79
  addLedgerEntry(entry: $entry, ik: $ik) {
80
80
  __typename
81
81
  ... on AddLedgerEntryResult {
@@ -146,7 +146,7 @@ mutation UpdateLedgerAccount(
146
146
  }
147
147
  }
148
148
 
149
- mutation NewCustomLink($name: String!, $ik: ID!) {
149
+ mutation NewCustomLink($name: String!, $ik: SafeString!) {
150
150
  createCustomLink(name: $name, ik: $ik) {
151
151
  __typename
152
152
  ... on CreateCustomLinkResult {
@@ -195,24 +195,6 @@ mutation SyncBankAccounts(
195
195
  }
196
196
  }
197
197
 
198
- mutation MakeBankTransfer($bankTransfer: MakeBankTransferInput!, $ik: ID!) {
199
- makeBankTransfer(bankTransfer: $bankTransfer, ik: $ik) {
200
- __typename
201
- ... on MakeBankTransferResult {
202
- bankTransfer {
203
- id
204
- description
205
- status
206
- }
207
- isIkReplay
208
- }
209
- ... on Error {
210
- code
211
- message
212
- }
213
- }
214
- }
215
-
216
198
  query LedgerEntry($ledgerEntry: LedgerEntryMatchInput!) {
217
199
  ledgerEntry(ledgerEntry: $ledgerEntry) {
218
200
  id
@@ -222,7 +204,6 @@ query LedgerEntry($ledgerEntry: LedgerEntryMatchInput!) {
222
204
  description
223
205
  workspaceId
224
206
  ledgerId
225
- orderId
226
207
  lines {
227
208
  nodes {
228
209
  id
@@ -231,21 +212,6 @@ query LedgerEntry($ledgerEntry: LedgerEntryMatchInput!) {
231
212
  }
232
213
  }
233
214
 
234
- # copied from https://fragment.dev/api-reference#query-bankTransfer
235
- query BankTransfer($bankTransfer: BankTransferMatchInput!) {
236
- bankTransfer(bankTransfer: $bankTransfer) {
237
- id
238
- description
239
- status
240
- order {
241
- id
242
- description
243
- entryIds
244
- stateMachine
245
- }
246
- }
247
- }
248
-
249
215
  # copied from https://fragment.dev/api-reference#query-ledger
250
216
  query Ledger($ledger: LedgerMatchInput!) {
251
217
  ledger(ledger: $ledger) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fragment-alpha-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - fragment
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  requirements: []
84
- rubygems_version: 3.3.11
84
+ rubygems_version: 3.4.10
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: an alpha version for the fragment client sdk