starkinfra 0.0.1 → 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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/creditnote/creditnote.rb +583 -0
  3. data/lib/creditnote/log.rb +126 -0
  4. data/lib/event/attempt.rb +126 -0
  5. data/lib/event/event.rb +125 -7
  6. data/lib/issuingauthorization/issuingauthorization.rb +141 -0
  7. data/lib/issuingbalance/issuingbalance.rb +55 -0
  8. data/lib/issuingbin/issuingbin.rb +89 -0
  9. data/lib/issuingcard/issuingcard.rb +261 -0
  10. data/lib/issuingcard/log.rb +123 -0
  11. data/lib/issuingholder/issuingholder.rb +206 -0
  12. data/lib/issuingholder/log.rb +123 -0
  13. data/lib/issuinginvoice/issuinginvoice.rb +152 -0
  14. data/lib/issuinginvoice/log.rb +120 -0
  15. data/lib/issuingpurchase/issuingpurchase.rb +209 -0
  16. data/lib/issuingpurchase/log.rb +131 -0
  17. data/lib/issuingrule/issuingrule.rb +79 -0
  18. data/lib/issuingtransaction/issuingtransaction.rb +136 -0
  19. data/lib/issuingwithdrawal/issuingwithdrawal.rb +153 -0
  20. data/lib/pixbalance/pixbalance.rb +15 -15
  21. data/lib/pixchargeback/log.rb +129 -0
  22. data/lib/pixchargeback/pixchargeback.rb +225 -0
  23. data/lib/pixclaim/log.rb +135 -0
  24. data/lib/pixclaim/pixclaim.rb +226 -0
  25. data/lib/pixdirector/pixdirector.rb +76 -0
  26. data/lib/pixdomain/certificate.rb +30 -0
  27. data/lib/pixdomain/pixdomain.rb +58 -0
  28. data/lib/pixinfraction/log.rb +129 -0
  29. data/lib/pixinfraction/pixinfraction.rb +212 -0
  30. data/lib/pixkey/log.rb +128 -0
  31. data/lib/pixkey/pixkey.rb +240 -0
  32. data/lib/pixrequest/log.rb +16 -16
  33. data/lib/pixrequest/pixrequest.rb +66 -67
  34. data/lib/pixreversal/log.rb +13 -12
  35. data/lib/pixreversal/pixreversal.rb +74 -72
  36. data/lib/pixstatement/pixstatement.rb +24 -25
  37. data/lib/starkinfra.rb +32 -3
  38. data/lib/user/organization.rb +54 -0
  39. data/lib/user/project.rb +37 -0
  40. data/lib/user/user.rb +20 -0
  41. data/lib/utils/api.rb +10 -2
  42. data/lib/utils/bacenid.rb +19 -0
  43. data/lib/utils/checks.rb +2 -3
  44. data/lib/utils/endtoendid.rb +11 -0
  45. data/lib/utils/parse.rb +13 -13
  46. data/lib/utils/request.rb +2 -2
  47. data/lib/utils/rest.rb +6 -5
  48. data/lib/utils/returnid.rb +11 -0
  49. data/lib/webhook/webhook.rb +124 -0
  50. metadata +45 -24
@@ -12,17 +12,16 @@ module StarkInfra
12
12
  # accessed by the user. This feature is only available for direct participants.
13
13
  #
14
14
  # ## Parameters (required):
15
- # - after [Date, DateTime, Time or string]: transactions that happened at this date are stored in the PixStatement, must be the same as before. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
16
- # - before [Date, DateTime, Time or string]: transactions that happened at this date are stored in the PixStatement, must be the same as after. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
17
- # - type [string]: types of entities to include in statement. Options: ["interchange", "interchangeTotal", "transaction"]
15
+ # - after [Date or string]: transactions that happened at this date are stored in the PixStatement, must be the same as before. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
16
+ # - before [Date or string]: transactions that happened at this date are stored in the PixStatement, must be the same as after. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
17
+ # - type [string]: type of entities to include in statement. Options: 'interchange', 'interchangeTotal', 'transaction'
18
18
  #
