fragment-alpha-sdk 0.1.0

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.
@@ -0,0 +1,71 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require 'faraday'
5
+ require 'faraday/net_http'
6
+ require 'json'
7
+ require 'graphql/client'
8
+ require 'graphql/client/http'
9
+ require 'sorbet-runtime'
10
+ require 'pry'
11
+
12
+ module FragmentGraphQl
13
+ extend T::Sig
14
+ http = GraphQL::Client.const_get(:HTTP).new('https://api.fragment.dev/graphql') do
15
+ extend T::Sig
16
+ sig {params(context: T.untyped).returns(T::Hash[T.untyped, T.untyped])}
17
+ def headers(context)
18
+ { 'Authorization' => 'Bearer %s' % context[:access_token] }
19
+ end
20
+ end
21
+
22
+ Schema = T.let(GraphQL::Client.load_schema("#{__dir__}/fragment.schema.json"), T.untyped)
23
+
24
+ puts File.read("#{__dir__}/fragment.schema.json")
25
+ pry
26
+
27
+ Client = T.let(GraphQL::Client.new(schema: Schema, execute: RDoc::Attr), GraphQL::Client)
28
+
29
+ Queries = T.let(Client.parse(
30
+ File.open("#{__dir__}/queries.graphql").read
31
+ ), T.untyped)
32
+ end
33
+
34
+ # A client for Fragment
35
+ class FragmentClient
36
+ extend T::Sig
37
+
38
+ sig { params(client_id: String, client_secret: String).void }
39
+ def initialize(client_id, client_secret)
40
+ conn = T.let(Faraday.new('https://auth.fragment.dev') do |f|
41
+ f.request :url_encoded
42
+ f.request :authorization, :basic, client_id, client_secret
43
+ f.adapter :net_http
44
+ end, Faraday::Connection)
45
+ @token = T.let(get_token(conn, client_id), String)
46
+ FragmentGraphQl::Queries.constants.each do |q|
47
+ name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
48
+ format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
49
+ end.gsub(/^[A-Z]/, &:downcase)
50
+ define_singleton_method(name) do |v|
51
+ query(FragmentGraphQl::Queries.const_get(q), v)
52
+ end
53
+ end
54
+ end
55
+
56
+ sig {params(query: T.untyped, variables: T.untyped).returns(T.untyped)}
57
+ def query(query, variables)
58
+ FragmentGraphQl::Client.query(query, variables: variables, context: { access_token: @token })
59
+ end
60
+
61
+ private
62
+
63
+ sig { params(conn: Faraday::Connection, client_id: String).returns(String) }
64
+ def get_token(conn, client_id)
65
+ response = conn.post('/oauth2/token') do |req|
66
+ req.body = format('grant_type=client_credentials&scope=https://api.fragment.dev/*&client_id=%s', client_id)
67
+ end
68
+
69
+ T.let(JSON.parse(response.body)['access_token'], String)
70
+ end
71
+ end
@@ -0,0 +1,15 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ # A client for Fragment
5
+ class FragmentClient
6
+ sig { params(variables: { 'ik' => String, 'ledger' => { 'name' => String } }).returns(T::Hash[T.untyped, T.untyped]) }
7
+ def create_ledger(variables); end
8
+
9
+ sig do
10
+ params(variables: { 'ledger' => { 'id' => String },
11
+ 'ledgerAccounts' => T::Array[{ 'ik' => String, 'name' => String,
12
+ 'type' => String }] }).returns(T.untyped)
13
+ end
14
+ def create_ledger_accounts(variables); end
15
+ end
@@ -0,0 +1,129 @@
1
+ mutation CreateLedger($ik: ID!, $ledger: CreateLedgerInput!) {
2
+ createLedger(ik: $ik, ledger: $ledger) {
3
+ ... on CreateLedgerResult {
4
+ ledger {
5
+ id
6
+ name
7
+ }
8
+ isIkReplay
9
+ }
10
+ ... on BadRequestError {
11
+ code
12
+ message
13
+ }
14
+ ... on InternalError {
15
+ code
16
+ message
17
+ }
18
+ }
19
+ }
20
+
21
+ mutation CreateLedgerAccounts(
22
+ $ledger: LedgerMatchInput!
23
+ $ledgerAccounts: [CreateLedgerAccountsInput!]!
24
+ ) {
25
+ createLedgerAccounts(ledger: $ledger, ledgerAccounts: $ledgerAccounts) {
26
+ __typename
27
+ ... on CreateLedgerAccountsResult {
28
+ ledgerAccounts {
29
+ id
30
+ name
31
+ type
32
+ ik
33
+ }
34
+ ikReplays {
35
+ ik
36
+ isIkReplay
37
+ }
38
+ }
39
+ ... on Error {
40
+ code
41
+ message
42
+ }
43
+ }
44
+ }
45
+
46
+ query LedgerEntry($ledgerEntry: LedgerEntryMatchInput!) {
47
+ ledgerEntry(ledgerEntry: $ledgerEntry) {
48
+ id
49
+ date
50
+ posted
51
+ created
52
+ description
53
+ workspaceId
54
+ ledgerId
55
+ orderId
56
+ lines {
57
+ nodes {
58
+ id
59
+ }
60
+ }
61
+ }
62
+ }
63
+
64
+ # copied from https://fragment.dev/api-reference#query-bankTransfer
65
+ query BankTransfer($bankTransfer: BankTransferMatchInput!) {
66
+ bankTransfer(bankTransfer: $bankTransfer) {
67
+ id
68
+ description
69
+ status
70
+ order {
71
+ id
72
+ description
73
+ entryIds
74
+ stateMachine
75
+ }
76
+ }
77
+ }
78
+
79
+ # copied from https://fragment.dev/api-reference#query-ledger
80
+ query Ledger($ledger: LedgerMatchInput!) {
81
+ ledger(ledger: $ledger) {
82
+ id
83
+ name
84
+ type
85
+ workspaceId
86
+ created
87
+ balanceUTCOffset
88
+ ledgerAccounts {
89
+ nodes {
90
+ id
91
+ ledgerId
92
+ type
93
+ }
94
+ pageInfo {
95
+ hasNextPage
96
+ }
97
+ }
98
+ ledgerEntries {
99
+ nodes {
100
+ id
101
+ date
102
+ description
103
+ }
104
+ pageInfo {
105
+ hasNextPage
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ # copied from https://fragment.dev/api-reference#mutation-addLedgerEntry
112
+ mutation AddLedgerEntry($ik: ID!, $entry: LedgerEntryInput!) {
113
+ addLedgerEntry(ik: $ik, entry: $entry) {
114
+ ... on AddLedgerEntryResult {
115
+ entry {
116
+ id
117
+ date
118
+ }
119
+ }
120
+ ... on BadRequestError {
121
+ message
122
+ code
123
+ }
124
+ ... on InternalError {
125
+ message
126
+ code
127
+ }
128
+ }
129
+ }
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fragment-alpha-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - fragment
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 1980-01-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: graphql-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.18'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.18'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sorbet-runtime
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.5'
55
+ description:
56
+ email: snoble@fragment.dev
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/fragment.schema.json
62
+ - lib/fragment_client.rb
63
+ - lib/fragment_client.rbi
64
+ - lib/queries.graphql
65
+ homepage: https://fragment.dev
66
+ licenses:
67
+ - Nonstandard
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.0
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubygems_version: 3.3.11
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: an alpha version for the fragment client sdk
88
+ test_files: []