square.rb 44.1.0.20250924 → 45.0.1.20260122

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 (541) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +9 -0
  3. data/.fernignore +20 -0
  4. data/.rubocop.yml +60 -0
  5. data/LICENSE +1 -1
  6. data/Rakefile +29 -0
  7. data/custom.gemspec.rb +19 -0
  8. data/lib/square/apple_pay/client.rb +24 -10
  9. data/lib/square/bank_accounts/client.rb +144 -31
  10. data/lib/square/bank_accounts/types/create_bank_account_request.rb +13 -0
  11. data/lib/square/bank_accounts/types/disable_bank_account_request.rb +11 -0
  12. data/lib/square/bank_accounts/types/get_by_v_1_id_bank_accounts_request.rb +1 -1
  13. data/lib/square/bank_accounts/types/list_bank_accounts_request.rb +1 -0
  14. data/lib/square/bookings/client.rb +238 -100
  15. data/lib/square/bookings/custom_attribute_definitions/client.rb +139 -67
  16. data/lib/square/bookings/custom_attribute_definitions/types/create_booking_custom_attribute_definition_request.rb +1 -3
  17. data/lib/square/bookings/custom_attribute_definitions/types/update_booking_custom_attribute_definition_request.rb +1 -3
  18. data/lib/square/bookings/custom_attributes/client.rb +168 -76
  19. data/lib/square/bookings/custom_attributes/types/bulk_delete_booking_custom_attributes_request.rb +1 -3
  20. data/lib/square/bookings/custom_attributes/types/bulk_upsert_booking_custom_attributes_request.rb +1 -3
  21. data/lib/square/bookings/location_profiles/client.rb +44 -24
  22. data/lib/square/bookings/team_member_profiles/client.rb +66 -31
  23. data/lib/square/cards/client.rb +103 -45
  24. data/lib/square/cash_drawers/client.rb +3 -1
  25. data/lib/square/cash_drawers/shifts/client.rb +121 -61
  26. data/lib/square/catalog/client.rb +203 -91
  27. data/lib/square/catalog/images/client.rb +50 -20
  28. data/lib/square/catalog/object/client.rb +66 -29
  29. data/lib/square/catalog/object/types/delete_object_request.rb +1 -1
  30. data/lib/square/catalog/object/types/get_object_request.rb +1 -1
  31. data/lib/square/catalog/types/batch_upsert_catalog_objects_request.rb +1 -3
  32. data/lib/square/catalog/types/search_catalog_items_request.rb +3 -9
  33. data/lib/square/catalog/types/search_catalog_objects_request.rb +1 -3
  34. data/lib/square/channels/client.rb +131 -0
  35. data/lib/square/channels/types/bulk_retrieve_channels_request.rb +11 -0
  36. data/lib/square/channels/types/get_channels_request.rb +11 -0
  37. data/lib/square/channels/types/list_channels_request.rb +15 -0
  38. data/lib/square/checkout/client.rb +77 -31
  39. data/lib/square/checkout/payment_links/client.rb +120 -54
  40. data/lib/square/client.rb +18 -10
  41. data/lib/square/customers/cards/client.rb +43 -16
  42. data/lib/square/customers/client.rb +220 -97
  43. data/lib/square/customers/custom_attribute_definitions/client.rb +157 -74
  44. data/lib/square/customers/custom_attribute_definitions/types/batch_upsert_customer_custom_attributes_request.rb +1 -3
  45. data/lib/square/customers/custom_attribute_definitions/types/create_customer_custom_attribute_definition_request.rb +1 -3
  46. data/lib/square/customers/custom_attribute_definitions/types/update_customer_custom_attribute_definition_request.rb +1 -3
  47. data/lib/square/customers/custom_attributes/client.rb +117 -53
  48. data/lib/square/customers/groups/client.rb +156 -67
  49. data/lib/square/customers/segments/client.rb +62 -31
  50. data/lib/square/customers/types/bulk_create_customers_request.rb +1 -3
  51. data/lib/square/customers/types/bulk_update_customers_request.rb +1 -3
  52. data/lib/square/devices/client.rb +66 -31
  53. data/lib/square/devices/codes/client.rb +83 -38
  54. data/lib/square/disputes/client.rb +140 -60
  55. data/lib/square/disputes/evidence/client.rb +83 -39
  56. data/lib/square/employees/client.rb +66 -31
  57. data/lib/square/events/client.rb +80 -38
  58. data/lib/square/file_param.rb +77 -77
  59. data/lib/square/gift_cards/activities/client.rb +73 -31
  60. data/lib/square/gift_cards/client.rb +163 -69
  61. data/lib/square/internal/http/base_request.rb +6 -0
  62. data/lib/square/internal/http/raw_client.rb +111 -20
  63. data/lib/square/internal/iterators/cursor_item_iterator.rb +28 -0
  64. data/lib/square/internal/iterators/cursor_page_iterator.rb +51 -0
  65. data/lib/square/internal/iterators/item_iterator.rb +65 -0
  66. data/lib/square/internal/iterators/offset_item_iterator.rb +30 -0
  67. data/lib/square/internal/iterators/offset_page_iterator.rb +83 -0
  68. data/lib/square/internal/json/request.rb +2 -1
  69. data/lib/square/internal/multipart/multipart_request.rb +2 -1
  70. data/lib/square/internal/types/enum.rb +8 -0
  71. data/lib/square/internal/types/model/field.rb +11 -1
  72. data/lib/square/internal/types/model.rb +14 -4
  73. data/lib/square/internal/types/union.rb +88 -7
  74. data/lib/square/internal/types/utils.rb +20 -4
  75. data/lib/square/inventory/client.rb +100 -76
  76. data/lib/square/invoices/client.rb +228 -99
  77. data/lib/square/labor/break_types/client.rb +120 -53
  78. data/lib/square/labor/client.rb +205 -81
  79. data/lib/square/labor/employee_wages/client.rb +64 -31
  80. data/lib/square/labor/shifts/client.rb +94 -37
  81. data/lib/square/labor/team_member_wages/client.rb +64 -31
  82. data/lib/square/labor/types/bulk_publish_scheduled_shifts_request.rb +2 -6
  83. data/lib/square/labor/types/publish_scheduled_shift_request.rb +1 -3
  84. data/lib/square/labor/workweek_configs/client.rb +65 -32
  85. data/lib/square/locations/client.rb +102 -41
  86. data/lib/square/locations/custom_attribute_definitions/client.rb +135 -64
  87. data/lib/square/locations/custom_attribute_definitions/types/create_location_custom_attribute_definition_request.rb +1 -3
  88. data/lib/square/locations/custom_attribute_definitions/types/update_location_custom_attribute_definition_request.rb +1 -3
  89. data/lib/square/locations/custom_attributes/client.rb +156 -68
  90. data/lib/square/locations/custom_attributes/types/bulk_delete_location_custom_attributes_request.rb +1 -3
  91. data/lib/square/locations/custom_attributes/types/bulk_upsert_location_custom_attributes_request.rb +1 -3
  92. data/lib/square/locations/transactions/client.rb +93 -37
  93. data/lib/square/locations/types/create_checkout_request.rb +1 -3
  94. data/lib/square/loyalty/accounts/client.rb +109 -44
  95. data/lib/square/loyalty/accounts/types/search_loyalty_accounts_request.rb +1 -3
  96. data/lib/square/loyalty/client.rb +20 -8
  97. data/lib/square/loyalty/programs/client.rb +72 -29
  98. data/lib/square/loyalty/programs/promotions/client.rb +106 -46
  99. data/lib/square/loyalty/programs/promotions/types/cancel_promotions_request.rb +1 -1
  100. data/lib/square/loyalty/programs/promotions/types/get_promotions_request.rb +1 -1
  101. data/lib/square/loyalty/rewards/client.rb +96 -38
  102. data/lib/square/loyalty/rewards/types/search_loyalty_rewards_request.rb +1 -3
  103. data/lib/square/merchants/client.rb +60 -31
  104. data/lib/square/merchants/custom_attribute_definitions/client.rb +137 -65
  105. data/lib/square/merchants/custom_attribute_definitions/types/create_merchant_custom_attribute_definition_request.rb +1 -3
  106. data/lib/square/merchants/custom_attribute_definitions/types/update_merchant_custom_attribute_definition_request.rb +1 -3
  107. data/lib/square/merchants/custom_attributes/client.rb +156 -68
  108. data/lib/square/merchants/custom_attributes/types/bulk_delete_merchant_custom_attributes_request.rb +1 -3
  109. data/lib/square/merchants/custom_attributes/types/bulk_upsert_merchant_custom_attributes_request.rb +1 -3
  110. data/lib/square/o_auth/client.rb +76 -31
  111. data/lib/square/o_auth/types/obtain_token_request.rb +1 -0
  112. data/lib/square/orders/client.rb +156 -63
  113. data/lib/square/orders/custom_attribute_definitions/client.rb +137 -65
  114. data/lib/square/orders/custom_attribute_definitions/types/create_order_custom_attribute_definition_request.rb +1 -3
  115. data/lib/square/orders/custom_attribute_definitions/types/update_order_custom_attribute_definition_request.rb +1 -3
  116. data/lib/square/orders/custom_attributes/client.rb +159 -69
  117. data/lib/square/orders/custom_attributes/types/bulk_delete_order_custom_attributes_request.rb +1 -3
  118. data/lib/square/orders/custom_attributes/types/bulk_upsert_order_custom_attributes_request.rb +1 -3
  119. data/lib/square/orders/types/calculate_order_request.rb +1 -3
  120. data/lib/square/payments/client.rb +182 -70
  121. data/lib/square/payouts/client.rb +116 -54
  122. data/lib/square/refunds/client.rb +97 -40
  123. data/lib/square/refunds/types/refund_payment_request.rb +1 -3
  124. data/lib/square/sites/client.rb +26 -11
  125. data/lib/square/snippets/client.rb +73 -28
  126. data/lib/square/subscriptions/client.rb +271 -117
  127. data/lib/square/team/client.rb +81 -36
  128. data/lib/square/team_members/client.rb +119 -49
  129. data/lib/square/team_members/types/batch_create_team_members_request.rb +1 -3
  130. data/lib/square/team_members/types/batch_update_team_members_request.rb +1 -3
  131. data/lib/square/team_members/wage_setting/client.rb +48 -19
  132. data/lib/square/terminal/actions/client.rb +75 -30
  133. data/lib/square/terminal/checkouts/client.rb +76 -30
  134. data/lib/square/terminal/client.rb +60 -23
  135. data/lib/square/terminal/refunds/client.rb +78 -31
  136. data/lib/square/transfer_orders/client.rb +292 -0
  137. data/lib/square/transfer_orders/types/cancel_transfer_order_request.rb +13 -0
  138. data/lib/square/transfer_orders/types/create_transfer_order_request.rb +12 -0
  139. data/lib/square/transfer_orders/types/delete_transfer_orders_request.rb +12 -0
  140. data/lib/square/transfer_orders/types/get_transfer_orders_request.rb +11 -0
  141. data/lib/square/transfer_orders/types/receive_transfer_order_request.rb +14 -0
  142. data/lib/square/transfer_orders/types/search_transfer_orders_request.rb +13 -0
  143. data/lib/square/transfer_orders/types/start_transfer_order_request.rb +13 -0
  144. data/lib/square/transfer_orders/types/update_transfer_order_request.rb +14 -0
  145. data/lib/square/types/address.rb +2 -1
  146. data/lib/square/types/application_details.rb +1 -3
  147. data/lib/square/types/application_type.rb +23 -0
  148. data/lib/square/types/availability.rb +3 -4
  149. data/lib/square/types/bank_account.rb +1 -0
  150. data/lib/square/types/batch_create_team_members_response.rb +1 -3
  151. data/lib/square/types/batch_create_vendors_response.rb +1 -3
  152. data/lib/square/types/batch_get_catalog_objects_response.rb +1 -3
  153. data/lib/square/types/batch_get_vendors_response.rb +1 -3
  154. data/lib/square/types/batch_update_team_members_response.rb +1 -3
  155. data/lib/square/types/batch_update_vendors_response.rb +1 -3
  156. data/lib/square/types/batch_upsert_catalog_objects_response.rb +1 -3
  157. data/lib/square/types/batch_upsert_customer_custom_attributes_request_customer_custom_attribute_upsert_request.rb +2 -1
  158. data/lib/square/types/batch_upsert_customer_custom_attributes_response.rb +4 -4
  159. data/lib/square/types/batch_upsert_customer_custom_attributes_response_customer_custom_attribute_upsert_response.rb +3 -1
  160. data/lib/square/types/booking.rb +2 -6
  161. data/lib/square/types/booking_created_event.rb +2 -1
  162. data/lib/square/types/booking_custom_attribute_definition_visible_created_event.rb +2 -1
  163. data/lib/square/types/booking_custom_attribute_definition_visible_deleted_event.rb +2 -1
  164. data/lib/square/types/booking_custom_attribute_definition_visible_updated_event.rb +2 -1
  165. data/lib/square/types/booking_custom_attribute_delete_request.rb +4 -2
  166. data/lib/square/types/booking_custom_attribute_delete_response.rb +3 -1
  167. data/lib/square/types/booking_custom_attribute_upsert_request.rb +2 -1
  168. data/lib/square/types/booking_custom_attribute_upsert_response.rb +3 -1
  169. data/lib/square/types/booking_updated_event.rb +2 -1
  170. data/lib/square/types/bulk_create_customers_response.rb +1 -3
  171. data/lib/square/types/bulk_delete_booking_custom_attributes_response.rb +4 -4
  172. data/lib/square/types/bulk_delete_customers_response.rb +1 -3
  173. data/lib/square/types/bulk_delete_location_custom_attributes_request_location_custom_attribute_delete_request.rb +2 -1
  174. data/lib/square/types/bulk_delete_location_custom_attributes_response.rb +4 -4
  175. data/lib/square/types/bulk_delete_location_custom_attributes_response_location_custom_attribute_delete_response.rb +2 -1
  176. data/lib/square/types/bulk_delete_merchant_custom_attributes_request_merchant_custom_attribute_delete_request.rb +2 -1
  177. data/lib/square/types/bulk_delete_merchant_custom_attributes_response.rb +4 -4
  178. data/lib/square/types/bulk_delete_merchant_custom_attributes_response_merchant_custom_attribute_delete_response.rb +2 -1
  179. data/lib/square/types/bulk_delete_order_custom_attributes_response.rb +1 -3
  180. data/lib/square/types/bulk_publish_scheduled_shifts_response.rb +1 -3
  181. data/lib/square/types/bulk_retrieve_bookings_response.rb +1 -3
  182. data/lib/square/types/bulk_retrieve_channels_request_constants.rb +23 -0
  183. data/lib/square/types/bulk_retrieve_channels_response.rb +12 -0
  184. data/lib/square/types/bulk_retrieve_customers_response.rb +1 -3
  185. data/lib/square/types/bulk_retrieve_team_member_booking_profiles_response.rb +3 -4
  186. data/lib/square/types/bulk_update_customers_response.rb +1 -3
  187. data/lib/square/types/bulk_upsert_booking_custom_attributes_response.rb +4 -4
  188. data/lib/square/types/bulk_upsert_location_custom_attributes_request_location_custom_attribute_upsert_request.rb +2 -1
  189. data/lib/square/types/bulk_upsert_location_custom_attributes_response.rb +4 -4
  190. data/lib/square/types/bulk_upsert_location_custom_attributes_response_location_custom_attribute_upsert_response.rb +3 -1
  191. data/lib/square/types/bulk_upsert_merchant_custom_attributes_request_merchant_custom_attribute_upsert_request.rb +2 -1
  192. data/lib/square/types/bulk_upsert_merchant_custom_attributes_response.rb +4 -4
  193. data/lib/square/types/bulk_upsert_merchant_custom_attributes_response_merchant_custom_attribute_upsert_response.rb +3 -1
  194. data/lib/square/types/bulk_upsert_order_custom_attributes_response.rb +1 -3
  195. data/lib/square/types/business_appointment_settings.rb +4 -12
  196. data/lib/square/types/business_booking_profile.rb +2 -6
  197. data/lib/square/types/buy_now_pay_later_details.rb +1 -0
  198. data/lib/square/types/cancel_transfer_order_response.rb +11 -0
  199. data/lib/square/types/card.rb +2 -0
  200. data/lib/square/types/card_issuer_alert.rb +23 -0
  201. data/lib/square/types/catalog_category.rb +1 -3
  202. data/lib/square/types/catalog_custom_attribute_definition.rb +6 -18
  203. data/lib/square/types/catalog_custom_attribute_definition_selection_config.rb +1 -3
  204. data/lib/square/types/catalog_id_mapping.rb +1 -1
  205. data/lib/square/types/catalog_info_response.rb +1 -3
  206. data/lib/square/types/catalog_item.rb +6 -12
  207. data/lib/square/types/catalog_item_food_and_beverage_details.rb +2 -6
  208. data/lib/square/types/catalog_item_food_and_beverage_details_dietary_preference.rb +2 -6
  209. data/lib/square/types/catalog_item_food_and_beverage_details_ingredient.rb +2 -6
  210. data/lib/square/types/catalog_item_modifier_list_info.rb +6 -9
  211. data/lib/square/types/catalog_item_variation.rb +17 -13
  212. data/lib/square/types/catalog_modifier.rb +4 -4
  213. data/lib/square/types/catalog_modifier_list.rb +4 -2
  214. data/lib/square/types/catalog_modifier_override.rb +2 -2
  215. data/lib/square/types/catalog_modifier_toggle_override_type.rb +13 -0
  216. data/lib/square/types/catalog_object.rb +7 -3
  217. data/lib/square/types/catalog_object_base.rb +2 -4
  218. data/lib/square/types/catalog_object_category.rb +3 -4
  219. data/lib/square/types/catalog_object_custom_attribute_definition.rb +1 -3
  220. data/lib/square/types/catalog_object_quick_amounts_settings.rb +1 -3
  221. data/lib/square/types/catalog_object_reference.rb +1 -1
  222. data/lib/square/types/catalog_object_subscription_plan_variation.rb +1 -3
  223. data/lib/square/types/catalog_query.rb +11 -13
  224. data/lib/square/types/catalog_query_prefix.rb +2 -1
  225. data/lib/square/types/catalog_query_text.rb +2 -1
  226. data/lib/square/types/catalog_subscription_plan.rb +5 -5
  227. data/lib/square/types/catalog_subscription_plan_variation.rb +4 -2
  228. data/lib/square/types/catalog_v_1_id.rb +1 -1
  229. data/lib/square/types/catalog_version_updated_event_object.rb +1 -3
  230. data/lib/square/types/channel.rb +16 -0
  231. data/lib/square/types/channel_status.rb +12 -0
  232. data/lib/square/types/checkout.rb +1 -3
  233. data/lib/square/types/checkout_location_settings.rb +1 -3
  234. data/lib/square/types/checkout_location_settings_branding.rb +2 -6
  235. data/lib/square/types/checkout_merchant_settings.rb +1 -3
  236. data/lib/square/types/checkout_merchant_settings_payment_methods.rb +4 -12
  237. data/lib/square/types/checkout_merchant_settings_payment_methods_afterpay_clearpay.rb +2 -6
  238. data/lib/square/types/component.rb +4 -12
  239. data/lib/square/types/create_bank_account_response.rb +11 -0
  240. data/lib/square/types/create_booking_custom_attribute_definition_response.rb +4 -4
  241. data/lib/square/types/create_catalog_image_request.rb +1 -1
  242. data/lib/square/types/create_customer_custom_attribute_definition_response.rb +4 -4
  243. data/lib/square/types/create_location_custom_attribute_definition_response.rb +4 -4
  244. data/lib/square/types/create_merchant_custom_attribute_definition_response.rb +4 -4
  245. data/lib/square/types/create_order_custom_attribute_definition_response.rb +1 -3
  246. data/lib/square/types/create_transfer_order_data.rb +19 -0
  247. data/lib/square/types/create_transfer_order_line_data.rb +12 -0
  248. data/lib/square/types/create_transfer_order_response.rb +11 -0
  249. data/lib/square/types/create_webhook_subscription_response.rb +2 -1
  250. data/lib/square/types/custom_attribute.rb +1 -1
  251. data/lib/square/types/custom_attribute_definition.rb +1 -3
  252. data/lib/square/types/custom_attribute_definition_event_data_object.rb +1 -3
  253. data/lib/square/types/custom_field.rb +2 -1
  254. data/lib/square/types/customer_address_filter.rb +2 -1
  255. data/lib/square/types/customer_created_event.rb +4 -2
  256. data/lib/square/types/customer_created_event_event_context_merge.rb +2 -1
  257. data/lib/square/types/customer_creation_source_filter.rb +1 -3
  258. data/lib/square/types/customer_custom_attribute_filter.rb +2 -1
  259. data/lib/square/types/customer_custom_attribute_filter_value.rb +2 -1
  260. data/lib/square/types/customer_custom_attribute_filters.rb +7 -6
  261. data/lib/square/types/customer_custom_attribute_visible_updated_event.rb +6 -3
  262. data/lib/square/types/customer_deleted_event.rb +4 -2
  263. data/lib/square/types/customer_deleted_event_event_context_merge.rb +2 -1
  264. data/lib/square/types/customer_tax_ids.rb +4 -2
  265. data/lib/square/types/customer_updated_event.rb +4 -2
  266. data/lib/square/types/delete_booking_custom_attribute_definition_response.rb +5 -2
  267. data/lib/square/types/delete_booking_custom_attribute_response.rb +2 -1
  268. data/lib/square/types/delete_customer_custom_attribute_response.rb +2 -1
  269. data/lib/square/types/delete_location_custom_attribute_response.rb +2 -1
  270. data/lib/square/types/delete_merchant_custom_attribute_response.rb +2 -1
  271. data/lib/square/types/delete_subscription_action_response.rb +2 -1
  272. data/lib/square/types/delete_transfer_order_response.rb +10 -0
  273. data/lib/square/types/delete_webhook_subscription_response.rb +2 -1
  274. data/lib/square/types/destination_details.rb +1 -3
  275. data/lib/square/types/device_checkout_options.rb +1 -0
  276. data/lib/square/types/device_component_details_ethernet_details.rb +1 -1
  277. data/lib/square/types/device_component_details_wi_fi_details.rb +1 -1
  278. data/lib/square/types/digital_wallet_details.rb +1 -0
  279. data/lib/square/types/disable_bank_account_response.rb +11 -0
  280. data/lib/square/types/dispute.rb +2 -1
  281. data/lib/square/types/dispute_evidence_added_event.rb +2 -1
  282. data/lib/square/types/dispute_evidence_created_event.rb +2 -1
  283. data/lib/square/types/employee_wage.rb +2 -1
  284. data/lib/square/types/error_code.rb +2 -0
  285. data/lib/square/types/event_data.rb +1 -3
  286. data/lib/square/types/fulfillment.rb +4 -7
  287. data/lib/square/types/fulfillment_delivery_details.rb +1 -3
  288. data/lib/square/types/fulfillment_pickup_details.rb +1 -3
  289. data/lib/square/types/get_bank_account_response.rb +1 -1
  290. data/lib/square/types/get_booking_request.rb +23 -0
  291. data/lib/square/types/get_business_booking_profile_request.rb +23 -0
  292. data/lib/square/types/get_card_request.rb +23 -0
  293. data/lib/square/types/get_catalog_object_response.rb +1 -3
  294. data/lib/square/types/get_customer_custom_attribute_definition_response.rb +4 -4
  295. data/lib/square/types/get_customer_custom_attribute_response.rb +2 -1
  296. data/lib/square/types/get_customer_group_request.rb +23 -0
  297. data/lib/square/types/get_customer_request.rb +23 -0
  298. data/lib/square/types/get_customer_segment_request.rb +23 -0
  299. data/lib/square/types/get_dispute_evidence_request.rb +23 -0
  300. data/lib/square/types/get_dispute_request.rb +23 -0
  301. data/lib/square/types/get_employee_request.rb +23 -0
  302. data/lib/square/types/get_gift_card_request.rb +23 -0
  303. data/lib/square/types/get_inventory_adjustment_request.rb +23 -0
  304. data/lib/square/types/get_inventory_physical_count_request.rb +23 -0
  305. data/lib/square/types/get_inventory_transfer_request.rb +23 -0
  306. data/lib/square/types/get_location_request.rb +23 -0
  307. data/lib/square/types/get_loyalty_account_request.rb +23 -0
  308. data/lib/square/types/get_loyalty_program_request.rb +23 -0
  309. data/lib/square/types/get_loyalty_promotion_request.rb +23 -0
  310. data/lib/square/types/get_loyalty_reward_request.rb +23 -0
  311. data/lib/square/types/get_merchant_request.rb +23 -0
  312. data/lib/square/types/get_order_request.rb +23 -0
  313. data/lib/square/types/get_payment_link_request.rb +23 -0
  314. data/lib/square/types/get_snippet_request.rb +23 -0
  315. data/lib/square/types/get_team_member_booking_profile_request.rb +23 -0
  316. data/lib/square/types/get_team_member_booking_profile_response.rb +1 -3
  317. data/lib/square/types/get_team_member_request.rb +23 -0
  318. data/lib/square/types/get_transaction_request.rb +23 -0
  319. data/lib/square/types/get_vendor_request.rb +23 -0
  320. data/lib/square/types/get_wage_setting_request.rb +23 -0
  321. data/lib/square/types/get_webhook_subscription_request.rb +23 -0
  322. data/lib/square/types/get_webhook_subscription_response.rb +2 -1
  323. data/lib/square/types/gift_card_activity.rb +8 -24
  324. data/lib/square/types/gift_card_activity_block_reason.rb +23 -0
  325. data/lib/square/types/gift_card_activity_unblock_reason.rb +23 -0
  326. data/lib/square/types/gift_card_activity_updated_event.rb +2 -1
  327. data/lib/square/types/inventory_count_updated_event_object.rb +1 -3
  328. data/lib/square/types/invoice.rb +6 -13
  329. data/lib/square/types/invoice_accepted_payment_methods.rb +2 -1
  330. data/lib/square/types/invoice_attachment.rb +1 -1
  331. data/lib/square/types/invoice_custom_field.rb +2 -1
  332. data/lib/square/types/invoice_payment_made_event.rb +2 -1
  333. data/lib/square/types/invoice_payment_request.rb +6 -8
  334. data/lib/square/types/invoice_refunded_event.rb +2 -1
  335. data/lib/square/types/invoice_sort_field.rb +23 -0
  336. data/lib/square/types/labor_scheduled_shift_created_event_object.rb +1 -1
  337. data/lib/square/types/labor_scheduled_shift_published_event_object.rb +1 -1
  338. data/lib/square/types/labor_scheduled_shift_updated_event_object.rb +1 -1
  339. data/lib/square/types/list_bank_accounts_response.rb +1 -1
  340. data/lib/square/types/list_booking_custom_attribute_definitions_response.rb +4 -4
  341. data/lib/square/types/list_booking_custom_attributes_response.rb +3 -4
  342. data/lib/square/types/list_cash_drawer_shift_events_response.rb +1 -3
  343. data/lib/square/types/list_cash_drawer_shifts_response.rb +1 -3
  344. data/lib/square/types/list_channels_request_constants.rb +23 -0
  345. data/lib/square/types/list_channels_response.rb +11 -0
  346. data/lib/square/types/list_customer_custom_attribute_definitions_response.rb +4 -4
  347. data/lib/square/types/list_customer_custom_attributes_response.rb +3 -4
  348. data/lib/square/types/list_gift_card_activities_response.rb +1 -3
  349. data/lib/square/types/list_location_booking_profiles_response.rb +1 -3
  350. data/lib/square/types/list_location_custom_attribute_definitions_response.rb +4 -4
  351. data/lib/square/types/list_location_custom_attributes_response.rb +3 -4
  352. data/lib/square/types/list_loyalty_promotions_response.rb +1 -3
  353. data/lib/square/types/list_merchant_custom_attribute_definitions_response.rb +4 -4
  354. data/lib/square/types/list_merchant_custom_attributes_response.rb +3 -4
  355. data/lib/square/types/list_order_custom_attribute_definitions_response.rb +1 -3
  356. data/lib/square/types/list_order_custom_attributes_response.rb +1 -3
  357. data/lib/square/types/list_subscription_events_response.rb +1 -3
  358. data/lib/square/types/list_team_member_booking_profiles_response.rb +1 -3
  359. data/lib/square/types/list_team_member_wages_response.rb +1 -3
  360. data/lib/square/types/list_webhook_subscriptions_response.rb +1 -3
  361. data/lib/square/types/list_workweek_configs_response.rb +1 -3
  362. data/lib/square/types/location.rb +1 -3
  363. data/lib/square/types/location_booking_profile.rb +2 -1
  364. data/lib/square/types/location_custom_attribute_visible_updated_event.rb +6 -3
  365. data/lib/square/types/loyalty_account.rb +1 -3
  366. data/lib/square/types/loyalty_account_mapping_type.rb +23 -0
  367. data/lib/square/types/loyalty_event.rb +3 -4
  368. data/lib/square/types/loyalty_event_filter.rb +1 -3
  369. data/lib/square/types/loyalty_program.rb +4 -7
  370. data/lib/square/types/loyalty_program_accrual_rule.rb +3 -4
  371. data/lib/square/types/loyalty_program_reward_tier.rb +3 -1
  372. data/lib/square/types/loyalty_promotion_incentive.rb +2 -6
  373. data/lib/square/types/loyalty_promotion_incentive_points_addition_data.rb +2 -1
  374. data/lib/square/types/loyalty_promotion_incentive_points_multiplier_data.rb +2 -1
  375. data/lib/square/types/loyalty_promotion_trigger_limit.rb +2 -1
  376. data/lib/square/types/loyalty_reward.rb +4 -2
  377. data/lib/square/types/measurement_unit_generic.rb +23 -0
  378. data/lib/square/types/oauth_authorization_revoked_event_object.rb +1 -3
  379. data/lib/square/types/oauth_authorization_revoked_event_revocation_object.rb +1 -3
  380. data/lib/square/types/order.rb +2 -6
  381. data/lib/square/types/order_card_surcharge_treatment_type.rb +12 -0
  382. data/lib/square/types/order_custom_attribute_definition_owned_created_event.rb +2 -1
  383. data/lib/square/types/order_custom_attribute_definition_owned_deleted_event.rb +2 -1
  384. data/lib/square/types/order_custom_attribute_definition_owned_updated_event.rb +2 -1
  385. data/lib/square/types/order_custom_attribute_definition_visible_created_event.rb +2 -1
  386. data/lib/square/types/order_custom_attribute_definition_visible_deleted_event.rb +2 -1
  387. data/lib/square/types/order_custom_attribute_definition_visible_updated_event.rb +2 -1
  388. data/lib/square/types/order_custom_attribute_owned_deleted_event.rb +2 -1
  389. data/lib/square/types/order_custom_attribute_owned_updated_event.rb +2 -1
  390. data/lib/square/types/order_custom_attribute_visible_deleted_event.rb +2 -1
  391. data/lib/square/types/order_custom_attribute_visible_updated_event.rb +2 -1
  392. data/lib/square/types/order_fulfillment_updated.rb +1 -3
  393. data/lib/square/types/order_line_item.rb +4 -12
  394. data/lib/square/types/order_line_item_applied_tax.rb +1 -0
  395. data/lib/square/types/order_line_item_pricing_blocklists.rb +3 -6
  396. data/lib/square/types/order_line_item_pricing_blocklists_blocked_service_charge.rb +14 -0
  397. data/lib/square/types/order_return.rb +3 -9
  398. data/lib/square/types/order_return_line_item.rb +4 -12
  399. data/lib/square/types/order_return_service_charge.rb +3 -6
  400. data/lib/square/types/order_service_charge.rb +2 -6
  401. data/lib/square/types/payment.rb +1 -3
  402. data/lib/square/types/payment_link_related_resources.rb +1 -3
  403. data/lib/square/types/payment_refund.rb +1 -3
  404. data/lib/square/types/payout_entry.rb +24 -72
  405. data/lib/square/types/pre_populated_data.rb +2 -1
  406. data/lib/square/types/product_type.rb +23 -0
  407. data/lib/square/types/receive_transfer_order_response.rb +11 -0
  408. data/lib/square/types/reference.rb +10 -0
  409. data/lib/square/types/reference_type.rb +25 -0
  410. data/lib/square/types/refund.rb +1 -3
  411. data/lib/square/types/retrieve_booking_custom_attribute_definition_response.rb +4 -4
  412. data/lib/square/types/retrieve_booking_custom_attribute_response.rb +2 -1
  413. data/lib/square/types/retrieve_channel_response.rb +10 -0
  414. data/lib/square/types/retrieve_location_custom_attribute_definition_response.rb +4 -4
  415. data/lib/square/types/retrieve_location_custom_attribute_response.rb +2 -1
  416. data/lib/square/types/retrieve_merchant_custom_attribute_definition_response.rb +4 -4
  417. data/lib/square/types/retrieve_merchant_custom_attribute_response.rb +2 -1
  418. data/lib/square/types/retrieve_order_custom_attribute_definition_response.rb +1 -3
  419. data/lib/square/types/retrieve_transfer_order_response.rb +11 -0
  420. data/lib/square/types/scheduled_shift_filter.rb +3 -7
  421. data/lib/square/types/scheduled_shift_workday.rb +1 -3
  422. data/lib/square/types/search_availability_filter.rb +1 -3
  423. data/lib/square/types/search_catalog_items_response.rb +2 -1
  424. data/lib/square/types/search_catalog_objects_response.rb +1 -3
  425. data/lib/square/types/search_events_sort_field.rb +23 -0
  426. data/lib/square/types/search_loyalty_accounts_request_loyalty_account_query.rb +1 -3
  427. data/lib/square/types/search_loyalty_accounts_response.rb +1 -3
  428. data/lib/square/types/search_orders_date_time_filter.rb +2 -1
  429. data/lib/square/types/search_orders_fulfillment_filter.rb +2 -6
  430. data/lib/square/types/search_orders_source_filter.rb +2 -0
  431. data/lib/square/types/search_scheduled_shifts_response.rb +1 -3
  432. data/lib/square/types/search_transfer_orders_response.rb +12 -0
  433. data/lib/square/types/shift_filter.rb +3 -2
  434. data/lib/square/types/shift_query.rb +2 -1
  435. data/lib/square/types/shift_sort.rb +2 -1
  436. data/lib/square/types/shift_wage.rb +2 -1
  437. data/lib/square/types/shift_workday.rb +2 -1
  438. data/lib/square/types/snippet.rb +2 -1
  439. data/lib/square/types/standard_unit_description_group.rb +1 -3
  440. data/lib/square/types/start_transfer_order_response.rb +11 -0
  441. data/lib/square/types/subscription_event.rb +1 -3
  442. data/lib/square/types/subscription_phase.rb +2 -1
  443. data/lib/square/types/subscription_test_result.rb +5 -3
  444. data/lib/square/types/team_member_assigned_locations.rb +1 -3
  445. data/lib/square/types/team_member_booking_profile.rb +2 -1
  446. data/lib/square/types/tender.rb +2 -6
  447. data/lib/square/types/tender_buy_now_pay_later_details.rb +1 -3
  448. data/lib/square/types/terminal_refund.rb +2 -1
  449. data/lib/square/types/test_webhook_subscription_response.rb +5 -5
  450. data/lib/square/types/timecard_filter.rb +1 -1
  451. data/lib/square/types/transfer_order.rb +35 -0
  452. data/lib/square/types/transfer_order_created_event.rb +14 -0
  453. data/lib/square/types/transfer_order_created_event_data.rb +11 -0
  454. data/lib/square/types/transfer_order_created_event_object.rb +9 -0
  455. data/lib/square/types/transfer_order_deleted_event.rb +14 -0
  456. data/lib/square/types/transfer_order_deleted_event_data.rb +11 -0
  457. data/lib/square/types/transfer_order_filter.rb +12 -0
  458. data/lib/square/types/transfer_order_goods_receipt.rb +27 -0
  459. data/lib/square/types/transfer_order_goods_receipt_line_item.rb +13 -0
  460. data/lib/square/types/transfer_order_line.rb +18 -0
  461. data/lib/square/types/transfer_order_query.rb +11 -0
  462. data/lib/square/types/transfer_order_sort.rb +11 -0
  463. data/lib/square/types/transfer_order_sort_field.rb +12 -0
  464. data/lib/square/types/transfer_order_status.rb +15 -0
  465. data/lib/square/types/transfer_order_updated_event.rb +14 -0
  466. data/lib/square/types/transfer_order_updated_event_data.rb +11 -0
  467. data/lib/square/types/transfer_order_updated_event_object.rb +9 -0
  468. data/lib/square/types/update_booking_custom_attribute_definition_response.rb +4 -4
  469. data/lib/square/types/update_customer_custom_attribute_definition_response.rb +4 -4
  470. data/lib/square/types/update_location_custom_attribute_definition_response.rb +4 -4
  471. data/lib/square/types/update_merchant_custom_attribute_definition_response.rb +4 -4
  472. data/lib/square/types/update_order_custom_attribute_definition_response.rb +1 -3
  473. data/lib/square/types/update_transfer_order_data.rb +15 -0
  474. data/lib/square/types/update_transfer_order_line_data.rb +13 -0
  475. data/lib/square/types/update_transfer_order_response.rb +11 -0
  476. data/lib/square/types/update_webhook_subscription_response.rb +2 -1
  477. data/lib/square/types/update_webhook_subscription_signature_key_response.rb +3 -1
  478. data/lib/square/types/upsert_booking_custom_attribute_response.rb +2 -1
  479. data/lib/square/types/upsert_catalog_object_response.rb +1 -3
  480. data/lib/square/types/upsert_customer_custom_attribute_response.rb +2 -1
  481. data/lib/square/types/upsert_location_custom_attribute_response.rb +2 -1
  482. data/lib/square/types/upsert_merchant_custom_attribute_response.rb +2 -1
  483. data/lib/square/types/v_1_get_payment_request.rb +23 -0
  484. data/lib/square/types/v_1_get_settlement_request.rb +23 -0
  485. data/lib/square/types/v_1_order.rb +1 -3
  486. data/lib/square/types/vendor_created_event_object_operation.rb +23 -0
  487. data/lib/square/types/vendor_updated_event_object_operation.rb +23 -0
  488. data/lib/square/types/wage_setting.rb +1 -3
  489. data/lib/square/v_1_transactions/client.rb +72 -29
  490. data/lib/square/vendors/client.rb +126 -51
  491. data/lib/square/vendors/types/batch_update_vendors_request.rb +1 -3
  492. data/lib/square/version.rb +1 -1
  493. data/lib/square/webhooks/client.rb +3 -1
  494. data/lib/square/webhooks/event_types/client.rb +25 -14
  495. data/lib/square/webhooks/subscriptions/client.rb +164 -69
  496. data/lib/square.rb +106 -5
  497. data/lib/square_legacy/utilities/webhooks_helper.rb +1 -1
  498. data/reference.md +29588 -0
  499. data/wiremock/docker-compose.test.yml +14 -0
  500. data/wiremock/wiremock-mappings.json +1 -0
  501. metadata +118 -45
  502. data/lib/square/mobile/client.rb +0 -50
  503. data/lib/square/mobile/types/create_mobile_authorization_code_request.rb +0 -11
  504. data/lib/square/types/create_mobile_authorization_code_response.rb +0 -13
  505. data/test/square/integration/client_tests/test_cash_drawers.rb +0 -27
  506. data/test/square/integration/client_tests/test_catalog.rb +0 -704
  507. data/test/square/integration/client_tests/test_customers.rb +0 -65
  508. data/test/square/integration/client_tests/test_customers_groups.rb +0 -144
  509. data/test/square/integration/client_tests/test_customers_segments.rb +0 -36
  510. data/test/square/integration/client_tests/test_devices.rb +0 -67
  511. data/test/square/integration/client_tests/test_inventory.rb +0 -28
  512. data/test/square/integration/client_tests/test_locations.rb +0 -18
  513. data/test/square/integration/client_tests/test_merchants.rb +0 -40
  514. data/test/square/integration/client_tests/test_mobile.rb +0 -21
  515. data/test/square/integration/client_tests/test_orders.rb +0 -177
  516. data/test/square/integration/client_tests/test_payments.rb +0 -167
  517. data/test/square/integration/client_tests/test_refunds.rb +0 -133
  518. data/test/square/integration/client_tests/test_team_members.rb +0 -97
  519. data/test/square/integration/client_tests/test_terminal.rb +0 -107
  520. data/test/square/integration/integration_test_base.rb +0 -16
  521. data/test/square/integration/testdata/image.jpeg +0 -0
  522. data/test/square/internal/multipart/test_form_data.rb +0 -311
  523. data/test/square/internal/types/test_array.rb +0 -37
  524. data/test/square/internal/types/test_boolean.rb +0 -35
  525. data/test/square/internal/types/test_enum.rb +0 -42
  526. data/test/square/internal/types/test_hash.rb +0 -50
  527. data/test/square/internal/types/test_model.rb +0 -105
  528. data/test/square/internal/types/test_union.rb +0 -52
  529. data/test/square/internal/types/test_utils.rb +0 -216
  530. data/test/square_legacy/api/api_test_base.rb +0 -27
  531. data/test/square_legacy/api/test_catalog_api.rb +0 -57
  532. data/test/square_legacy/api/test_customers_api.rb +0 -43
  533. data/test/square_legacy/api/test_employees_api.rb +0 -34
  534. data/test/square_legacy/api/test_labor_api.rb +0 -82
  535. data/test/square_legacy/api/test_locations_api.rb +0 -22
  536. data/test/square_legacy/api/test_merchants_api.rb +0 -38
  537. data/test/square_legacy/api/test_payments_api.rb +0 -40
  538. data/test/square_legacy/api/test_refunds_api.rb +0 -42
  539. data/test/square_legacy/http_response_catcher.rb +0 -14
  540. data/test/square_legacy/webhooks/test_webhooks_helper.rb +0 -153
  541. data/test/test_helper.rb +0 -123