19
19
  # ## Attributes (return-only):
20
- # - id [string, default nil]: unique id returned when the PixStatement is created. ex: "5656565656565656"
21
- # - status [string, default nil]: current PixStatement status. ex: "success" or "failed"
22
- # - transaction_count [integer]: number of transactions that happened during the day that the PixStatement was requested. ex 11
23
- # - created [Datetime, default nil]: creation datetime for the PixStatement. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
24
- # - updated [Datetime, default nil]: latest update datetime for the PixStatement. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
25
-
20
+ # - id [string]: unique id returned when the PixStatement is created. ex: '5656565656565656'
21
+ # - status [string]: current PixStatement status. ex: 'success' or 'failed'
22
+ # - transaction_count [integer]: number of transactions that happened during the day that the PixStatement was requested. ex: 11
23
+ # - created [DateTime]: creation datetime for the PixStatement. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
24
+ # - updated [DateTime]: latest update datetime for the PixStatement. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
26
25
  class PixStatement < StarkInfra::Utils::Resource
27
26
  attr_reader :after, :before, :type, :id, :status, :transaction_count, :created, :updated
28
27
  def initialize(after:, before:, type:, id: nil, status: nil, transaction_count: nil, created: nil, updated: nil)
@@ -40,11 +39,11 @@ module StarkInfra
40
39
  #
41
40
  # Create a PixStatements linked to your workspace in the Stark Infra API
42
41
  #
43
- # ## Parameters (requiered):
42
+ # ## Parameters (required):
44
43
  # - statement [PixStatement object]: PixStatement object to be created in the API.
45
44
  #
46
45
  # ## Parameters (optional):
47
- # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if starkinfra.user was set before function call
46
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
48
47
  #
49
48
  # ## Return:
50
49
  # - PixStatement object with updated attributes.
@@ -52,18 +51,18 @@ module StarkInfra
52
51
  StarkInfra::Utils::Rest.post_single(entity: statement, user: user, **resource)
53
52
  end
54
53
 
55
- # # Retrieve a specific PixStatment object
54
+ # # Retrieve a specific PixStatement object
56
55
  #
57
- # Receive a single PixStatment object previously created in the Stark Infra API by passing its id
56
+ # Receive a single PixStatement object previously created in the Stark Infra API by passing its id
58
57
  #
59
58
  # ## Parameters (required):
60
59
  # - id [string]: object unique id. ex: '5656565656565656'
61
60
  #
62
61
  # ## Parameters (optional):
63
- # - user [Organization/Project object]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
62
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
64
63
  #
65
64
  # ## Return:
66
- # - PixStatment object with updated attributes
65
+ # - PixStatement object with updated attributes
67
66
  def self.get(id, user: nil)
68
67
  StarkInfra::Utils::Rest.get_id(id: id, user: user, **resource)
69
68
  end
@@ -75,7 +74,7 @@ module StarkInfra
75
74
  # ## Parameters (optional):
76
75
  # - limit [integer, default nil]: maximum number of objects to be retrieved. Unlimited if nil. ex: 35
77
76
  # - ids [list of strings, default nil]: list of ids to filter retrieved objects. ex: ['5656565656565656', '4545454545454545']
78
- # - user [Organization/Project object]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
77
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
79
78
  #
80
79
  # ## Return:
81
80
  # - generator of PixStatement objects with updated attributes
@@ -91,19 +90,19 @@ module StarkInfra
91
90
  # # Retrieve paged PixStatements
92
91
  #
93
92
  # Receive a list of up to 100 PixStatements objects previously created in the Stark infra API and the cursor to the next page.
94
- # Use this function instead of query if you want to manually page your requests.
93
+ # Use this function instead of query if you want to manually page your statements.
95
94
  #
96
95
  # ## Parameters (optional):
97
96
  # - cursor [string, default nil]: cursor returned on the previous page function call
