e-invoice-api 0.10.0 → 0.11.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3d753b6fb343943989aa1e19a1bb7d1cb54f11e8f0cf8441984bec2a267aaa7
4
- data.tar.gz: 0d9992bae7bac869f08b10577d127205283efd678fd79df896999c018a97f77e
3
+ metadata.gz: 13ddd70823e2f224864388289a3822542e2a37fab629216e6c686a68945e63ef
4
+ data.tar.gz: bb989d57ded23fd2c7bad4f673787589f4bce1bfbbca9699eac8469ab51c68b4
5
5
  SHA512:
6
- metadata.gz: dbd994c49b9da3748681b314d3123d7c8a8bbfaec4b10d7f6e6c15a5ca375a2c5168fa16bada94f03ed4b7cf7f3a3655e999d3a05a01ba142415b34da18b030a
7
- data.tar.gz: ddc824da451b4816ba7550f9acd519e0477f8ce05963fbdd6cea34c963f123bbc25046023654ac1f0580f119613b065364b3e8dacb76efadff624dbdf65a9836
6
+ metadata.gz: 3d6c59349252c242c40dcabde2c33f5f794f1b2f4bd4e0db16f5dfd61da4ec81fcfd8c6fae7b9f3b0658325b68dfe276352fac9823a00f868031b5379db0b008
7
+ data.tar.gz: b6f9ebe8ab96d759102014be1bed0a1922a0cbab0a6a7626eee608831dc3b666e74576ab57db262f4d85db78fb890ec68dee026bb2e8328b46f3c81b5bcb2b03
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.0 (2025-11-06)
4
+
5
+ Full Changelog: [v0.10.1...v0.11.0](https://github.com/e-invoice-be/e-invoice-rb/compare/v0.10.1...v0.11.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([13178d0](https://github.com/e-invoice-be/e-invoice-rb/commit/13178d0aaca3ad35381389d0cb44f69207952c8f))
10
+
11
+ ## 0.10.1 (2025-11-05)
12
+
13
+ Full Changelog: [v0.10.0...v0.10.1](https://github.com/e-invoice-be/e-invoice-rb/compare/v0.10.0...v0.10.1)
14
+
15
+ ### Bug Fixes
16
+
17
+ * better thread safety via early initializing SSL store during HTTP client creation ([d085426](https://github.com/e-invoice-be/e-invoice-rb/commit/d08542612d127f1914ed20172441cfe64f4c2ba6))
18
+
19
+
20
+ ### Chores
21
+
22
+ * bump dependency version and update sorbet types ([82b7467](https://github.com/e-invoice-be/e-invoice-rb/commit/82b74674056783e820aad541764b54808c3a80ce))
23
+
3
24
  ## 0.10.0 (2025-10-24)
4
25
 
5
26
  Full Changelog: [v0.9.2...v0.10.0](https://github.com/e-invoice-be/e-invoice-rb/compare/v0.9.2...v0.10.0)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "e-invoice-api", "~> 0.10.0"
20
+ gem "e-invoice-api", "~> 0.11.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -201,7 +201,8 @@ module EInvoiceAPI
201
201
  self.class::PLATFORM_HEADERS,
202
202
  {
203
203
  "accept" => "application/json",
204
- "content-type" => "application/json"
204
+ "content-type" => "application/json",
205
+ "user-agent" => user_agent
205
206
  },
206
207
  headers
207
208
  )
@@ -219,6 +220,11 @@ module EInvoiceAPI
219
220
  # @return [Hash{String=>String}]
220
221
  private def auth_headers = {}
221
222
 
223
+ # @api private
224
+ #
225
+ # @return [String]
226
+ private def user_agent = "#{self.class.name}/Ruby #{EInvoiceAPI::VERSION}"
227
+
222
228
  # @api private
223
229
  #
224
230
  # @return [String]
@@ -16,10 +16,11 @@ module EInvoiceAPI
16
16
  class << self
17
17
  # @api private
18
18
  #
19
+ # @param cert_store [OpenSSL::X509::Store]
19
20
  # @param url [URI::Generic]
20
21
  #
21
22
  # @return [Net::HTTP]
22
- def connect(url)
23
+ def connect(cert_store:, url:)
23
24
  port =
24
25
  case [url.port, url.scheme]
25
26
  in [Integer, _]
@@ -33,6 +34,8 @@ module EInvoiceAPI
33
34
  Net::HTTP.new(url.host, port).tap do
34
35
  _1.use_ssl = %w[https wss].include?(url.scheme)
35
36
  _1.max_retries = 0
37
+
38
+ (_1.cert_store = cert_store) if _1.use_ssl?
36
39
  end
37
40
  end
38
41
 
@@ -102,7 +105,7 @@ module EInvoiceAPI
102
105
  pool =
103
106
  @mutex.synchronize do
104
107
  @pools[origin] ||= ConnectionPool.new(size: @size) do
105
- self.class.connect(url)
108
+ self.class.connect(cert_store: @cert_store, url: url)
106
109
  end
107
110
  end
108
111
 
@@ -192,6 +195,7 @@ module EInvoiceAPI
192
195
  def initialize(size: self.class::DEFAULT_MAX_CONNECTIONS)
193
196
  @mutex = Mutex.new
194
197
  @size = size
198
+ @cert_store = OpenSSL::X509::Store.new.tap(&:set_default_paths)
195
199
  @pools = {}
196
200
  end
197
201
 
@@ -213,8 +213,9 @@ module EInvoiceAPI
213
213
  nil?: true
214
214
 
215
215
  # @!attribute total_discount
216
- # The total financial discount of the invoice (so discounts not subject to VAT).
217
- # Must be positive and rounded to maximum 2 decimals
216
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
217
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
218
+ # Must be rounded to maximum 2 decimals
218
219
  #
219
220
  # @return [Float, String, nil]
220
221
  optional :total_discount, union: -> { EInvoiceAPI::DocumentCreate::TotalDiscount }, nil?: true
@@ -342,7 +343,7 @@ module EInvoiceAPI
342
343
  #
343
344
  # @param tax_details [Array<EInvoiceAPI::Models::DocumentCreate::TaxDetail>, nil]
344
345
  #
345
- # @param total_discount [Float, String, nil] The total financial discount of the invoice (so discounts not subject to VAT). M
346
+ # @param total_discount [Float, String, nil] The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
346
347
  #
347
348
  # @param total_tax [Float, String, nil] The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
348
349
  #
@@ -1185,8 +1186,9 @@ module EInvoiceAPI
1185
1186
  end
1186
1187
  end
1187
1188
 
1188
- # The total financial discount of the invoice (so discounts not subject to VAT).
1189
- # Must be positive and rounded to maximum 2 decimals
1189
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
1190
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
1191
+ # Must be rounded to maximum 2 decimals
1190
1192
  #
1191
1193
  # @see EInvoiceAPI::Models::DocumentCreate#total_discount
1192
1194
  module TotalDiscount
@@ -215,8 +215,9 @@ module EInvoiceAPI
215
215
  nil?: true
216
216
 
217
217
  # @!attribute total_discount
218
- # The total financial discount of the invoice (so discounts not subject to VAT).
219
- # Must be positive and rounded to maximum 2 decimals
218
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
219
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
220
+ # Must be rounded to maximum 2 decimals
220
221
  #
221
222
  # @return [String, nil]
222
223
  optional :total_discount, String, nil?: true
@@ -352,7 +353,7 @@ module EInvoiceAPI
352
353
  #
353
354
  # @param tax_details [Array<EInvoiceAPI::Models::DocumentCreateFromPdfResponse::TaxDetail>, nil]
354
355
  #
355
- # @param total_discount [String, nil] The total financial discount of the invoice (so discounts not subject to VAT). M
356
+ # @param total_discount [String, nil] The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
356
357
  #
357
358
  # @param total_tax [String, nil] The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
358
359
  #
@@ -218,8 +218,9 @@ module EInvoiceAPI
218
218
  nil?: true
219
219
 
220
220
  # @!attribute total_discount
221
- # The total financial discount of the invoice (so discounts not subject to VAT).
222
- # Must be positive and rounded to maximum 2 decimals
221
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
222
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
223
+ # Must be rounded to maximum 2 decimals
223
224
  #
224
225
  # @return [String, nil]
225
226
  optional :total_discount, String, nil?: true
@@ -349,7 +350,7 @@ module EInvoiceAPI
349
350
  #
350
351
  # @param tax_details [Array<EInvoiceAPI::Models::DocumentResponse::TaxDetail>, nil]
351
352
  #
352
- # @param total_discount [String, nil] The total financial discount of the invoice (so discounts not subject to VAT). M
353
+ # @param total_discount [String, nil] The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
353
354
  #
354
355
  # @param total_tax [String, nil] The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
355
356
  #
@@ -90,7 +90,7 @@ module EInvoiceAPI
90
90
  #
91
91
  # @param tax_details [Array<EInvoiceAPI::Models::DocumentCreate::TaxDetail>, nil]
92
92
  #
93
- # @param total_discount [Float, String, nil] The total financial discount of the invoice (so discounts not subject to VAT). M
93
+ # @param total_discount [Float, String, nil] The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
94
94
  #
95
95
  # @param total_tax [Float, String, nil] The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
96
96
  #
@@ -84,7 +84,7 @@ module EInvoiceAPI
84
84
  #
85
85
  # @param tax_details [Array<EInvoiceAPI::Models::DocumentCreate::TaxDetail>, nil]
86
86
  #
87
- # @param total_discount [Float, String, nil] The total financial discount of the invoice (so discounts not subject to VAT). M
87
+ # @param total_discount [Float, String, nil] The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
88
88
  #
89
89
  # @param total_tax [Float, String, nil] The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
90
90
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EInvoiceAPI
4
- VERSION = "0.10.0"
4
+ VERSION = "0.11.0"
5
5
  end
data/lib/e_invoice_api.rb CHANGED
@@ -9,6 +9,7 @@ require "erb"
9
9
  require "etc"
10
10
  require "json"
11
11
  require "net/http"
12
+ require "openssl"
12
13
  require "pathname"
13
14
  require "rbconfig"
14
15
  require "securerandom"
data/manifest.yaml CHANGED
@@ -6,6 +6,7 @@ dependencies:
6
6
  - etc
7
7
  - json
8
8
  - net/http
9
+ - openssl
9
10
  - pathname
10
11
  - rbconfig
11
12
  - securerandom
@@ -180,6 +180,11 @@ module EInvoiceAPI
180
180
  private def auth_headers
181
181
  end
182
182
 
183
+ # @api private
184
+ sig { returns(String) }
185
+ private def user_agent
186
+ end
187
+
183
188
  # @api private
184
189
  sig { returns(String) }
185
190
  private def generate_idempotency_key
@@ -26,8 +26,12 @@ module EInvoiceAPI
26
26
 
27
27
  class << self
28
28
  # @api private
29
- sig { params(url: URI::Generic).returns(Net::HTTP) }
30
- def connect(url)
29
+ sig do
30
+ params(cert_store: OpenSSL::X509::Store, url: URI::Generic).returns(
31
+ Net::HTTP
32
+ )
33
+ end
34
+ def connect(cert_store:, url:)
31
35
  end
32
36
 
33
37
  # @api private
@@ -31,7 +31,7 @@ module EInvoiceAPI
31
31
  #
32
32
  # Assumes superclass fields are totally defined before fields are accessed /
33
33
  # defined on subclasses.
34
- sig { params(child: T.self_type).void }
34
+ sig { params(child: EInvoiceAPI::Internal::Type::BaseModel).void }
35
35
  def inherited(child)
36
36
  end
37
37
 
@@ -276,9 +276,13 @@ module EInvoiceAPI
276
276
 
277
277
  # Create a new instance of a model.
278
278
  sig do
279
- params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(
280
- T.attached_class
281
- )
279
+ params(
280
+ data:
281
+ T.any(
282
+ T::Hash[Symbol, T.anything],
283
+ EInvoiceAPI::Internal::Type::BaseModel
284
+ )
285
+ ).returns(T.attached_class)
282
286
  end
283
287
  def self.new(data = {})
284
288
  end
@@ -171,8 +171,9 @@ module EInvoiceAPI
171
171
  end
172
172
  attr_accessor :tax_details
173
173
 
174
- # The total financial discount of the invoice (so discounts not subject to VAT).
175
- # Must be positive and rounded to maximum 2 decimals
174
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
175
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
176
+ # Must be rounded to maximum 2 decimals
176
177
  sig do
177
178
  returns(T.nilable(EInvoiceAPI::DocumentCreate::TotalDiscount::Variants))
178
179
  end
@@ -320,8 +321,9 @@ module EInvoiceAPI
320
321
  # Tax category code of the invoice
321
322
  tax_code: nil,
322
323
  tax_details: nil,
323
- # The total financial discount of the invoice (so discounts not subject to VAT).
324
- # Must be positive and rounded to maximum 2 decimals
324
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
325
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
326
+ # Must be rounded to maximum 2 decimals
325
327
  total_discount: nil,
326
328
  # The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
327
329
  total_tax: nil,
@@ -1841,8 +1843,9 @@ module EInvoiceAPI
1841
1843
  end
1842
1844
  end
1843
1845
 
1844
- # The total financial discount of the invoice (so discounts not subject to VAT).
1845
- # Must be positive and rounded to maximum 2 decimals
1846
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
1847
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
1848
+ # Must be rounded to maximum 2 decimals
1846
1849
  module TotalDiscount
1847
1850
  extend EInvoiceAPI::Internal::Type::Union
1848
1851
 
@@ -193,8 +193,9 @@ module EInvoiceAPI
193
193
  end
194
194
  attr_accessor :tax_details
195
195
 
196
- # The total financial discount of the invoice (so discounts not subject to VAT).
197
- # Must be positive and rounded to maximum 2 decimals
196
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
197
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
198
+ # Must be rounded to maximum 2 decimals
198
199
  sig { returns(T.nilable(String)) }
199
200
  attr_accessor :total_discount
200
201
 
@@ -355,8 +356,9 @@ module EInvoiceAPI
355
356
  # Tax category code of the invoice
356
357
  tax_code: nil,
357
358
  tax_details: nil,
358
- # The total financial discount of the invoice (so discounts not subject to VAT).
359
- # Must be positive and rounded to maximum 2 decimals
359
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
360
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
361
+ # Must be rounded to maximum 2 decimals
360
362
  total_discount: nil,
361
363
  # The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
362
364
  total_tax: nil,
@@ -164,8 +164,9 @@ module EInvoiceAPI
164
164
  end
165
165
  attr_accessor :tax_details
166
166
 
167
- # The total financial discount of the invoice (so discounts not subject to VAT).
168
- # Must be positive and rounded to maximum 2 decimals
167
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
168
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
169
+ # Must be rounded to maximum 2 decimals
169
170
  sig { returns(T.nilable(String)) }
170
171
  attr_accessor :total_discount
171
172
 
@@ -315,8 +316,9 @@ module EInvoiceAPI
315
316
  # Tax category code of the invoice
316
317
  tax_code: nil,
317
318
  tax_details: nil,
318
- # The total financial discount of the invoice (so discounts not subject to VAT).
319
- # Must be positive and rounded to maximum 2 decimals
319
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
320
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
321
+ # Must be rounded to maximum 2 decimals
320
322
  total_discount: nil,
321
323
  # The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
322
324
  total_tax: nil,
@@ -122,8 +122,9 @@ module EInvoiceAPI
122
122
  # Tax category code of the invoice
123
123
  tax_code: nil,
124
124
  tax_details: nil,
125
- # The total financial discount of the invoice (so discounts not subject to VAT).
126
- # Must be positive and rounded to maximum 2 decimals
125
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
126
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
127
+ # Must be rounded to maximum 2 decimals
127
128
  total_discount: nil,
128
129
  # The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
129
130
  total_tax: nil,
@@ -116,8 +116,9 @@ module EInvoiceAPI
116
116
  # Tax category code of the invoice
117
117
  tax_code: nil,
118
118
  tax_details: nil,
119
- # The total financial discount of the invoice (so discounts not subject to VAT).
120
- # Must be positive and rounded to maximum 2 decimals
119
+ # The net financial discount/charge of the invoice (non-VAT charges minus non-VAT
120
+ # allowances). Can be positive (net charge), negative (net discount), or zero.
121
+ # Must be rounded to maximum 2 decimals
121
122
  total_discount: nil,
122
123
  # The total tax of the invoice. Must be positive and rounded to maximum 2 decimals
123
124
  total_tax: nil,
@@ -87,6 +87,8 @@ module EInvoiceAPI
87
87
 
88
88
  private def auth_headers: -> ::Hash[String, String]
89
89
 
90
+ private def user_agent: -> String
91
+
90
92
  private def generate_idempotency_key: -> String
91
93
 
92
94
  private def build_request: (
@@ -17,7 +17,10 @@ module EInvoiceAPI
17
17
 
18
18
  DEFAULT_MAX_CONNECTIONS: Integer
19
19
 
20
- def self.connect: (URI::Generic url) -> top
20
+ def self.connect: (
21
+ cert_store: OpenSSL::X509::Store,
22
+ url: URI::Generic
23
+ ) -> top
21
24
 
22
25
  def self.calibrate_socket_timeout: (top conn, Float deadline) -> void
23
26
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e-invoice-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - e-invoice
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-30 00:00:00.000000000 Z
11
+ date: 2025-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool