starkinfra 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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