98
- # - limit [integer, default nil]: maximum number of objects to be retrieved. Unlimited if nil. ex: 35
97
+ # - limit [integer, default 100]: maximum number of objects to be retrieved. Max = 100. ex: 35
99
98
  # - ids [list of strings, default nil]: list of ids to filter retrieved objects. ex: ['5656565656565656', '4545454545454545']
100
- # - user [Organization/Project object]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
99
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
101
100
  #
102
101
  # ## Return:
103
102
  # - list of PixStatement objects with updated attributes
104
- # - Cursor to retrieve the next page of PixStatement objects
103
+ # - cursor to retrieve the next page of PixStatement objects
105
104
  def self.page(cursor: nil, limit: nil, ids: nil, user: nil)
106
- return StarkInfra::Utils::Rest.get_page(
105
+ StarkInfra::Utils::Rest.get_page(
107
106
  cursor: cursor,
108
107
  limit: limit,
109
108
  ids: ids,
@@ -117,15 +116,15 @@ module StarkInfra
117
116
  # Retrieve a specific PixStatement by its ID in a .csv file.
118
117
  #
119
118
  # ## Parameters (required):
120
- # - id [string]: object unique id. ex: "5656565656565656"
119
+ # - id [string]: object unique id. ex: '5656565656565656'
121
120
  #
122
121
  # ## Parameters (optional):
123
- # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if starkinfra.user was set before function call
122
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
124
123
  #
125
124
  # ## Return:
126
125
  # - PixStatement .csv file
127
126
  def self.csv(id, user: nil)
128
- return StarkInfra::Utils::Rest.get_content(id: id, user: user, sub_resource_name: "csv", **resource)
127
+ StarkInfra::Utils::Rest.get_content(id: id, user: user, sub_resource_name: 'csv', **resource)
129
128
  end
130
129
 
131
130
  def self.resource
@@ -140,7 +139,7 @@ module StarkInfra
140
139
  status: json['status'],
141
140
  transaction_count: json['transaction_count'],
142
141
  created: json['created'],
143
- updated: json['updated'],
142
+ updated: json['updated']
144
143
  )
145
144
  }
146
145
  }
data/lib/starkinfra.rb CHANGED
@@ -1,19 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require('starkbank')
4
3
  require_relative('key')
5
- require_relative('workspace/workspace')
4
+ require_relative('user/project')
5
+ require_relative('user/organization')
6
+ require_relative('issuingauthorization/issuingauthorization')
7
+ require_relative('issuingbalance/issuingbalance')
8
+ require_relative('issuingbin/issuingbin')
9
+ require_relative('issuingcard/issuingcard')
10
+ require_relative('issuingcard/log')
11
+ require_relative('issuingholder/issuingholder')
12
+ require_relative('issuingholder/log')
13
+ require_relative('issuinginvoice/issuinginvoice')
14
+ require_relative('issuinginvoice/log')
15
+ require_relative('issuingpurchase/issuingpurchase')
16
+ require_relative('issuingpurchase/log')
17
+ require_relative('issuingtransaction/issuingtransaction')
18
+ require_relative('issuingwithdrawal/issuingwithdrawal')
19
+ require_relative('issuingrule/issuingrule')
6
20
  require_relative('pixrequest/pixrequest')
7
21
  require_relative('pixrequest/log')
8
22
  require_relative('pixreversal/pixreversal')
9
23
  require_relative('pixreversal/log')
10
24
  require_relative('pixbalance/pixbalance')
11
25
  require_relative('pixstatement/pixstatement')
26
+ require_relative('pixinfraction/pixinfraction')
27
+ require_relative('pixinfraction/log')
28
+ require_relative('pixchargeback/pixchargeback')
29
+ require_relative('pixchargeback/log')
30
+ require_relative('pixkey/pixkey')
31
+ require_relative('pixkey/log')
32
+ require_relative('pixclaim/pixclaim')
33
+ require_relative('pixclaim/log')
34
+ require_relative('pixdomain/pixdomain')
35
+ require_relative('pixdirector/pixdirector')
36
+ require_relative('webhook/webhook')
12
37
  require_relative('event/event')