@@ -3,7 +3,9 @@
3
3
  module Square
4
4
  module GiftCards
5
5
  class Client
6
- # @return [Square::GiftCards::Client]
6
+ # @param client [Square::Internal::Http::RawClient]
7
+ #
8
+ # @return [void]
7
9
  def initialize(client:)
8
10
  @client = client
9
11
  end
@@ -11,183 +13,275 @@ module Square
11
13
  # Lists all gift cards. You can specify optional filters to retrieve
12
14
  # a subset of the gift cards. Results are sorted by `created_at` in ascending order.
13
15
  #
16
+ # @param request_options [Hash]
17
+ # @param params [Hash]
18
+ # @option request_options [String] :base_url
19
+ # @option request_options [Hash{String => Object}] :additional_headers
20
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
21
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
22
+ # @option request_options [Integer] :timeout_in_seconds
23
+ # @option params [String, nil] :type
24
+ # @option params [String, nil] :state
25
+ # @option params [Integer, nil] :limit
26
+ # @option params [String, nil] :cursor
27
+ # @option params [String, nil] :customer_id
28
+ #
14
29
  # @return [Square::Types::ListGiftCardsResponse]
15
30
  def list(request_options: {}, **params)
16
- _query_param_names = [
17
- %w[type state limit cursor customer_id],
18
- %i[type state limit cursor customer_id]
19
- ].flatten
20
- _query = params.slice(*_query_param_names)
21
- params.except(*_query_param_names)
31
+ params = Square::Internal::Types::Utils.normalize_keys(params)
32
+ query_param_names = %i[type state limit cursor customer_id]
33
+ query_params = {}
34
+ query_params["type"] = params[:type] if params.key?(:type)
35
+ query_params["state"] = params[:state] if params.key?(:state)
36
+ query_params["limit"] = params[:limit] if params.key?(:limit)
37
+ query_params["cursor"] = params[:cursor] if params.key?(:cursor)
38
+ query_params["customer_id"] = params[:customer_id] if params.key?(:customer_id)
39
+ params.except(*query_param_names)
22
40
 
