shopify_api 12.4.0 → 13.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/.github/api_update_reminder.md +25 -0
  3. data/.github/api_update_reminder_on_release.md +19 -0
  4. data/.github/workflows/api_update_reminder.yml +16 -0
  5. data/.github/workflows/api_update_reminder_on_release.yml +16 -0
  6. data/.github/workflows/stale.yml +20 -10
  7. data/.rubocop.yml +3 -0
  8. data/CHANGELOG.md +18 -4
  9. data/CONTRIBUTING.md +2 -2
  10. data/Gemfile.lock +7 -7
  11. data/README.md +10 -10
  12. data/docs/getting_started.md +2 -2
  13. data/docs/usage/graphql.md +6 -0
  14. data/docs/usage/graphql_storefront.md +8 -2
  15. data/docs/usage/oauth.md +1 -1
  16. data/docs/usage/rest.md +9 -2
  17. data/docs/usage/webhooks.md +1 -1
  18. data/lib/shopify_api/admin_versions.rb +2 -1
  19. data/lib/shopify_api/auth/oauth.rb +0 -2
  20. data/lib/shopify_api/clients/graphql/admin.rb +3 -3
  21. data/lib/shopify_api/clients/graphql/client.rb +13 -3
  22. data/lib/shopify_api/clients/graphql/storefront.rb +3 -3
  23. data/lib/shopify_api/clients/http_client.rb +21 -10
  24. data/lib/shopify_api/clients/rest/admin.rb +14 -3
  25. data/lib/shopify_api/context.rb +4 -20
  26. data/lib/shopify_api/rest/base.rb +50 -14
  27. data/lib/shopify_api/rest/resources/2022_04/application_charge.rb +6 -1
  28. data/lib/shopify_api/rest/resources/2022_04/application_credit.rb +8 -3
  29. data/lib/shopify_api/rest/resources/2022_04/discount_code.rb +3 -0
  30. data/lib/shopify_api/rest/resources/2022_04/dispute.rb +2 -2
  31. data/lib/shopify_api/rest/resources/2022_04/draft_order.rb +2 -2
  32. data/lib/shopify_api/rest/resources/2022_04/event.rb +2 -2
  33. data/lib/shopify_api/rest/resources/2022_04/fulfillment.rb +6 -0
  34. data/lib/shopify_api/rest/resources/2022_04/gift_card.rb +10 -7
  35. data/lib/shopify_api/rest/resources/2022_04/metafield.rb +2 -2
  36. data/lib/shopify_api/rest/resources/2022_04/order.rb +2 -2
  37. data/lib/shopify_api/rest/resources/2022_04/order_risk.rb +9 -2
  38. data/lib/shopify_api/rest/resources/2022_04/recurring_application_charge.rb +6 -1
  39. data/lib/shopify_api/rest/resources/2022_04/shipping_zone.rb +8 -8
  40. data/lib/shopify_api/rest/resources/2022_04/shop.rb +2 -2
  41. data/lib/shopify_api/rest/resources/2022_04/theme.rb +3 -0
  42. data/lib/shopify_api/rest/resources/2022_04/usage_charge.rb +8 -3
  43. data/lib/shopify_api/rest/resources/2022_07/application_charge.rb +6 -1
  44. data/lib/shopify_api/rest/resources/2022_07/application_credit.rb +8 -3
  45. data/lib/shopify_api/rest/resources/2022_07/carrier_service.rb +3 -0
  46. data/lib/shopify_api/rest/resources/2022_07/discount_code.rb +3 -0
  47. data/lib/shopify_api/rest/resources/2022_07/dispute.rb +2 -2
  48. data/lib/shopify_api/rest/resources/2022_07/draft_order.rb +2 -2
  49. data/lib/shopify_api/rest/resources/2022_07/event.rb +2 -2
  50. data/lib/shopify_api/rest/resources/2022_07/fulfillment.rb +6 -0
  51. data/lib/shopify_api/rest/resources/2022_07/gift_card.rb +10 -7
  52. data/lib/shopify_api/rest/resources/2022_07/metafield.rb +2 -2
  53. data/lib/shopify_api/rest/resources/2022_07/order.rb +2 -2
  54. data/lib/shopify_api/rest/resources/2022_07/order_risk.rb +9 -2
  55. data/lib/shopify_api/rest/resources/2022_07/recurring_application_charge.rb +6 -1
  56. data/lib/shopify_api/rest/resources/2022_07/shipping_zone.rb +8 -8
  57. data/lib/shopify_api/rest/resources/2022_07/shop.rb +2 -2
  58. data/lib/shopify_api/rest/resources/2022_07/theme.rb +3 -0
  59. data/lib/shopify_api/rest/resources/2022_07/usage_charge.rb +8 -3
  60. data/lib/shopify_api/rest/resources/2022_10/application_charge.rb +6 -1
  61. data/lib/shopify_api/rest/resources/2022_10/application_credit.rb +8 -3
  62. data/lib/shopify_api/rest/resources/2022_10/carrier_service.rb +3 -0
  63. data/lib/shopify_api/rest/resources/2022_10/discount_code.rb +3 -0
  64. data/lib/shopify_api/rest/resources/2022_10/dispute.rb +2 -2
  65. data/lib/shopify_api/rest/resources/2022_10/draft_order.rb +2 -2
  66. data/lib/shopify_api/rest/resources/2022_10/event.rb +2 -2
  67. data/lib/shopify_api/rest/resources/2022_10/fulfillment.rb +6 -0
  68. data/lib/shopify_api/rest/resources/2022_10/gift_card.rb +10 -7
  69. data/lib/shopify_api/rest/resources/2022_10/metafield.rb +2 -2
  70. data/lib/shopify_api/rest/resources/2022_10/order.rb +2 -2
  71. data/lib/shopify_api/rest/resources/2022_10/order_risk.rb +9 -2
  72. data/lib/shopify_api/rest/resources/2022_10/recurring_application_charge.rb +6 -1
  73. data/lib/shopify_api/rest/resources/2022_10/shipping_zone.rb +8 -8
  74. data/lib/shopify_api/rest/resources/2022_10/shop.rb +2 -2
  75. data/lib/shopify_api/rest/resources/2022_10/theme.rb +3 -0
  76. data/lib/shopify_api/rest/resources/2022_10/usage_charge.rb +8 -3
  77. data/lib/shopify_api/rest/resources/2023_01/application_charge.rb +6 -1
  78. data/lib/shopify_api/rest/resources/2023_01/application_credit.rb +8 -3
  79. data/lib/shopify_api/rest/resources/2023_01/carrier_service.rb +3 -0
  80. data/lib/shopify_api/rest/resources/2023_01/discount_code.rb +3 -0
  81. data/lib/shopify_api/rest/resources/2023_01/dispute.rb +2 -2
  82. data/lib/shopify_api/rest/resources/2023_01/dispute_evidence.rb +117 -0
  83. data/lib/shopify_api/rest/resources/{2022_01/android_pay_key.rb → 2023_01/dispute_file_upload.rb} +29 -25
  84. data/lib/shopify_api/rest/resources/2023_01/draft_order.rb +2 -2
  85. data/lib/shopify_api/rest/resources/2023_01/event.rb +2 -2
  86. data/lib/shopify_api/rest/resources/2023_01/fulfillment.rb +6 -0
  87. data/lib/shopify_api/rest/resources/2023_01/gift_card.rb +10 -7
  88. data/lib/shopify_api/rest/resources/2023_01/metafield.rb +2 -2
  89. data/lib/shopify_api/rest/resources/2023_01/order.rb +2 -2
  90. data/lib/shopify_api/rest/resources/2023_01/order_risk.rb +9 -2
  91. data/lib/shopify_api/rest/resources/2023_01/recurring_application_charge.rb +6 -1
  92. data/lib/shopify_api/rest/resources/2023_01/shipping_zone.rb +8 -8
  93. data/lib/shopify_api/rest/resources/2023_01/shop.rb +2 -2
  94. data/lib/shopify_api/rest/resources/2023_01/theme.rb +3 -0
  95. data/lib/shopify_api/rest/resources/2023_01/usage_charge.rb +8 -3
  96. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/application_charge.rb +6 -1
  97. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/application_credit.rb +8 -3
  98. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/customer.rb +3 -0
  99. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/discount_code.rb +3 -0
  100. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/dispute.rb +2 -2
  101. data/lib/shopify_api/rest/resources/2023_04/dispute_evidence.rb +117 -0
  102. data/lib/shopify_api/rest/resources/2023_04/dispute_file_upload.rb +81 -0
  103. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/draft_order.rb +2 -2
  104. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/event.rb +2 -2
  105. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/fulfillment.rb +8 -49
  106. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/fulfillment_order.rb +39 -8
  107. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/fulfillment_service.rb +3 -3
  108. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/gift_card.rb +10 -7
  109. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/metafield.rb +8 -13
  110. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/order.rb +14 -2
  111. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/order_risk.rb +9 -2
  112. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/price_rule.rb +3 -3
  113. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/recurring_application_charge.rb +6 -1
  114. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/shipping_zone.rb +8 -8
  115. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/shop.rb +5 -2
  116. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/theme.rb +3 -0
  117. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/transaction.rb +3 -0
  118. data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/usage_charge.rb +8 -3
  119. data/lib/shopify_api/utils/graphql_proxy.rb +3 -6
  120. data/lib/shopify_api/utils/session_utils.rb +0 -84
  121. data/lib/shopify_api/version.rb +1 -1
  122. data/lib/shopify_api/webhooks/registry.rb +1 -1
  123. data/shopify_api.gemspec +1 -1
  124. metadata +85 -80
  125. data/lib/shopify_api/auth/file_session_storage.rb +0 -72
  126. data/lib/shopify_api/auth/session_storage.rb +0 -30
  127. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/abandoned_checkout.rb +0 -0
  128. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/access_scope.rb +0 -0
  129. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/apple_pay_certificate.rb +0 -0
  130. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/article.rb +0 -0
  131. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/asset.rb +0 -0
  132. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/assigned_fulfillment_order.rb +0 -0
  133. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/balance.rb +0 -0
  134. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/blog.rb +0 -0
  135. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/cancellation_request.rb +0 -0
  136. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/carrier_service.rb +0 -0
  137. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/checkout.rb +0 -0
  138. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/collect.rb +0 -0
  139. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/collection.rb +0 -0
  140. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/collection_listing.rb +0 -0
  141. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/comment.rb +0 -0
  142. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/country.rb +0 -0
  143. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/currency.rb +0 -0
  144. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/custom_collection.rb +0 -0
  145. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/customer_address.rb +0 -0
  146. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/customer_saved_search.rb +0 -0
  147. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/deprecated_api_call.rb +0 -0
  148. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/fulfillment_event.rb +0 -0
  149. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/fulfillment_request.rb +0 -0
  150. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/gift_card_adjustment.rb +0 -0
  151. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/image.rb +0 -0
  152. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/inventory_item.rb +0 -0
  153. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/inventory_level.rb +0 -0
  154. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/location.rb +0 -0
  155. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/locations_for_move.rb +0 -0
  156. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/marketing_event.rb +0 -0
  157. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/mobile_platform_application.rb +0 -0
  158. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/page.rb +0 -0
  159. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/payment.rb +0 -0
  160. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/payment_gateway.rb +0 -0
  161. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/payment_transaction.rb +0 -0
  162. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/payout.rb +0 -0
  163. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/policy.rb +0 -0
  164. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/product.rb +0 -0
  165. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/product_listing.rb +0 -0
  166. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/product_resource_feedback.rb +0 -0
  167. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/province.rb +0 -0
  168. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/redirect.rb +0 -0
  169. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/refund.rb +0 -0
  170. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/report.rb +0 -0
  171. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/resource_feedback.rb +0 -0
  172. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/script_tag.rb +0 -0
  173. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/smart_collection.rb +0 -0
  174. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/storefront_access_token.rb +0 -0
  175. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/tender_transaction.rb +0 -0
  176. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/user.rb +0 -0
  177. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/variant.rb +0 -0
  178. /data/lib/shopify_api/rest/resources/{2022_01 → 2023_04}/webhook.rb +0 -0