38
+ require_relative('event/attempt')
39
+ require_relative('utils/endtoendid')
40
+ require_relative('utils/returnid')
41
+ require_relative('creditnote/creditnote')
42
+ require_relative('creditnote/log')
13
43
 
14
44
  # SDK to facilitate Ruby integrations with Stark Infra
15
45
  module StarkInfra
16
- include StarkBank
17
46
  @user = nil
18
47
  @language = 'en-US'
19
48
  class << self; attr_accessor :user, :language; end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('user')
4
+
5
+ module StarkInfra
6
+ # # Organization object
7
+ # The Organization object is an authentication entity for the SDK that
8
+ # represents your entire Organization, being able to access any Workspace
9
+ # underneath it and even create new Workspaces. Only a legal representative
10
+ # of your organization can register or change the Organization credentials.
11
+ # All requests to the Stark Infra API must be authenticated via an SDK user,
12
+ # which must have been previously created at the Stark Infra website
13
+ # [https://web.sandbox.starkinfra.com] or [https://web.starkinfra.com]
14
+ # before you can use it in this SDK. Organizations may be passed as the user parameter on
15
+ # each request or may be defined as the default user at the start (See README).
16
+ # If you are accessing a specific Workspace using Organization credentials, you should
17
+ # specify the workspace ID when building the Organization object or by request, using
18
+ # the Organization.replace(organization, workspace_id) method, which creates a copy of the organization
19
+ # object with the altered workspace ID. If you are listing or creating new Workspaces, the
20
+ # workspace_id should be nil.
21
+ #
22
+ # ## Parameters (required):
23
+ # - environment [string]: environment where the organization is being used. ex: 'sandbox' or 'production'
24
+ # - id [string]: unique id required to identify organization. ex: '5656565656565656'
25
+ # - private_key [string]: PEM string of the private key linked to the organization. ex: '-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEyTIHK6jYuik6ktM9FIF3yCEYzpLjO5X/\ntqDioGM+R2RyW0QEo+1DG8BrUf4UXHSvCjtQ0yLppygz23z0yPZYfw==\n-----END PUBLIC KEY-----'
26
+ # - workspace_id [string]: unique id of the accessed Workspace, if any. ex: nil or '4848484848484848'
27
+ #
28
+ # ## Attributes (return-only):
29
+ # - pem [string]: private key in pem format. ex: '-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEyTIHK6jYuik6ktM9FIF3yCEYzpLjO5X/\ntqDioGM+R2RyW0QEo+1DG8BrUf4UXHSvCjtQ0yLppygz23z0yPZYfw==\n-----END PUBLIC KEY-----'
30
+ class Organization < StarkInfra::User
31
+ attr_reader :workspace_id
32
+ def initialize(id:, environment:, private_key:, workspace_id: nil)
33
+ super(environment, id, private_key)
34
+ @workspace_id = workspace_id
35
+ end
36
+
37
+ def access_id
38
+ if @workspace_id
39
+ "organization/#{@id}/workspace/#{@workspace_id}"
40
+ else
41
+ "organization/#{@id}"
42
+ end
43
+ end
44
+
45
+ def self.replace(organization, workspace_id)
46
+ Organization.new(
47
+ environment: organization.environment,
48
+ id: organization.id,
49
+ private_key: organization.pem,
50
+ workspace_id: workspace_id
51
+ )
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('user')
4
+
5
+ module StarkInfra
6
+ # # Project object
7
+ #
8
+ # The Project object is an authentication entity for the SDK that is permanently
9
+ # linked to a specific Workspace.
10
+ # All requests to the Stark Infra API must be authenticated via an SDK user,
11
+ # which must have been previously created at the Stark Infra website
12
+ # [https://web.sandbox.starkinfra.com] or [https://web.starkinfra.com]
13
+ # before you can use it in this SDK. Projects may be passed as the user parameter on
14
+ # each request or may be defined as the default user at the start (See README).
15
+ #
16
+ # ## Parameters (required):
17
+ # - id [string]: unique id required to identify project. ex: '5656565656565656'
18
+ # - private_key [string]: PEM string of the private key linked to the project. ex: '-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEyTIHK6jYuik6ktM9FIF3yCEYzpLjO5X/\ntqDioGM+R2RyW0QEo+1DG8BrUf4UXHSvCjtQ0yLppygz23z0yPZYfw==\n-----END PUBLIC KEY-----'
19
+ # - environment [string]: environment where the project is being used. ex: 'sandbox' or 'production'
20
+ #
21
+ # ## Attributes (return-only):
22
+ # - name [string, default '']: project name. ex: 'MyProject'
23
+ # - allowed_ips [list of strings]: list containing the strings of the ips allowed to make requests on behalf of this project. ex: ['190.190.0.50']
24
+ # - pem [string]: private key in pem format. ex: '-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEyTIHK6jYuik6ktM9FIF3yCEYzpLjO5X/\ntqDioGM+R2RyW0QEo+1DG8BrUf4UXHSvCjtQ0yLppygz23z0yPZYfw==\n-----END PUBLIC KEY-----'
25
+ class Project < StarkInfra::User
26
+ attr_reader :name, :allowed_ips
27
+ def initialize(environment:, id:, private_key:, name: '', allowed_ips: nil)
28
+ super(environment, id, private_key)
29
+ @name = name
30
+ @allowed_ips = allowed_ips
31
+ end
32
+
33
+ def access_id
34
+ "project/#{@id}"
35
+ end
36
+ end
37
+ end
data/lib/user/user.rb ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require('starkbank-ecdsa')
4
+ require_relative('../utils/resource')
5
+
6
+ module StarkInfra
7
+ class User < StarkInfra::Utils::Resource
8
+ attr_reader :pem, :environment
9
+ def initialize(environment, id, private_key)
10
+ require_relative('../utils/checks')
11
+ super(id)
12
+ @pem = StarkInfra::Utils::Checks.check_private_key(private_key)
13
+ @environment = StarkInfra::Utils::Checks.check_environment(environment)
14
+ end
15
+
16
+ def private_key
17
+ EllipticCurve::PrivateKey.fromPem(@pem)
18
+ end
19
+ end
20
+ end
data/lib/utils/api.rb CHANGED
@@ -41,7 +41,15 @@ module StarkInfra
41
41
 