23
- _request = Square::Internal::JSON::Request.new(
24
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
25
- method: "GET",
26
- path: "v2/gift-cards",
27
- query: _query
28
- )
29
- begin
30
- _response = @client.send(_request)
31
- rescue Net::HTTPRequestTimeout
32
- raise Square::Errors::TimeoutError
33
- end
34
- code = _response.code.to_i
35
- if code.between?(200, 299)
36
- Square::Types::ListGiftCardsResponse.load(_response.body)
37
- else
38
- error_class = Square::Errors::ResponseError.subclass_for_code(code)
39
- raise error_class.new(_response.body, code: code)
41
+ Square::Internal::CursorItemIterator.new(
42
+ cursor_field: :cursor,
43
+ item_field: :gift_cards,
44
+ initial_cursor: query_params[:cursor]
45
+ ) do |next_cursor|
46
+ query_params[:cursor] = next_cursor
47
+ request = Square::Internal::JSON::Request.new(
48
+ base_url: request_options[:base_url],
49
+ method: "GET",
50
+ path: "v2/gift-cards",
51
+ query: query_params,
52
+ request_options: request_options
53
+ )
54
+ begin
55
+ response = @client.send(request)
56
+ rescue Net::HTTPRequestTimeout
57
+ raise Square::Errors::TimeoutError
58
+ end
59
+ code = response.code.to_i
60
+ if code.between?(200, 299)
61
+ Square::Types::ListGiftCardsResponse.load(response.body)
62
+ else
63
+ error_class = Square::Errors::ResponseError.subclass_for_code(code)
64
+ raise error_class.new(response.body, code: code)
65
+ end
40
66
  end