@@ -15,8 +15,7 @@ module ShopifyAPI
15
15
  @logger = T.let(::Logger.new($stdout), ::Logger)
16
16
  @log_level = T.let(:info, Symbol)
17
17
  @notified_missing_resources_folder = T.let({}, T::Hash[String, T::Boolean])
18
- @active_session = T.let(Concurrent::ThreadLocalVar.new { nil }, Concurrent::ThreadLocalVar)
19
- @session_storage = T.let(nil, T.nilable(ShopifyAPI::Auth::SessionStorage))
18
+ @active_session = T.let(Concurrent::ThreadLocalVar.new { nil }, T.nilable(Concurrent::ThreadLocalVar))
20
19
  @user_agent_prefix = T.let(nil, T.nilable(String))
21
20
  @old_api_secret_key = T.let(nil, T.nilable(String))
22
21
 
@@ -35,7 +34,6 @@ module ShopifyAPI
35
34
  is_embedded: T::Boolean,
36
35
  log_level: T.any(String, Symbol),
37
36
  logger: ::Logger,
38
- session_storage: T.nilable(ShopifyAPI::Auth::SessionStorage),
39
37
  host_name: T.nilable(String),
40
38
  host: T.nilable(String),
41
39
  private_shop: T.nilable(String),
@@ -52,7 +50,6 @@ module ShopifyAPI
52
50
  is_embedded:,