42
42
  list = []
43
43
  value.each do |v|
44
- list << (v.is_a?(Hash) ? cast_json_to_api_format(v) : v)
44
+ if v.is_a?(Hash)
45
+ list << cast_json_to_api_format(v)
46
+ next
47
+ end
48
+ if v.is_a?(SubResource)
49
+ list << api_json(v)
50
+ next
51
+ end
52
+ list << v
45
53
  end
46
54
  list
47
55
  end
@@ -51,7 +59,7 @@ module StarkInfra
51
59
  json.each do |key, value|
52
60
  snakes[StarkInfra::Utils::Case.camel_to_snake(key)] = value
53
61
  end
54
-
62
+
55
63
  resource_maker.call(snakes)
56
64
  end
57
65
 
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: false
2
+
3
+ require('date')
4
+
5
+ module StarkInfra
6
+ module Utils
7
+ module BacenId
8
+ def self._create(bank_code)
9
+ random_source = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'.split('')
10
+ random_string = ''
11
+
12
+ 11.times do
13
+ random_string << random_source[rand(random_source.length)]
14
+ end
15
+ bank_code + DateTime.now.strftime('%Y%m%d%H%M') << random_string
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/utils/checks.rb CHANGED
@@ -2,14 +2,13 @@
2
2
 
3
3
  require('date')
4
4
  require('starkbank-ecdsa')
5
- require('starkbank')
6
5
  require_relative('environment')
7
6
 
8
7
  module StarkInfra
9
8
  module Utils
10
9
  class Checks
11
10
  def self.check_user(user)