41
67
  end
42
68
 
43
69
  # Creates a digital gift card or registers a physical (plastic) gift card. The resulting gift card
44
70
  # has a `PENDING` state. To activate a gift card so that it can be redeemed for purchases, call
45
71
  # [CreateGiftCardActivity](api-endpoint:GiftCardActivities-CreateGiftCardActivity) and create an `ACTIVATE`
46
- # activity with the initial balance. Alternatively, you can use [RefundPayment](api-endpoint:Refunds-RefundPayment)
72
+ # activity with the initial balance. Alternatively, you can use
73
+ # [RefundPayment](api-endpoint:Refunds-RefundPayment)
47
74
  # to refund a payment to the new gift card.
48
75
  #
76
+ # @param request_options [Hash]
77
+ # @param params [Square::GiftCards::Types::CreateGiftCardRequest]
78
+ # @option request_options [String] :base_url
79
+ # @option request_options [Hash{String => Object}] :additional_headers
80
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
81
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
82
+ # @option request_options [Integer] :timeout_in_seconds
83
+ #
49
84
  # @return [Square::Types::CreateGiftCardResponse]
50
85
  def create(request_options: {}, **params)
51
- _request = Square::Internal::JSON::Request.new(
52
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
86
+ params = Square::Internal::Types::Utils.normalize_keys(params)
87
+ request = Square::Internal::JSON::Request.new(
88
+ base_url: request_options[:base_url],
53
89
  method: "POST",
54
90
  path: "v2/gift-cards",
55
- body: params
91
+ body: Square::GiftCards::Types::CreateGiftCardRequest.new(params).to_h,
92
+ request_options: request_options
56
93
  )
57
94
  begin
58
- _response = @client.send(_request)
95
+ response = @client.send(request)
59
96
  rescue Net::HTTPRequestTimeout
60
97
  raise Square::Errors::TimeoutError
61
98
  end
62
- code = _response.code.to_i
99
+ code = response.code.to_i
63
100
  if code.between?(200, 299)
64
- Square::Types::CreateGiftCardResponse.load(_response.body)
101
+ Square::Types::CreateGiftCardResponse.load(response.body)
65
102
  else
66
103
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
67
- raise error_class.new(_response.body, code: code)
104
+ raise error_class.new(response.body, code: code)
68
105
  end
69
106
  end
70
107
 
71
108
  # Retrieves a gift card using the gift card account number (GAN).
72
109
  #
110
+ # @param request_options [Hash]
111
+ # @param params [Square::GiftCards::Types::GetGiftCardFromGanRequest]
112
+ # @option request_options [String] :base_url
113
+ # @option request_options [Hash{String => Object}] :additional_headers
114
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
115
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
116
+ # @option request_options [Integer] :timeout_in_seconds
117
+ #
73
118
  # @return [Square::Types::GetGiftCardFromGanResponse]
74
119
  def get_from_gan(request_options: {}, **params)
75
- _request = Square::Internal::JSON::Request.new(
76
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
120
+ params = Square::Internal::Types::Utils.normalize_keys(params)
121
+ request = Square::Internal::JSON::Request.new(
122
+ base_url: request_options[:base_url],
77
123
  method: "POST",
78
124
  path: "v2/gift-cards/from-gan",
79
- body: params
125
+ body: Square::GiftCards::Types::GetGiftCardFromGanRequest.new(params).to_h,
126
+ request_options: request_options
80
127
  )
81
128
  begin
82
- _response = @client.send(_request)
129
+ response = @client.send(request)
83
130
  rescue Net::HTTPRequestTimeout
84
131
  raise Square::Errors::TimeoutError
85
132
  end
86
- code = _response.code.to_i
133
+ code = response.code.to_i
87
134
  if code.between?(200, 299)
88
- Square::Types::GetGiftCardFromGanResponse.load(_response.body)
135
+ Square::Types::GetGiftCardFromGanResponse.load(response.body)
89
136
  else
90
137
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
91
- raise error_class.new(_response.body, code: code)
138
+ raise error_class.new(response.body, code: code)
92
139
  end
93
140
  end
94
141
 
95
142
  # Retrieves a gift card using a secure payment token that represents the gift card.
96
143
  #
144
+ # @param request_options [Hash]
145
+ # @param params [Square::GiftCards::Types::GetGiftCardFromNonceRequest]
146
+ # @option request_options [String] :base_url
147
+ # @option request_options [Hash{String => Object}] :additional_headers
148
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
149
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
150
+ # @option request_options [Integer] :timeout_in_seconds
151
+ #
97
152
  # @return [Square::Types::GetGiftCardFromNonceResponse]
98
153
  def get_from_nonce(request_options: {}, **params)
99
- _request = Square::Internal::JSON::Request.new(
100
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
154
+ params = Square::Internal::Types::Utils.normalize_keys(params)
155
+ request = Square::Internal::JSON::Request.new(
156
+ base_url: request_options[:base_url],
101
157
  method: "POST",
102
158
  path: "v2/gift-cards/from-nonce",
103
- body: params
159
+ body: Square::GiftCards::Types::GetGiftCardFromNonceRequest.new(params).to_h,
160
+ request_options: request_options
104
161
  )
105
162
  begin
106
- _response = @client.send(_request)
163
+ response = @client.send(request)
107
164
  rescue Net::HTTPRequestTimeout
108
165
  raise Square::Errors::TimeoutError
109
166
  end
110
- code = _response.code.to_i
167
+ code = response.code.to_i
111
168
  if code.between?(200, 299)
112
- Square::Types::GetGiftCardFromNonceResponse.load(_response.body)
169
+ Square::Types::GetGiftCardFromNonceResponse.load(response.body)
113
170
  else
114
171
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
115
- raise error_class.new(_response.body, code: code)
172
+ raise error_class.new(response.body, code: code)
116
173
  end
117
174
  end
118
175
 
119
176
  # Links a customer to a gift card, which is also referred to as adding a card on file.
120
177
  #
178
+ # @param request_options [Hash]
179
+ # @param params [Square::GiftCards::Types::LinkCustomerToGiftCardRequest]
180
+ # @option request_options [String] :base_url
181
+ # @option request_options [Hash{String => Object}] :additional_headers
182
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
183
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
184
+ # @option request_options [Integer] :timeout_in_seconds
185
+ # @option params [String] :gift_card_id
186
+ #
121
187
  # @return [Square::Types::LinkCustomerToGiftCardResponse]
122
188
  def link_customer(request_options: {}, **params)
123
- _path_param_names = ["gift_card_id"]
189
+ params = Square::Internal::Types::Utils.normalize_keys(params)
190
+ request_data = Square::GiftCards::Types::LinkCustomerToGiftCardRequest.new(params).to_h
191
+ non_body_param_names = ["gift_card_id"]
192
+ body = request_data.except(*non_body_param_names)
124
193
 
125
- _request = Square::Internal::JSON::Request.new(
126
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
194
+ request = Square::Internal::JSON::Request.new(
195
+ base_url: request_options[:base_url],
127
196
  method: "POST",
128
197
  path: "v2/gift-cards/#{params[:gift_card_id]}/link-customer",
129
- body: params.except(*_path_param_names)
198
+ body: body,
199
+ request_options: request_options
130
200
  )
131
201
  begin
132
- _response = @client.send(_request)
202
+ response = @client.send(request)
133
203
  rescue Net::HTTPRequestTimeout
134
204
  raise Square::Errors::TimeoutError
135
205
  end
136
- code = _response.code.to_i
206
+ code = response.code.to_i
137
207
  if code.between?(200, 299)
138
- Square::Types::LinkCustomerToGiftCardResponse.load(_response.body)
208
+ Square::Types::LinkCustomerToGiftCardResponse.load(response.body)
139
209
  else
140
210
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
141
- raise error_class.new(_response.body, code: code)
211
+ raise error_class.new(response.body, code: code)
142
212
  end
143
213
  end
144
214
 
145
215
  # Unlinks a customer from a gift card, which is also referred to as removing a card on file.
146
216
  #
217
+ # @param request_options [Hash]
218
+ # @param params [Square::GiftCards::Types::UnlinkCustomerFromGiftCardRequest]
219
+ # @option request_options [String] :base_url
220
+ # @option request_options [Hash{String => Object}] :additional_headers
221
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
222
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
223
+ # @option request_options [Integer] :timeout_in_seconds
224
+ # @option params [String] :gift_card_id
225
+ #
147
226
  # @return [Square::Types::UnlinkCustomerFromGiftCardResponse]
148
227
  def unlink_customer(request_options: {}, **params)
149
- _path_param_names = ["gift_card_id"]
228
+ params = Square::Internal::Types::Utils.normalize_keys(params)
229
+ request_data = Square::GiftCards::Types::UnlinkCustomerFromGiftCardRequest.new(params).to_h
230
+ non_body_param_names = ["gift_card_id"]
231
+ body = request_data.except(*non_body_param_names)
150
232
 
151
- _request = Square::Internal::JSON::Request.new(
152
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
233
+ request = Square::Internal::JSON::Request.new(
234
+ base_url: request_options[:base_url],
153
235
  method: "POST",
154
236
  path: "v2/gift-cards/#{params[:gift_card_id]}/unlink-customer",
155
- body: params.except(*_path_param_names)
237
+ body: body,
238
+ request_options: request_options
156
239
  )
157
240
  begin
158
- _response = @client.send(_request)
241
+ response = @client.send(request)
159
242
  rescue Net::HTTPRequestTimeout
160
243
  raise Square::Errors::TimeoutError
161
244
  end
162
- code = _response.code.to_i
245
+ code = response.code.to_i
163
246
  if code.between?(200, 299)
164
- Square::Types::UnlinkCustomerFromGiftCardResponse.load(_response.body)
247
+ Square::Types::UnlinkCustomerFromGiftCardResponse.load(response.body)
165
248
  else
166
249
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
167
- raise error_class.new(_response.body, code: code)
250
+ raise error_class.new(response.body, code: code)
168
251
  end
169
252
  end
170
253
 
171
254
  # Retrieves a gift card using the gift card ID.
172
255
  #
256
+ # @param request_options [Hash]
257
+ # @param params [Hash]
258
+ # @option request_options [String] :base_url
259
+ # @option request_options [Hash{String => Object}] :additional_headers
260
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
261
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
262
+ # @option request_options [Integer] :timeout_in_seconds
263
+ # @option params [String] :id
264
+ #
173
265
  # @return [Square::Types::GetGiftCardResponse]
174
266
  def get(request_options: {}, **params)
175
- _request = Square::Internal::JSON::Request.new(
176
- base_url: request_options[:base_url] || Square::Environment::PRODUCTION,
267
+ params = Square::Internal::Types::Utils.normalize_keys(params)
268
+ request = Square::Internal::JSON::Request.new(
269
+ base_url: request_options[:base_url],
177
270
  method: "GET",
178
- path: "v2/gift-cards/#{params[:id]}"
271
+ path: "v2/gift-cards/#{params[:id]}",
272
+ request_options: request_options
179
273
  )
180
274
  begin
181
- _response = @client.send(_request)
275
+ response = @client.send(request)
182
276
  rescue Net::HTTPRequestTimeout
183
277
  raise Square::Errors::TimeoutError
184
278
  end
185
- code = _response.code.to_i
279
+ code = response.code.to_i
186
280
  if code.between?(200, 299)
187
- Square::Types::GetGiftCardResponse.load(_response.body)
281
+ Square::Types::GetGiftCardResponse.load(response.body)
188
282
  else
189
283
  error_class = Square::Errors::ResponseError.subclass_for_code(code)
190
- raise error_class.new(_response.body, code: code)
284
+ raise error_class.new(response.body, code: code)
191
285
  end
192
286
  end
193
287
 
@@ -22,6 +22,12 @@ module Square
22
22
  @request_options = request_options
23
23
  end
24
24
 
25
+ # @return [Hash] The query parameters merged with additional query parameters from request options.
26
+ def encode_query
27
+ additional_query = @request_options&.dig(:additional_query_parameters) || @request_options&.dig("additional_query_parameters") || {}
28
+ @query.merge(additional_query)
29
+ end
30
+
25
31
  # Child classes should implement:
26
32
  # - encode_headers: Returns the encoded HTTP request headers.
27
33
  # - encode_body: Returns the encoded HTTP request body.
@@ -5,6 +5,18 @@ module Square
5
5
  module Http
6
6
  # @api private
7
7
  class RawClient
8
+ # Default HTTP status codes that trigger a retry
9
+ RETRYABLE_STATUSES = [408, 429, 500, 502, 503, 504, 521, 522, 524].freeze
10
+ # Initial delay between retries in seconds
11
+ INITIAL_RETRY_DELAY = 0.5
12
+ # Maximum delay between retries in seconds
13
+ MAX_RETRY_DELAY = 60.0
14
+ # Jitter factor for randomizing retry delays (20%)
15
+ JITTER_FACTOR = 0.2
16
+
17
+ # @return [String] The base URL for requests
18
+ attr_reader :base_url
19
+
8
20
  # @param base_url [String] The base url for the request.
9
21
  # @param max_retries [Integer] The number of times to retry a failed request, defaults to 2.
10
22
  # @param timeout [Float] The timeout for the request, defaults to 60.0 seconds.
@@ -24,34 +36,106 @@ module Square
24
36
  # @return [HTTP::Response] The HTTP response.
25
37
  def send(request)
26
38
  url = build_url(request)
39
+ attempt = 0
40
+ response = nil
27
41
 
28
- http_request = build_http_request(
29
- url:,
30
- method: request.method,
31
- headers: request.encode_headers,
32
- body: request.encode_body
33
- )
42
+ loop do
43
+ http_request = build_http_request(
44
+ url:,
45
+ method: request.method,
46
+ headers: request.encode_headers,
47
+ body: request.encode_body
48
+ )
49
+
50
+ conn = connect(url)
51
+ conn.open_timeout = @timeout
52
+ conn.read_timeout = @timeout
53
+ conn.write_timeout = @timeout
54
+ conn.continue_timeout = @timeout
55
+
56
+ response = conn.request(http_request)
57
+
58
+ break unless should_retry?(response, attempt)
59
+
60
+ delay = retry_delay(response, attempt)
61
+ sleep(delay)
62
+ attempt += 1
63
+ end
64
+
65
+ response
66
+ end
67
+
68
+ # Determines if a request should be retried based on the response status code.
69
+ # @param response [Net::HTTPResponse] The HTTP response.
70
+ # @param attempt [Integer] The current retry attempt (0-indexed).
71
+ # @return [Boolean] Whether the request should be retried.
72
+ def should_retry?(response, attempt)
73
+ return false if attempt >= @max_retries
74
+
75
+ status = response.code.to_i
76
+ RETRYABLE_STATUSES.include?(status)
77
+ end
78
+
79
+ # Calculates the delay before the next retry attempt using exponential backoff with jitter.
80
+ # Respects Retry-After header if present.
81
+ # @param response [Net::HTTPResponse] The HTTP response.
82
+ # @param attempt [Integer] The current retry attempt (0-indexed).
83
+ # @return [Float] The delay in seconds before the next retry.
84
+ def retry_delay(response, attempt)
85
+ # Check for Retry-After header (can be seconds or HTTP date)
86
+ retry_after = response["Retry-After"]
87
+ if retry_after
88
+ delay = parse_retry_after(retry_after)
89
+ return [delay, MAX_RETRY_DELAY].min if delay&.positive?
90
+ end
91
+
92
+ # Exponential backoff with jitter: base_delay * 2^attempt
93
+ base_delay = INITIAL_RETRY_DELAY * (2**attempt)
94
+ add_jitter([base_delay, MAX_RETRY_DELAY].min)
95
+ end
96
+
97
+ # Parses the Retry-After header value.
98
+ # @param value [String] The Retry-After header value (seconds or HTTP date).
99
+ # @return [Float, nil] The delay in seconds, or nil if parsing fails.
100
+ def parse_retry_after(value)
101
+ # Try parsing as integer (seconds)
102
+ seconds = Integer(value, exception: false)
103
+ return seconds.to_f if seconds
34
104
 
35
- conn = connect(url)
36
- conn.open_timeout = @timeout
37
- conn.read_timeout = @timeout
38
- conn.write_timeout = @timeout
39
- conn.continue_timeout = @timeout
40
-
41
- conn.request(http_request)
42
- # begin
43
- # conn.request(http_request)
44
- # rescue StandardError => e
45
- # raise HttpError, "HTTP request failed: #{e.message}"
46
- # end
105
+ # Try parsing as HTTP date
106
+ begin
107
+ retry_time = Time.httpdate(value)
108
+ delay = retry_time - Time.now
109
+ delay.positive? ? delay : nil
110
+ rescue ArgumentError
111
+ nil
112
+ end
113
+ end
114
+
115
+ # Adds random jitter to a delay value.
116
+ # @param delay [Float] The base delay in seconds.
117
+ # @return [Float] The delay with jitter applied.
118
+ def add_jitter(delay)
119
+ jitter = delay * JITTER_FACTOR * (rand - 0.5) * 2
120
+ [delay + jitter, 0].max
47
121
  end
48
122
 
49
123
  # @param request [Square::Internal::Http::BaseRequest] The HTTP request.
50
124
  # @return [URI::Generic] The URL.
51
125
  def build_url(request)
126
+ encoded_query = request.encode_query
127
+
128
+ # If the path is already an absolute URL, use it directly
129
+ if request.path.start_with?("http://", "https://")
130
+ url = request.path
131
+ url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
132
+ return URI.parse(url)
133
+ end
134
+
52
135
  path = request.path.start_with?("/") ? request.path[1..] : request.path
53
- url = "#{@base_url.chomp("/")}/#{path}"
54
- url = "#{url}?#{encode_query(request.query)}" if request.query&.any?
136
+ base = request.base_url || @base_url
137
+ url = "#{base.chomp("/")}/#{path}"
138
+ url = "#{url}?#{encode_query(encoded_query)}" if encoded_query&.any?
55
139
  URI.parse(url)
56
140
  end
57
141
 
@@ -96,9 +180,16 @@ module Square
96
180
 
97
181
  http = Net::HTTP.new(url.host, port)
98
182
  http.use_ssl = is_https
183
+ # NOTE: We handle retries at the application level with HTTP status code awareness,
184
+ # so we set max_retries to 0 to disable Net::HTTP's built-in network-level retries.
99
185
  http.max_retries = 0
100
186
  http
101
187
  end
188
+
189
+ # @return [String]
190
+ def inspect
191
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} @base_url=#{@base_url.inspect}>"
192
+ end
102
193
  end
103
194
  end
104
195
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Square
4
+ module Internal
5
+ class CursorItemIterator < ItemIterator
6
+ # Instantiates a CursorItemIterator, an Enumerable class which wraps calls to a cursor-based paginated API and yields individual items from it.
7
+ #
8
+ # @param initial_cursor [String] The initial cursor to use when iterating, if any.
9
+ # @param cursor_field [Symbol] The field in API responses to extract the next cursor from.
10
+ # @param item_field [Symbol] The field in API responses to extract the items to iterate over.
11
+ # @param block [Proc] A block which is responsible for receiving a cursor to use and returning the given page from the API.
12
+ # @return [Square::Internal::CursorItemIterator]
13
+ def initialize(initial_cursor:, cursor_field:, item_field:, &)
14
+ super()
15
+ @item_field = item_field
16
+ @page_iterator = CursorPageIterator.new(initial_cursor:, cursor_field:, &)
17
+ @page = nil
18
+ end
19
+
20
+ # Returns the CursorPageIterator mediating access to the underlying API.
21
+ #
22
+ # @return [Square::Internal::CursorPageIterator]
23
+ def pages
24
+ @page_iterator
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Square
4
+ module Internal
5
+ class CursorPageIterator
6
+ include Enumerable
7
+
8
+ # Instantiates a CursorPageIterator, an Enumerable class which wraps calls to a cursor-based paginated API and yields pages of items.
9
+ #
10
+ # @param initial_cursor [String] The initial cursor to use when iterating, if any.
11
+ # @param cursor_field [Symbol] The name of the field in API responses to extract the next cursor from.
12
+ # @param block [Proc] A block which is responsible for receiving a cursor to use and returning the given page from the API.
13
+ # @return [Square::Internal::CursorPageIterator]
14
+ def initialize(initial_cursor:, cursor_field:, &block)
15
+ @need_initial_load = initial_cursor.nil?
16
+ @cursor = initial_cursor
17
+ @cursor_field = cursor_field
18
+ @get_next_page = block
19
+ end
20
+
21
+ # Iterates over each page returned by the API.
22
+ #
23
+ # @param block [Proc] The block which each retrieved page is yielded to.
24
+ # @return [NilClass]
25
+ def each(&block)
26
+ while (page = next_page)
27
+ block.call(page)
28
+ end
29
+ end
30
+
31
+ # Whether another page will be available from the API.
32
+ #
33
+ # @return [Boolean]
34
+ def next?
35
+ @need_initial_load || !@cursor.nil?
36
+ end
37
+
38
+ # Retrieves the next page from the API.
39
+ #
40
+ # @return [Boolean]
41
+ def next_page
42
+ return if !@need_initial_load && @cursor.nil?
43
+
44
+ @need_initial_load = false
45
+ fetched_page = @get_next_page.call(@cursor)
46
+ @cursor = fetched_page.send(@cursor_field)
47
+ fetched_page
48
+ end
49
+ end
50
+ end
51
+ end