53
51
  log_level: :info,
54
52
  logger: ::Logger.new($stdout),
55
- session_storage: nil,
56
53
  host_name: nil,
57
54
  host: ENV["HOST"] || "https://#{host_name}",
58
55
  private_shop: nil,
@@ -71,7 +68,6 @@ module ShopifyAPI
71
68
  @is_private = is_private
72
69
  @scope = Auth::AuthScopes.new(scope)
73
70
  @is_embedded = is_embedded
74
- @session_storage = session_storage
75
71
  @logger = logger
76
72
  @private_shop = private_shop
77
73
  @user_agent_prefix = user_agent_prefix
@@ -82,13 +78,6 @@ module ShopifyAPI
82
78
  :info
83
79
  end
84
80
 
85
- if @session_storage
86
- ::ShopifyAPI::Logger.deprecated("The use of SessionStorage in the API library has been deprecated. " \
87
- "The ShopifyAPI will no longer have responsibility for session persistence. " \
88
- "Upgrading to `shopify_app` 21.3 will allow you to remove session_storage" \
89
- " from the API library Context configuration.", "13.0.0")
90
- end
91
-
92
81
  load_rest_resources(api_version: api_version)
93
82
  end
94
83
 
@@ -126,9 +115,6 @@ module ShopifyAPI
126
115
  sig { returns(Auth::AuthScopes) }
127
116
  attr_reader :scope
128
117
 
129
- sig { returns(T.nilable(ShopifyAPI::Auth::SessionStorage)) }
130
- attr_reader :session_storage
131
-
132
118
  sig { returns(::Logger) }
133
119
  attr_reader :logger
134
120
 
@@ -155,19 +141,17 @@ module ShopifyAPI
155
141
 
156
142
  sig { returns(T.nilable(Auth::Session)) }
157
143
  def active_session
158
- return @active_session.value unless @active_session.value.nil?
159
-
160
- private? ? Utils::SessionUtils.load_current_session : nil
144
+ @active_session&.value
161
145
  end
162
146
 
163
147
  sig { params(session: T.nilable(Auth::Session)).void }
164
148
  def activate_session(session)
165
- @active_session.value = session
149
+ T.must(@active_session).value = session
166
150
  end
167
151
 
168
152
  sig { void }
169
153
  def deactivate_session
170
- @active_session.value = nil
154
+ T.must(@active_session).value = nil
171
155
  end
172
156
 
173
157
  sig { returns(String) }
@@ -21,7 +21,7 @@ module ShopifyAPI
21
21
  sig { returns(T::Hash[Symbol, T.untyped]) }
22
22
  attr_accessor :original_state
23
23
 
24
- sig { returns(Rest::BaseErrors) }
24
+ sig { returns(T.any(Rest::BaseErrors, T.nilable(T::Hash[T.untyped, T.untyped]))) }
25
25
  attr_reader :errors
26
26
 
27
27
  sig do
@@ -234,14 +234,20 @@ module ShopifyAPI
234
234
  attr_sym = attribute.to_sym
235
235
 
236
236
  if has_many?(attr_sym) && value
237
+ instance.original_state[attr_sym] = []
237
238
  attr_list = []
238
239
  value.each do |element|
239
- attr_list << T.unsafe(@has_many[attr_sym]).create_instance(data: element, session: session)
240
+ child = T.unsafe(@has_many[attr_sym]).create_instance(data: element, session: session)
241
+ attr_list << child
242
+ instance.original_state[attr_sym] << child.to_hash(true)
240
243
  end
241
244
  instance.public_send("#{attribute}=", attr_list)
242
245
  elsif has_one?(attr_sym) && value