12
- return user if user.is_a?(StarkBank::User)
11
+ return user if user.is_a?(StarkInfra::User)
13
12
 
14
13
  user = user.nil? ? StarkInfra.user : user
15
14
  raise(ArgumentError, 'A user is required to access our API. Check our README: https://github.com/starkinfra/sdk-ruby/') if user.nil?
@@ -90,7 +89,7 @@ module StarkInfra
90
89
  end
91
90
 
92
91
  begin
93
- return [DateTime.strptime(data, '%Y-%m-%d'), 'date']
92
+ [DateTime.strptime(data, '%Y-%m-%d'), 'date']
94
93
  rescue ArgumentError
95
94
  raise(ArgumentError, 'invalid datetime string ' + data)
96
95
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: false
2
+
3
+ require_relative('bacenid')
4
+
5
+ module StarkInfra
6
+ module EndToEndId
7
+ def self.create(bank_code)
8
+ 'E' << StarkInfra::Utils::BacenId._create(bank_code)
9
+ end
10
+ end
11
+ end
data/lib/utils/parse.rb CHANGED
@@ -5,28 +5,30 @@ require('starkbank-ecdsa')
5
5
  require_relative('api')
6
6
  require_relative('cache')
7
7
  require_relative('request')
8
- require_relative('../error')\
9
-
8
+ require_relative('../error')
10
9
 
11
10
  module StarkInfra
12
11
  module Utils
13
12
  module Parse
14
13
  def self.parse_and_verify(content:, signature:, user: nil, resource:, key: nil)
15
- event = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], JSON.parse(content))
16
- if key != nil
17
- event = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], JSON.parse(content)[key])
18
- end
14
+ json = JSON.parse(content)
15
+ json = JSON.parse(content)[key] unless key.nil?
16
+ event = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], json)
19
17
 
20
18
  begin
21
19
  signature = EllipticCurve::Signature.fromBase64(signature)
22
20
  rescue
23
21
  raise(StarkInfra::Error::InvalidSignatureError, 'The provided signature is not valid')
24
22
  end
25
-
26
- return event if verify_signature(content: content, signature: signature, user: user)
27
-
28
- return event if verify_signature(content: content, signature: signature, user: user, refresh: true)
29
-
23
+
24
+ if verify_signature(content: content, signature: signature, user: user)
25
+ return event
26
+ end
27
+
28
+ if verify_signature(content: content, signature: signature, user: user, refresh: true)
29
+ return event
30
+ end
31
+
30
32
  raise(StarkInfra::Error::InvalidSignatureError, 'The provided signature and content do not match the Stark Infra public key')
31
33
  end
32
34
 
@@ -46,5 +48,3 @@ module StarkInfra
46
48
  end
47
49
  end
48
50
  end
49
-
50
-
data/lib/utils/request.rb CHANGED
@@ -28,7 +28,7 @@ module StarkInfra
28
28
 
29
29
  base_url = {
30
30
  Environment::PRODUCTION => 'https://api.starkinfra.com/',
31
- Environment::SANDBOX => 'https://sandbox.api.starkinfra.com/',
31
+ Environment::SANDBOX => 'https://sandbox.api.starkinfra.com/'
32
32
  }[user.environment] + 'v2'
33
33
 
34
34
  url = "#{base_url}/#{path}#{StarkInfra::Utils::URL.urlencode(query)}"
@@ -61,7 +61,7 @@ module StarkInfra
61
61
  req['Access-Time'] = access_time
62
62
  req['Access-Signature'] = signature
63
63
  req['Content-Type'] = 'application/json'
64
- req['User-Agent'] = "Ruby-#{RUBY_VERSION}-SDK-2.6.0"
64
+ req['User-Agent'] = "Ruby-#{RUBY_VERSION}-SDK-Infra-0.1.0"
65
65
  req['Accept-Language'] = language
66
66
 
67
67
  request = Net::HTTP.start(uri.hostname, use_ssl: true) { |http| http.request(req) }
data/lib/utils/rest.rb CHANGED
@@ -50,26 +50,26 @@ module StarkInfra
50
50
  end
51
51
  end
52
52
 
53
- def self.get_id(resource_name:, resource_maker:, id:, user: nil)
53
+ def self.get_id(resource_name:, resource_maker:, id:, user: nil, **query)
54
54
  json = StarkInfra::Utils::Request.fetch(
55
55
  method: 'GET',
56
56
  path: "#{StarkInfra::Utils::API.endpoint(resource_name)}/#{id}",
57
+ query: query,
57
58
  user: user
58
59
  ).json
59
60
  entity = json[StarkInfra::Utils::API.last_name(resource_name)]
60
61
  StarkInfra::Utils::API.from_api_json(resource_maker, entity)
61
62
  end
62
63
 
63
- def self.get_content(resource_name:, resource_maker:, sub_resource_name:, id:, user: nil, **query)
64
+ def self.get_content(resource_name:, sub_resource_name:, id:, user: nil)
64
65
  StarkInfra::Utils::Request.fetch(
65
66
  method: 'GET',
66
67
  path: "#{StarkInfra::Utils::API.endpoint(resource_name)}/#{id}/#{sub_resource_name}",
67
- query: StarkInfra::Utils::API.cast_json_to_api_format(query),
68
68
  user: user
69
69
  ).content
70
70
  end
71
71
 
72
- def self.post(resource_name:, resource_maker:, entities:, user: nil)
72
+ def self.post(resource_name:, resource_maker:, entities:, user: nil, **query)
73
73
  jsons = []
74
74
  entities.each do |entity|
75
75
  jsons << StarkInfra::Utils::API.api_json(entity)
@@ -79,6 +79,7 @@ module StarkInfra
79
79
  method: 'POST',
80
80
  path: StarkInfra::Utils::API.endpoint(resource_name),
81
81
  payload: payload,
82
+ query: query,
82
83
  user: user
83
84
  ).json
84
85
  returned_jsons = json[StarkInfra::Utils::API.last_name_plural(resource_name)]
@@ -126,7 +127,7 @@ module StarkInfra
126
127
  method: 'GET',
127
128
  path: "#{StarkInfra::Utils::API.endpoint(resource_name)}/#{id}/#{StarkInfra::Utils::API.endpoint(sub_resource_name)}",
128
129
  user: user,
129
- query: StarkInfra::Utils::API.cast_json_to_api_format(query)
130
+ query: query
130
131
  ).json
131
132
  entity = json[StarkInfra::Utils::API.last_name(sub_resource_name)]
132
133
  StarkInfra::Utils::API.from_api_json(sub_resource_maker, entity)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: false