243
- instance.public_send("#{attribute}=",
244
- T.unsafe(@has_one[attr_sym]).create_instance(data: value, session: session))
246
+ # force a hash if core returns values that instantiate objects like "USD"
247
+ data_hash = value.is_a?(Hash) ? value : { attribute.to_s => value }
248
+ child = T.unsafe(@has_one[attr_sym]).create_instance(data: data_hash, session: session)
249
+ instance.public_send("#{attribute}=", child)
250
+ instance.original_state[attr_sym] = child.to_hash(true)
245
251
  else
246
252
  instance.public_send("#{attribute}=", value)
247
253
  instance.original_state[attr_sym] = value
@@ -333,16 +339,12 @@ module ShopifyAPI
333
339
 
334
340
  sig { params(update_object: T::Boolean).void }
335
341
  def save(update_object: false)
336
- hash = HashDiff::Comparison.new(original_state, to_hash(true)).left_diff
337
- method = hash[self.class.primary_key] ? :put : :post
338
-
339
- path = self.class.get_path(http_method: method, operation: method, entity: self)
340
- if path.nil?
341
- method = method == :post ? :put : :post
342
- path = self.class.get_path(http_method: method, operation: method, entity: self)
343
- end
344
-
345
- response = @client.public_send(method, body: { self.class.json_body_name => hash }, path: path)
342
+ method = deduce_write_verb
343
+ response = @client.public_send(
344
+ method,
345
+ body: { self.class.json_body_name => attributes_to_update },
346
+ path: deduce_write_path(method),
347
+ )
346
348
 
347
349
  if update_object
348
350
  self.class.create_instance(
@@ -357,6 +359,40 @@ module ShopifyAPI
357
359
 
358
360
  private
359
361
 
362
+ sig { returns(T::Hash[String, String]) }
363
+ def attributes_to_update
364
+ HashDiff::Comparison.new(
365
+ deep_stringify_keys(original_state),
366
+ deep_stringify_keys(to_hash(true)),
367
+ ).left_diff
368
+ end
369
+
370
+ sig { returns(Symbol) }
371
+ def deduce_write_verb
372
+ send(self.class.primary_key) ? :put : :post
373
+ end
374
+
375
+ sig { params(method: Symbol).returns(T.nilable(String)) }
376
+ def deduce_write_path(method)
377
+ path = self.class.get_path(http_method: method, operation: method, entity: self)
378
+
379
+ if path.nil?
380
+ method = method == :post ? :put : :post
381
+ path = self.class.get_path(http_method: method, operation: method, entity: self)
382
+ end
383
+
384
+ path
385
+ end
386
+
387
+ sig { params(hash: T::Hash[T.any(String, Symbol), T.untyped]).returns(T::Hash[String, String]) }
388
+ def deep_stringify_keys(hash)
389
+ hash.each_with_object({}) do |(key, value), result|
390
+ new_key = key.to_s
391
+ new_value = value.is_a?(Hash) ? deep_stringify_keys(value) : value
392
+ result[new_key] = new_value
393
+ end
394
+ end
395
+
360
396
  sig { params(key: T.any(String, Symbol), val: T.untyped).void }
361
397
  def set_property(key, val)
362
398
  # Some API fields contain invalid characters, like `?`, which causes issues when setting them as instance
@@ -18,6 +18,7 @@ module ShopifyAPI
18
18
 
19
19
  @confirmation_url = T.let(nil, T.nilable(String))
20
20
  @created_at = T.let(nil, T.nilable(String))
21
+ @currency = T.let(nil, T.nilable(Currency))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
23
  @name = T.let(nil, T.nilable(String))
23
24
  @price = T.let(nil, T.nilable(T.any(String, Float)))
@@ -27,7 +28,9 @@ module ShopifyAPI
27
28
  @updated_at = T.let(nil, T.nilable(String))
28
29
  end
29
30
 
30
- @has_one = T.let({}, T::Hash[Symbol, Class])
31
+ @has_one = T.let({
32
+ currency: Currency
33
+ }, T::Hash[Symbol, Class])
31
34
  @has_many = T.let({}, T::Hash[Symbol, Class])
32
35
  @paths = T.let([
33
36
  {http_method: :get, operation: :get, ids: [], path: "application_charges.json"},
@@ -39,6 +42,8 @@ module ShopifyAPI
39
42
  attr_reader :confirmation_url
40
43
  sig { returns(T.nilable(String)) }
41
44
  attr_reader :created_at
45
+ sig { returns(T.nilable(Currency)) }
46
+ attr_reader :currency
42
47
  sig { returns(T.nilable(Integer)) }
43
48
  attr_reader :id
44
49
  sig { returns(T.nilable(String)) }
@@ -16,13 +16,16 @@ module ShopifyAPI
16
16
  def initialize(session: ShopifyAPI::Context.active_session)
17
17
  super(session: session)
18
18
 
19
- @amount = T.let(nil, T.nilable(Integer))
19
+ @amount = T.let(nil, T.nilable(String))
20
+ @currency = T.let(nil, T.nilable(Currency))
20
21
  @description = T.let(nil, T.nilable(String))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
23
  @test = T.let(nil, T.nilable(T::Boolean))
23
24
  end
24
25
 
25
- @has_one = T.let({}, T::Hash[Symbol, Class])
26
+ @has_one = T.let({
27
+ currency: Currency
28
+ }, T::Hash[Symbol, Class])
26
29
  @has_many = T.let({}, T::Hash[Symbol, Class])
27
30
  @paths = T.let([
28
31
  {http_method: :get, operation: :get, ids: [], path: "application_credits.json"},
@@ -30,8 +33,10 @@ module ShopifyAPI
30
33
  {http_method: :post, operation: :post, ids: [], path: "application_credits.json"}
31
34
  ], T::Array[T::Hash[String, T.any(T::Array[Symbol], String, Symbol)]])
32
35
 
33
- sig { returns(T.nilable(Integer)) }
36
+ sig { returns(T.nilable(String)) }
34
37
  attr_reader :amount
38
+ sig { returns(T.nilable(Currency)) }
39
+ attr_reader :currency
35
40
  sig { returns(T.nilable(String)) }
36
41
  attr_reader :description
37
42
  sig { returns(T.nilable(Integer)) }
@@ -18,6 +18,7 @@ module ShopifyAPI
18
18
 
19
19
  @code = T.let(nil, T.nilable(String))
20
20
  @created_at = T.let(nil, T.nilable(String))
21
+ @errors = T.let(nil, T.nilable(T::Hash[T.untyped, T.untyped]))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
23
  @price_rule_id = T.let(nil, T.nilable(Integer))
23
24
  @updated_at = T.let(nil, T.nilable(String))
@@ -43,6 +44,8 @@ module ShopifyAPI
43
44
  attr_reader :code
44
45
  sig { returns(T.nilable(String)) }
45
46
  attr_reader :created_at
47
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
48
+ attr_reader :errors
46
49
  sig { returns(T.nilable(Integer)) }
47
50
  attr_reader :id
48
51
  sig { returns(T.nilable(Integer)) }
@@ -22,7 +22,7 @@ module ShopifyAPI
22
22
  @evidence_sent_on = T.let(nil, T.nilable(String))
23
23
  @finalized_on = T.let(nil, T.nilable(String))
24
24
  @id = T.let(nil, T.nilable(Integer))
25
- @network_reason_code = T.let(nil, T.nilable(Integer))
25
+ @network_reason_code = T.let(nil, T.nilable(String))
26
26
  @order_id = T.let(nil, T.nilable(Integer))
27
27
  @reason = T.let(nil, T.nilable(String))
28
28
  @status = T.let(nil, T.nilable(String))
@@ -48,7 +48,7 @@ module ShopifyAPI
48
48
  attr_reader :finalized_on
49
49
  sig { returns(T.nilable(Integer)) }
50
50
  attr_reader :id
51
- sig { returns(T.nilable(Integer)) }
51
+ sig { returns(T.nilable(String)) }
52
52
  attr_reader :network_reason_code
53
53
  sig { returns(T.nilable(Integer)) }
54
54
  attr_reader :order_id
@@ -36,7 +36,7 @@ module ShopifyAPI
36
36
  @shipping_line = T.let(nil, T.nilable(T::Hash[T.untyped, T.untyped]))
37
37
  @source_name = T.let(nil, T.nilable(String))
38
38
  @status = T.let(nil, T.nilable(String))
39
- @subtotal_price = T.let(nil, T.nilable(Float))
39
+ @subtotal_price = T.let(nil, T.nilable(String))
40
40
  @tags = T.let(nil, T.nilable(String))
41
41
  @tax_exempt = T.let(nil, T.nilable(T::Boolean))
42
42
  @tax_exemptions = T.let(nil, T.nilable(T::Array[T.untyped]))
@@ -102,7 +102,7 @@ module ShopifyAPI
102
102
  attr_reader :source_name
103
103
  sig { returns(T.nilable(String)) }
104
104
  attr_reader :status
105
- sig { returns(T.nilable(Float)) }
105
+ sig { returns(T.nilable(String)) }
106
106
  attr_reader :subtotal_price
107
107
  sig { returns(T.nilable(String)) }
108
108
  attr_reader :tags
@@ -16,7 +16,7 @@ module ShopifyAPI
16
16
  def initialize(session: ShopifyAPI::Context.active_session)
17
17
  super(session: session)
18
18
 
19
- @arguments = T.let(nil, T.nilable(String))
19
+ @arguments = T.let(nil, T.nilable(T::Array[T.untyped]))
20
20
  @body = T.let(nil, T.nilable(String))
21
21
  @created_at = T.let(nil, T.nilable(String))
22
22
  @description = T.let(nil, T.nilable(String))
@@ -38,7 +38,7 @@ module ShopifyAPI
38
38
  {http_method: :get, operation: :get, ids: [:product_id], path: "products/<product_id>/events.json"}
39
39
  ], T::Array[T::Hash[String, T.any(T::Array[Symbol], String, Symbol)]])
40
40
 
41
- sig { returns(T.nilable(String)) }
41
+ sig { returns(T.nilable(T::Array[String])) }
42
42
  attr_reader :arguments
43
43
  sig { returns(T.nilable(String)) }
44
44
  attr_reader :body
@@ -29,7 +29,9 @@ module ShopifyAPI
29
29
  @shipment_status = T.let(nil, T.nilable(String))
30
30
  @status = T.let(nil, T.nilable(String))
31
31
  @tracking_company = T.let(nil, T.nilable(String))
32
+ @tracking_number = T.let(nil, T.nilable(String))
32
33
  @tracking_numbers = T.let(nil, T.nilable(T::Array[T.untyped]))
34
+ @tracking_url = T.let(nil, T.nilable(String))
33
35
  @tracking_urls = T.let(nil, T.nilable(T::Array[T.untyped]))
34
36
  @updated_at = T.let(nil, T.nilable(String))
35
37
  @variant_inventory_management = T.let(nil, T.nilable(String))
@@ -78,8 +80,12 @@ module ShopifyAPI
78
80
  attr_reader :status
79
81
  sig { returns(T.nilable(String)) }
80
82
  attr_reader :tracking_company
83
+ sig { returns(T.nilable(String)) }
84
+ attr_reader :tracking_number
81
85
  sig { returns(T.nilable(T::Array[String])) }
82
86
  attr_reader :tracking_numbers
87
+ sig { returns(T.nilable(String)) }
88
+ attr_reader :tracking_url
83
89
  sig { returns(T.nilable(T::Array[String])) }
84
90
  attr_reader :tracking_urls
85
91
  sig { returns(T.nilable(String)) }
@@ -17,15 +17,15 @@ module ShopifyAPI
17
17
  super(session: session)
18
18
 
19
19
  @api_client_id = T.let(nil, T.nilable(Integer))
20
- @balance = T.let(nil, T.nilable(Float))
20
+ @balance = T.let(nil, T.nilable(Balance))
21
21
  @code = T.let(nil, T.nilable(String))
22
22
  @created_at = T.let(nil, T.nilable(String))
23
- @currency = T.let(nil, T.nilable(String))
23
+ @currency = T.let(nil, T.nilable(Currency))
24
24
  @customer_id = T.let(nil, T.nilable(Integer))
25
25
  @disabled_at = T.let(nil, T.nilable(String))
26
26
  @expires_on = T.let(nil, T.nilable(String))
27
27
  @id = T.let(nil, T.nilable(Integer))
28
- @initial_value = T.let(nil, T.nilable(Float))
28
+ @initial_value = T.let(nil, T.nilable(String))
29
29
  @last_characters = T.let(nil, T.nilable(String))
30
30
  @line_item_id = T.let(nil, T.nilable(Integer))
31
31
  @note = T.let(nil, T.nilable(String))
@@ -35,7 +35,10 @@ module ShopifyAPI
35
35
  @user_id = T.let(nil, T.nilable(Integer))
36
36
  end
37
37
 
38
- @has_one = T.let({}, T::Hash[Symbol, Class])
38
+ @has_one = T.let({
39
+ balance: Balance,
40
+ currency: Currency
41
+ }, T::Hash[Symbol, Class])
39
42
  @has_many = T.let({}, T::Hash[Symbol, Class])
40
43
  @paths = T.let([
41
44
  {http_method: :get, operation: :count, ids: [], path: "gift_cards/count.json"},
@@ -49,13 +52,13 @@ module ShopifyAPI
49
52
 
50
53
  sig { returns(T.nilable(Integer)) }
51
54
  attr_reader :api_client_id
52
- sig { returns(T.nilable(Float)) }
55
+ sig { returns(T.nilable(Balance)) }
53
56
  attr_reader :balance
54
57
  sig { returns(T.nilable(String)) }
55
58
  attr_reader :code
56
59
  sig { returns(T.nilable(String)) }
57
60
  attr_reader :created_at
58
- sig { returns(T.nilable(String)) }
61
+ sig { returns(T.nilable(Currency)) }
59
62
  attr_reader :currency
60
63
  sig { returns(T.nilable(Integer)) }
61
64
  attr_reader :customer_id
@@ -65,7 +68,7 @@ module ShopifyAPI
65
68
  attr_reader :expires_on
66
69
  sig { returns(T.nilable(Integer)) }
67
70
  attr_reader :id
68
- sig { returns(T.nilable(Float)) }
71
+ sig { returns(T.nilable(String)) }
69
72
  attr_reader :initial_value
70
73
  sig { returns(T.nilable(String)) }
71
74
  attr_reader :last_characters
@@ -18,7 +18,7 @@ module ShopifyAPI
18
18
 
19
19
  @key = T.let(nil, T.nilable(String))
20
20
  @namespace = T.let(nil, T.nilable(String))
21
- @value = T.let(nil, T.nilable(T.any(String, Integer, Float)))
21
+ @value = T.let(nil, T.nilable(T.any(String, Integer, Float, T::Boolean, String)))
22
22
  @article_id = T.let(nil, T.nilable(Integer))
23
23
  @blog_id = T.let(nil, T.nilable(Integer))
24
24
  @collection_id = T.let(nil, T.nilable(Integer))
@@ -119,7 +119,7 @@ module ShopifyAPI
119
119
  attr_reader :key
120
120
  sig { returns(T.nilable(String)) }
121
121
  attr_reader :namespace
122
- sig { returns(T.nilable(T.any(String, Integer, Float))) }
122
+ sig { returns(T.nilable(T.any(String, Integer, Float, T::Boolean, String))) }
123
123
  attr_reader :value
124
124
  sig { returns(T.nilable(Integer)) }
125
125
  attr_reader :article_id
@@ -72,7 +72,7 @@ module ShopifyAPI
72
72
  @source_identifier = T.let(nil, T.nilable(String))
73
73
  @source_name = T.let(nil, T.nilable(String))
74
74
  @source_url = T.let(nil, T.nilable(String))
75
- @subtotal_price = T.let(nil, T.nilable(Float))
75
+ @subtotal_price = T.let(nil, T.nilable(String))
76
76
  @subtotal_price_set = T.let(nil, T.nilable(T::Hash[T.untyped, T.untyped]))
77
77
  @tags = T.let(nil, T.nilable(String))
78
78
  @tax_lines = T.let(nil, T.nilable(T::Array[T.untyped]))
@@ -227,7 +227,7 @@ module ShopifyAPI
227
227
  attr_reader :source_name
228
228
  sig { returns(T.nilable(String)) }
229
229
  attr_reader :source_url
230
- sig { returns(T.nilable(Float)) }
230
+ sig { returns(T.nilable(String)) }
231
231
  attr_reader :subtotal_price
232
232
  sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
233
233
  attr_reader :subtotal_price_set
@@ -24,7 +24,7 @@ module ShopifyAPI
24
24
  @message = T.let(nil, T.nilable(String))
25
25
  @order_id = T.let(nil, T.nilable(Integer))
26
26
  @recommendation = T.let(nil, T.nilable(String))
27
- @score = T.let(nil, T.nilable(Float))
27
+ @score = T.let(nil, T.nilable(String))
28
28
  @source = T.let(nil, T.nilable(String))
29
29
  end
30
30
 
@@ -54,7 +54,7 @@ module ShopifyAPI
54
54
  attr_reader :order_id
55
55
  sig { returns(T.nilable(String)) }
56
56
  attr_reader :recommendation
57
- sig { returns(T.nilable(Float)) }
57
+ sig { returns(T.nilable(String)) }
58
58
  attr_reader :score
59
59
  sig { returns(T.nilable(String)) }
60
60
  attr_reader :source
@@ -67,6 +67,13 @@ module ShopifyAPI
67
67
  "risk"
68
68
  end
69
69
 
70
+ sig do
71
+ returns(String)
72
+ end
73
+ def json_response_body_name()
74
+ "risk"
75
+ end
76
+
70
77
  sig do
71
78
  params(
72
79
  id: T.any(Integer, String),
@@ -22,6 +22,7 @@ module ShopifyAPI
22
22
  @capped_amount = T.let(nil, T.nilable(T.any(String, Integer)))
23
23
  @confirmation_url = T.let(nil, T.nilable(String))
24
24
  @created_at = T.let(nil, T.nilable(String))
25
+ @currency = T.let(nil, T.nilable(Currency))
25
26
  @id = T.let(nil, T.nilable(Integer))
26
27
  @name = T.let(nil, T.nilable(String))
27
28
  @price = T.let(nil, T.nilable(T.any(String, Float)))
@@ -34,7 +35,9 @@ module ShopifyAPI
34
35
  @updated_at = T.let(nil, T.nilable(String))
35
36
  end
36
37
 
37
- @has_one = T.let({}, T::Hash[Symbol, Class])
38
+ @has_one = T.let({
39
+ currency: Currency
40
+ }, T::Hash[Symbol, Class])
38
41
  @has_many = T.let({}, T::Hash[Symbol, Class])
39
42
  @paths = T.let([
40
43
  {http_method: :delete, operation: :delete, ids: [:id], path: "recurring_application_charges/<id>.json"},
@@ -56,6 +59,8 @@ module ShopifyAPI
56
59
  attr_reader :confirmation_url
57
60
  sig { returns(T.nilable(String)) }
58
61
  attr_reader :created_at
62
+ sig { returns(T.nilable(Currency)) }
63
+ attr_reader :currency
59
64
  sig { returns(T.nilable(Integer)) }
60
65
  attr_reader :id
61
66
  sig { returns(T.nilable(String)) }
@@ -19,12 +19,12 @@ module ShopifyAPI
19
19
  @carrier_shipping_rate_providers = T.let(nil, T.untyped)
20
20
  @countries = T.let(nil, T.nilable(T::Array[T.untyped]))
21
21
  @id = T.let(nil, T.nilable(Integer))
22
- @location_group_id = T.let(nil, T.nilable(Integer))
22
+ @location_group_id = T.let(nil, T.nilable(String))
23
23
  @name = T.let(nil, T.nilable(String))
24
- @price_based_shipping_rates = T.let(nil, T.nilable(T::Hash[T.untyped, T.untyped]))
25
- @profile_id = T.let(nil, T.nilable(Integer))
24
+ @price_based_shipping_rates = T.let(nil, T.nilable(T::Array[T.untyped]))
25
+ @profile_id = T.let(nil, T.nilable(String))
26
26
  @provinces = T.let(nil, T.nilable(T::Array[T.untyped]))
27
- @weight_based_shipping_rates = T.let(nil, T.nilable(T::Hash[T.untyped, T.untyped]))
27
+ @weight_based_shipping_rates = T.let(nil, T.nilable(T::Array[T.untyped]))
28
28
  end
29
29
 
30
30
  @has_one = T.let({}, T::Hash[Symbol, Class])
@@ -42,17 +42,17 @@ module ShopifyAPI
42
42
  attr_reader :countries
43
43
  sig { returns(T.nilable(Integer)) }
44
44
  attr_reader :id
45
- sig { returns(T.nilable(Integer)) }
45
+ sig { returns(T.nilable(String)) }
46
46
  attr_reader :location_group_id
47
47
  sig { returns(T.nilable(String)) }
48
48
  attr_reader :name
49
- sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
49
+ sig { returns(T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])) }
50
50
  attr_reader :price_based_shipping_rates
51
- sig { returns(T.nilable(Integer)) }
51
+ sig { returns(T.nilable(String)) }
52
52
  attr_reader :profile_id
53
53
  sig { returns(T.nilable(T::Array[Province])) }
54
54
  attr_reader :provinces
55
- sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
55
+ sig { returns(T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])) }
56
56
  attr_reader :weight_based_shipping_rates
57
57
 
58
58
  class << self
@@ -24,7 +24,7 @@ module ShopifyAPI
24
24
  @country = T.let(nil, T.nilable(String))
25
25
  @country_code = T.let(nil, T.nilable(String))
26
26
  @country_name = T.let(nil, T.nilable(String))
27
- @county_taxes = T.let(nil, T.nilable(String))
27
+ @county_taxes = T.let(nil, T.nilable(T::Boolean))
28
28
  @created_at = T.let(nil, T.nilable(String))
29
29
  @currency = T.let(nil, T.nilable(String))
30
30
  @customer_email = T.let(nil, T.nilable(String))
@@ -95,7 +95,7 @@ module ShopifyAPI
95
95
  attr_reader :country_code
96
96
  sig { returns(T.nilable(String)) }
97
97
  attr_reader :country_name
98
- sig { returns(T.nilable(String)) }
98
+ sig { returns(T.nilable(T::Boolean)) }
99
99
  attr_reader :county_taxes
100
100
  sig { returns(T.nilable(String)) }
101
101
  attr_reader :created_at
@@ -22,6 +22,7 @@ module ShopifyAPI
22
22
  @previewable = T.let(nil, T.nilable(T::Boolean))
23
23
  @processing = T.let(nil, T.nilable(T::Boolean))
24
24
  @role = T.let(nil, T.nilable(String))
25
+ @src = T.let(nil, T.nilable(String))
25
26
  @theme_store_id = T.let(nil, T.nilable(Integer))
26
27
  @updated_at = T.let(nil, T.nilable(String))
27
28
  end
@@ -48,6 +49,8 @@ module ShopifyAPI
48
49
  attr_reader :processing
49
50
  sig { returns(T.nilable(String)) }
50
51
  attr_reader :role
52
+ sig { returns(T.nilable(String)) }
53
+ attr_reader :src
51
54
  sig { returns(T.nilable(Integer)) }
52
55
  attr_reader :theme_store_id
53
56
  sig { returns(T.nilable(String)) }
@@ -17,14 +17,17 @@ module ShopifyAPI
17
17
  super(session: session)
18
18
 
19
19
  @created_at = T.let(nil, T.nilable(String))
20
+ @currency = T.let(nil, T.nilable(Currency))
20
21
  @description = T.let(nil, T.nilable(String))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
- @price = T.let(nil, T.nilable(Integer))
23
+ @price = T.let(nil, T.nilable(String))
23
24
  @recurring_application_charge_id = T.let(nil, T.nilable(Integer))
24
25
  @updated_at = T.let(nil, T.nilable(String))
25
26
  end
26
27
 
27
- @has_one = T.let({}, T::Hash[Symbol, Class])
28
+ @has_one = T.let({
29
+ currency: Currency
30
+ }, T::Hash[Symbol, Class])
28
31
  @has_many = T.let({}, T::Hash[Symbol, Class])
29
32
  @paths = T.let([
30
33
  {http_method: :get, operation: :get, ids: [:recurring_application_charge_id], path: "recurring_application_charges/<recurring_application_charge_id>/usage_charges.json"},
@@ -34,11 +37,13 @@ module ShopifyAPI
34
37
 
35
38
  sig { returns(T.nilable(String)) }
36
39
  attr_reader :created_at
40
+ sig { returns(T.nilable(Currency)) }
41
+ attr_reader :currency
37
42
  sig { returns(T.nilable(String)) }
38
43
  attr_reader :description
39
44
  sig { returns(T.nilable(Integer)) }
40
45
  attr_reader :id
41
- sig { returns(T.nilable(Integer)) }
46
+ sig { returns(T.nilable(String)) }
42
47
  attr_reader :price
43
48
  sig { returns(T.nilable(Integer)) }
44
49
  attr_reader :recurring_application_charge_id
@@ -18,6 +18,7 @@ module ShopifyAPI
18
18
 
19
19
  @confirmation_url = T.let(nil, T.nilable(String))
20
20
  @created_at = T.let(nil, T.nilable(String))
21
+ @currency = T.let(nil, T.nilable(Currency))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
23
  @name = T.let(nil, T.nilable(String))
23
24
  @price = T.let(nil, T.nilable(T.any(String, Float)))
@@ -27,7 +28,9 @@ module ShopifyAPI
27
28
  @updated_at = T.let(nil, T.nilable(String))
28
29
  end
29
30
 
30
- @has_one = T.let({}, T::Hash[Symbol, Class])
31
+ @has_one = T.let({
32
+ currency: Currency
33
+ }, T::Hash[Symbol, Class])
31
34
  @has_many = T.let({}, T::Hash[Symbol, Class])
32
35
  @paths = T.let([
33
36
  {http_method: :get, operation: :get, ids: [], path: "application_charges.json"},
@@ -39,6 +42,8 @@ module ShopifyAPI
39
42
  attr_reader :confirmation_url
40
43
  sig { returns(T.nilable(String)) }
41
44
  attr_reader :created_at
45
+ sig { returns(T.nilable(Currency)) }
46
+ attr_reader :currency
42
47
  sig { returns(T.nilable(Integer)) }
43
48
  attr_reader :id
44
49
  sig { returns(T.nilable(String)) }
@@ -16,13 +16,16 @@ module ShopifyAPI
16
16
  def initialize(session: ShopifyAPI::Context.active_session)
17
17
  super(session: session)
18
18
 
19
- @amount = T.let(nil, T.nilable(Integer))
19
+ @amount = T.let(nil, T.nilable(String))
20
+ @currency = T.let(nil, T.nilable(Currency))
20
21
  @description = T.let(nil, T.nilable(String))
21
22
  @id = T.let(nil, T.nilable(Integer))
22
23
  @test = T.let(nil, T.nilable(T::Boolean))
23
24
  end
24
25
 
25
- @has_one = T.let({}, T::Hash[Symbol, Class])
26
+ @has_one = T.let({
27
+ currency: Currency
28
+ }, T::Hash[Symbol, Class])
26
29
  @has_many = T.let({}, T::Hash[Symbol, Class])
27
30
  @paths = T.let([
28
31
  {http_method: :get, operation: :get, ids: [], path: "application_credits.json"},
@@ -30,8 +33,10 @@ module ShopifyAPI
30
33
  {http_method: :post, operation: :post, ids: [], path: "application_credits.json"}
31
34
  ], T::Array[T::Hash[String, T.any(T::Array[Symbol], String, Symbol)]])
32
35
 
33
- sig { returns(T.nilable(Integer)) }
36
+ sig { returns(T.nilable(String)) }
34
37
  attr_reader :amount
38
+ sig { returns(T.nilable(Currency)) }
39
+ attr_reader :currency
35
40
  sig { returns(T.nilable(String)) }
36
41
  attr_reader :description
37
42
  sig { returns(T.nilable(Integer)) }