2
+
3
+ require_relative('bacenid')
4
+
5
+ module StarkInfra
6
+ module ReturnId
7
+ def self.create(bank_code)
8
+ 'D' << StarkInfra::Utils::BacenId._create(bank_code)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('../utils/resource')
4
+ require_relative('../utils/rest')
5
+ require_relative('../utils/checks')
6
+
7
+ module StarkInfra
8
+ # # Webhook subscription object
9
+ #
10
+ # A Webhook is used to subscribe to notification events on a user-selected endpoint.
11
+ # Currently available services for subscription are contract, credit-note, signer, issuing-card, issuing-invoice, issuing-purchase, pix-request.in, pix-request.out, pix-reversal.in, pix-reversal.out, pix-claim, pix-key, pix-chargeback, pix-infraction.
12
+ #
13
+ # ## Parameters (required):
14
+ # - url [string]: URL that will be notified when an event occurs.
15
+ # - subscriptions [list of strings]: list of any non-empty combination of the available services. ex: ['contract', 'credit-note', 'signer', 'issuing-card', 'issuing-invoice', 'issuing-purchase', 'pix-request.in', 'pix-request.out', 'pix-reversal.in', 'pix-reversal.out', 'pix-claim', 'pix-key', 'pix-chargeback', 'pix-infraction']
16
+ #
17
+ # ## Attributes:
18
+ # - id [string]: unique id returned when the webhook is created. ex: '5656565656565656'
19
+ class Webhook < StarkInfra::Utils::Resource
20
+ attr_reader :url, :subscriptions, :id
21
+ def initialize(url:, subscriptions:, id: nil)
22
+ super(id)
23
+ @url = url
24
+ @subscriptions = subscriptions
25
+ end
26
+
27
+ # # Create Webhook subscription
28
+ #
29
+ # Send a single Webhook subscription for creation in the Stark Infra API
30
+ #
31
+ # ## Parameters (required):
32
+ # - webhook [Webhook object or hash]: Webhook subscription to be created to receive Events. ex: Webhook.new()
33
+ #
34
+ # ## Parameters (optional):
35
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
36
+ #
37
+ # ## Return:
38
+ # - Webhook object with updated attributes
39
+ def self.create(webhook, user: nil)
40
+ StarkInfra::Utils::Rest.post_single(entity: webhook, user: user, **resource)
41
+ end
42
+
43
+ # # Retrieve a specific Webhook subscription
44
+ #
45
+ # Receive a single Webhook subscription object previously created in the Stark Infra API by passing its id
46
+ #
47
+ # ## Parameters (required):
48
+ # - id [string]: object unique id. ex: '5656565656565656'
49
+ #
50
+ # ## Parameters (optional):
51
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
52
+ #
53
+ # ## Return:
54
+ # - Webhook object with updated attributes
55
+ def self.get(id, user: nil)
56
+ StarkInfra::Utils::Rest.get_id(id: id, user: user, **resource)
57
+ end
58
+
59
+ # # Retrieve Webhook subscriptions
60
+ #
61
+ # Receive a generator of Webhook subscription objects previously created in the Stark Infra API
62
+ #
63
+ # ## Parameters (optional):
64
+ # - limit [integer, default nil]: maximum number of objects to be retrieved. Unlimited if nil. ex: 35
65
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
66
+ #
67
+ # ## Return:
68
+ # - generator of Webhook objects with updated attributes
69
+ def self.query(limit: nil, user: nil)
70
+ StarkInfra::Utils::Rest.get_stream(user: user, limit: limit, **resource)
71
+ end
72
+
73
+ # # Retrieve paged Webhooks
74
+ #
75
+ # Receive a list of up to 100 Webhook objects previously created in the Stark Infra API and the cursor to the next page.
76
+ # Use this function instead of query if you want to manually page your requests.
77
+ #
78
+ # ## Parameters (optional):
79
+ # - cursor [string, default nil]: cursor returned on the previous page function call
80
+ # - limit [integer, default 100]: maximum number of objects to be retrieved. Max = 100. ex: 35
81
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
82
+ #
83
+ # ## Return:
84
+ # - list of Webhook objects with updated attributes
85
+ # - cursor to retrieve the next page of Webhook objects
86
+ def self.page(cursor: nil, limit: nil, user: nil)
87
+ return StarkInfra::Utils::Rest.get_page(
88
+ cursor: cursor,
89
+ limit: limit,
90
+ user: user,
91
+ **resource
92
+ )
93
+ end
94
+
95
+ # # Delete a Webhook entity
96
+ #
97
+ # Delete a Webhook entity previously created in the Stark Infra API
98
+ #
99
+ # ## Parameters (required):
100
+ # - id [string]: Webhook unique id. ex: '5656565656565656'
101
+ #
102
+ # ## Parameters (optional):
103
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
104
+ #
105
+ # ## Return:
106
+ # - deleted Webhook object
107
+ def self.delete(id, user: nil)
108
+ StarkInfra::Utils::Rest.delete_id(id: id, user: user, **resource)
109
+ end
110
+
111
+ def self.resource
112
+ {
113
+ resource_name: 'Webhook',
114
+ resource_maker: proc { |json|
115
+ Webhook.new(
116
+ id: json['id'],
117
+ url: json['url'],
118
+ subscriptions: json['subscriptions']
119
+ )
120
+ }
121
+ }
122
+ end
123
+ end
124
+ end