vitable-connect 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +16 -0
  3. data/.fernignore +7 -0
  4. data/.rubocop.yml +110 -0
  5. data/CONTRIBUTING.md +120 -0
  6. data/LICENSE +201 -0
  7. data/README.md +170 -123
  8. data/Rakefile +20 -0
  9. data/custom.gemspec.rb +16 -0
  10. data/lib/VitableConnect/auth/client.rb +52 -0
  11. data/lib/VitableConnect/auth/types/issue_access_token_request.rb +13 -0
  12. data/lib/VitableConnect/client.rb +67 -0
  13. data/lib/VitableConnect/employees/client.rb +161 -0
  14. data/lib/VitableConnect/employees/types/get_employees_request.rb +11 -0
  15. data/lib/VitableConnect/employees/types/list_enrollments_employees_request.rb +15 -0
  16. data/lib/VitableConnect/employees/types/patched_update_employee_request.rb +27 -0
  17. data/lib/VitableConnect/employers/client.rb +904 -0
  18. data/lib/VitableConnect/employers/types/census_sync_request.rb +13 -0
  19. data/lib/VitableConnect/employers/types/create_employer_request.rb +23 -0
  20. data/lib/VitableConnect/employers/types/ensure_payroll_integration_email_employers_request.rb +11 -0
  21. data/lib/VitableConnect/employers/types/get_benefit_plan_year_employers_request.rb +13 -0
  22. data/lib/VitableConnect/employers/types/get_employers_request.rb +11 -0
  23. data/lib/VitableConnect/employers/types/get_hris_employers_request.rb +11 -0
  24. data/lib/VitableConnect/employers/types/get_invoice_pdf_employers_request.rb +13 -0
  25. data/lib/VitableConnect/employers/types/get_payroll_access_setup_employers_request.rb +11 -0
  26. data/lib/VitableConnect/employers/types/list_benefit_plan_year_enrollments_employers_request.rb +21 -0
  27. data/lib/VitableConnect/employers/types/list_benefit_plan_years_employers_request.rb +11 -0
  28. data/lib/VitableConnect/employers/types/list_employees_employers_request.rb +19 -0
  29. data/lib/VitableConnect/employers/types/list_employers_request.rb +25 -0
  30. data/lib/VitableConnect/employers/types/list_invoices_employers_request.rb +15 -0
  31. data/lib/VitableConnect/employers/types/list_payroll_deduction_statements_employers_request.rb +15 -0
  32. data/lib/VitableConnect/employers/types/submit_payroll_access_setup_request.rb +57 -0
  33. data/lib/VitableConnect/employers/types/update_employer_request.rb +19 -0
  34. data/lib/VitableConnect/employers/types/update_employer_settings_request.rb +13 -0
  35. data/lib/VitableConnect/enrollments/client.rb +152 -0
  36. data/lib/VitableConnect/enrollments/types/get_enrollments_request.rb +11 -0
  37. data/lib/VitableConnect/enrollments/types/reissue_enrollment_request.rb +17 -0
  38. data/lib/VitableConnect/enrollments/types/terminate_enrollment_request.rb +17 -0
  39. data/lib/VitableConnect/environment.rb +9 -0
  40. data/lib/VitableConnect/errors/api_error.rb +8 -0
  41. data/lib/VitableConnect/errors/client_error.rb +17 -0
  42. data/lib/VitableConnect/errors/redirect_error.rb +8 -0
  43. data/lib/VitableConnect/errors/response_error.rb +42 -0
  44. data/lib/VitableConnect/errors/server_error.rb +11 -0
  45. data/lib/VitableConnect/errors/timeout_error.rb +8 -0
  46. data/lib/VitableConnect/groups/client.rb +199 -0
  47. data/lib/VitableConnect/groups/members/client.rb +21 -0
  48. data/lib/VitableConnect/groups/members/sync/client.rb +122 -0
  49. data/lib/VitableConnect/groups/members/sync/types/get_sync_request.rb +17 -0
  50. data/lib/VitableConnect/groups/members/sync/types/group_member_sync_request.rb +17 -0
  51. data/lib/VitableConnect/groups/types/create_group_request.rb +13 -0
  52. data/lib/VitableConnect/groups/types/get_groups_request.rb +11 -0
  53. data/lib/VitableConnect/groups/types/list_groups_request.rb +13 -0
  54. data/lib/VitableConnect/groups/types/patched_update_group_request.rb +15 -0
  55. data/lib/VitableConnect/internal/errors/constraint_error.rb +10 -0
  56. data/lib/VitableConnect/internal/errors/type_error.rb +10 -0
  57. data/lib/VitableConnect/internal/http/base_request.rb +51 -0
  58. data/lib/VitableConnect/internal/http/raw_client.rb +265 -0
  59. data/lib/VitableConnect/internal/iterators/cursor_item_iterator.rb +28 -0
  60. data/lib/VitableConnect/internal/iterators/cursor_page_iterator.rb +63 -0
  61. data/lib/VitableConnect/internal/iterators/item_iterator.rb +65 -0
  62. data/lib/VitableConnect/internal/iterators/offset_item_iterator.rb +30 -0
  63. data/lib/VitableConnect/internal/iterators/offset_page_iterator.rb +103 -0
  64. data/lib/VitableConnect/internal/json/request.rb +41 -0
  65. data/lib/VitableConnect/internal/json/serializable.rb +25 -0
  66. data/lib/VitableConnect/internal/multipart/multipart_encoder.rb +141 -0
  67. data/lib/VitableConnect/internal/multipart/multipart_form_data.rb +78 -0
  68. data/lib/VitableConnect/internal/multipart/multipart_form_data_part.rb +51 -0
  69. data/lib/VitableConnect/internal/multipart/multipart_request.rb +40 -0
  70. data/lib/VitableConnect/internal/types/array.rb +47 -0
  71. data/lib/VitableConnect/internal/types/boolean.rb +34 -0
  72. data/lib/VitableConnect/internal/types/enum.rb +56 -0
  73. data/lib/VitableConnect/internal/types/hash.rb +36 -0
  74. data/lib/VitableConnect/internal/types/model/field.rb +38 -0
  75. data/lib/VitableConnect/internal/types/model.rb +208 -0
  76. data/lib/VitableConnect/internal/types/type.rb +35 -0
  77. data/lib/VitableConnect/internal/types/union.rb +161 -0
  78. data/lib/VitableConnect/internal/types/unknown.rb +15 -0
  79. data/lib/VitableConnect/internal/types/utils.rb +116 -0
  80. data/lib/VitableConnect/members/client.rb +385 -0
  81. data/lib/VitableConnect/members/types/get_household_members_request.rb +11 -0
  82. data/lib/VitableConnect/members/types/get_members_request.rb +11 -0
  83. data/lib/VitableConnect/members/types/list_dependents_members_request.rb +11 -0
  84. data/lib/VitableConnect/members/types/list_employments_members_request.rb +11 -0
  85. data/lib/VitableConnect/members/types/list_enrollments_members_request.rb +11 -0
  86. data/lib/VitableConnect/members/types/list_id_cards_members_request.rb +11 -0
  87. data/lib/VitableConnect/members/types/list_members_request.rb +15 -0
  88. data/lib/VitableConnect/members/types/list_qualifying_life_events_members_request.rb +17 -0
  89. data/lib/VitableConnect/organizations/client.rb +92 -0
  90. data/lib/VitableConnect/organizations/types/create_organization_request.rb +13 -0
  91. data/lib/VitableConnect/plans/client.rb +69 -0
  92. data/lib/VitableConnect/plans/types/list_plans_request.rb +13 -0
  93. data/lib/VitableConnect/types/access_method.rb +12 -0
  94. data/lib/VitableConnect/types/access_token_response.rb +15 -0
  95. data/lib/VitableConnect/types/additional_access_method.rb +12 -0
  96. data/lib/VitableConnect/types/address.rb +22 -0
  97. data/lib/VitableConnect/types/address_request.rb +17 -0
  98. data/lib/VitableConnect/types/benefit_family.rb +16 -0
  99. data/lib/VitableConnect/types/benefit_family_param_item.rb +16 -0
  100. data/lib/VitableConnect/types/benefit_lifecycle_stage_item.rb +15 -0
  101. data/lib/VitableConnect/types/benefit_plan_network.rb +29 -0
  102. data/lib/VitableConnect/types/benefit_plan_year_detail.rb +52 -0
  103. data/lib/VitableConnect/types/benefit_plan_year_id.rb +23 -0
  104. data/lib/VitableConnect/types/benefit_plan_year_list.rb +47 -0
  105. data/lib/VitableConnect/types/benefit_status.rb +14 -0
  106. data/lib/VitableConnect/types/benefit_summary.rb +15 -0
  107. data/lib/VitableConnect/types/bound_entity.rb +11 -0
  108. data/lib/VitableConnect/types/bound_entity_response.rb +11 -0
  109. data/lib/VitableConnect/types/bound_entity_type.rb +12 -0
  110. data/lib/VitableConnect/types/card_type.rb +14 -0
  111. data/lib/VitableConnect/types/category.rb +14 -0
  112. data/lib/VitableConnect/types/census_sync_detail_response.rb +10 -0
  113. data/lib/VitableConnect/types/census_sync_employee_address_request.rb +17 -0
  114. data/lib/VitableConnect/types/census_sync_employee_request.rb +27 -0
  115. data/lib/VitableConnect/types/census_sync_response.rb +11 -0
  116. data/lib/VitableConnect/types/classification_correction_source.rb +12 -0
  117. data/lib/VitableConnect/types/compensation_type.rb +12 -0
  118. data/lib/VitableConnect/types/contribution_class_compensation.rb +13 -0
  119. data/lib/VitableConnect/types/contribution_class_employment.rb +15 -0
  120. data/lib/VitableConnect/types/contribution_class_location.rb +12 -0
  121. data/lib/VitableConnect/types/contribution_range.rb +11 -0
  122. data/lib/VitableConnect/types/contribution_strategy.rb +13 -0
  123. data/lib/VitableConnect/types/contribution_tier.rb +26 -0
  124. data/lib/VitableConnect/types/coverage_tier.rb +15 -0
  125. data/lib/VitableConnect/types/create_organization_request_type.rb +16 -0
  126. data/lib/VitableConnect/types/created_after.rb +23 -0
  127. data/lib/VitableConnect/types/created_before.rb +23 -0
  128. data/lib/VitableConnect/types/deduction_detail.rb +21 -0
  129. data/lib/VitableConnect/types/deduction_frequency.rb +14 -0
  130. data/lib/VitableConnect/types/digital_benefit_card.rb +36 -0
  131. data/lib/VitableConnect/types/election_status_item.rb +14 -0
  132. data/lib/VitableConnect/types/eligibility_policy.rb +17 -0
  133. data/lib/VitableConnect/types/eligibility_policy_rule.rb +15 -0
  134. data/lib/VitableConnect/types/eligibility_rule_compensation_type.rb +13 -0
  135. data/lib/VitableConnect/types/eligibility_rule_employee_class.rb +17 -0
  136. data/lib/VitableConnect/types/eligible_geographical_location.rb +11 -0
  137. data/lib/VitableConnect/types/eligible_geographical_location_type.rb +12 -0
  138. data/lib/VitableConnect/types/employee.rb +53 -0
  139. data/lib/VitableConnect/types/employee_address.rb +17 -0
  140. data/lib/VitableConnect/types/employee_address_input.rb +19 -0
  141. data/lib/VitableConnect/types/employee_class.rb +16 -0
  142. data/lib/VitableConnect/types/employee_id.rb +23 -0
  143. data/lib/VitableConnect/types/employee_list_response.rb +12 -0
  144. data/lib/VitableConnect/types/employee_response.rb +10 -0
  145. data/lib/VitableConnect/types/employee_search.rb +23 -0
  146. data/lib/VitableConnect/types/employee_status.rb +12 -0
  147. data/lib/VitableConnect/types/employer.rb +34 -0
  148. data/lib/VitableConnect/types/employer_address.rb +18 -0
  149. data/lib/VitableConnect/types/employer_address_input.rb +17 -0
  150. data/lib/VitableConnect/types/employer_benefit_lifecycle_stage.rb +11 -0
  151. data/lib/VitableConnect/types/employer_benefit_plan_year_response.rb +10 -0
  152. data/lib/VitableConnect/types/employer_benefit_plan_years_list_response.rb +9 -0
  153. data/lib/VitableConnect/types/employer_contact.rb +12 -0
  154. data/lib/VitableConnect/types/employer_hris.rb +9 -0
  155. data/lib/VitableConnect/types/employer_hris_response.rb +10 -0
  156. data/lib/VitableConnect/types/employer_hris_status.rb +13 -0
  157. data/lib/VitableConnect/types/employer_id.rb +23 -0
  158. data/lib/VitableConnect/types/employer_invoice_pdf.rb +9 -0
  159. data/lib/VitableConnect/types/employer_invoice_pdf_response.rb +10 -0
  160. data/lib/VitableConnect/types/employer_invoices_list_response.rb +12 -0
  161. data/lib/VitableConnect/types/employer_payroll_deduction_statement_list_response.rb +12 -0
  162. data/lib/VitableConnect/types/employer_response.rb +10 -0
  163. data/lib/VitableConnect/types/employer_search.rb +23 -0
  164. data/lib/VitableConnect/types/employer_settings.rb +9 -0
  165. data/lib/VitableConnect/types/employer_settings_response.rb +10 -0
  166. data/lib/VitableConnect/types/enrollment.rb +34 -0
  167. data/lib/VitableConnect/types/enrollment_detail.rb +39 -0
  168. data/lib/VitableConnect/types/enrollment_id.rb +23 -0
  169. data/lib/VitableConnect/types/enrollment_list_response.rb +12 -0
  170. data/lib/VitableConnect/types/enrollment_rate.rb +13 -0
  171. data/lib/VitableConnect/types/enrollment_rate_summary.rb +13 -0
  172. data/lib/VitableConnect/types/enrollment_response.rb +10 -0
  173. data/lib/VitableConnect/types/enrollment_status.rb +14 -0
  174. data/lib/VitableConnect/types/error_response.rb +17 -0
  175. data/lib/VitableConnect/types/event_id.rb +23 -0
  176. data/lib/VitableConnect/types/event_name.rb +21 -0
  177. data/lib/VitableConnect/types/gender.rb +15 -0
  178. data/lib/VitableConnect/types/grant_type.rb +11 -0
  179. data/lib/VitableConnect/types/group.rb +19 -0
  180. data/lib/VitableConnect/types/group_id.rb +23 -0
  181. data/lib/VitableConnect/types/group_list_response.rb +12 -0
  182. data/lib/VitableConnect/types/group_member_sync_detail_response.rb +10 -0
  183. data/lib/VitableConnect/types/group_member_sync_failure.rb +13 -0
  184. data/lib/VitableConnect/types/group_member_sync_member_request.rb +23 -0
  185. data/lib/VitableConnect/types/group_member_sync_request_detail.rb +17 -0
  186. data/lib/VitableConnect/types/group_member_sync_request_detail_response.rb +10 -0
  187. data/lib/VitableConnect/types/group_member_sync_response.rb +13 -0
  188. data/lib/VitableConnect/types/group_member_sync_results.rb +13 -0
  189. data/lib/VitableConnect/types/group_response.rb +10 -0
  190. data/lib/VitableConnect/types/household_member.rb +22 -0
  191. data/lib/VitableConnect/types/household_member_relationship.rb +14 -0
  192. data/lib/VitableConnect/types/household_member_type.rb +13 -0
  193. data/lib/VitableConnect/types/household_members_response.rb +10 -0
  194. data/lib/VitableConnect/types/hris_connection.rb +17 -0
  195. data/lib/VitableConnect/types/hris_status_item.rb +15 -0
  196. data/lib/VitableConnect/types/ichra_contribution_class.rb +29 -0
  197. data/lib/VitableConnect/types/idp_provider.rb +12 -0
  198. data/lib/VitableConnect/types/include_cancelled.rb +23 -0
  199. data/lib/VitableConnect/types/invoice.rb +15 -0
  200. data/lib/VitableConnect/types/invoice_id.rb +23 -0
  201. data/lib/VitableConnect/types/invoices_cursor_pagination.rb +9 -0
  202. data/lib/VitableConnect/types/limit.rb +23 -0
  203. data/lib/VitableConnect/types/list_webhook_event_deliveries_response.rb +9 -0
  204. data/lib/VitableConnect/types/marital_status.rb +12 -0
  205. data/lib/VitableConnect/types/member.rb +42 -0
  206. data/lib/VitableConnect/types/member_address.rb +17 -0
  207. data/lib/VitableConnect/types/member_dependents_response.rb +10 -0
  208. data/lib/VitableConnect/types/member_digital_benefit_cards_response.rb +10 -0
  209. data/lib/VitableConnect/types/member_employments_response.rb +10 -0
  210. data/lib/VitableConnect/types/member_enrollment.rb +58 -0
  211. data/lib/VitableConnect/types/member_enrollments_response.rb +10 -0
  212. data/lib/VitableConnect/types/member_id.rb +23 -0
  213. data/lib/VitableConnect/types/member_legal_dependent.rb +24 -0
  214. data/lib/VitableConnect/types/member_list_item.rb +20 -0
  215. data/lib/VitableConnect/types/member_list_response.rb +12 -0
  216. data/lib/VitableConnect/types/member_qualifying_life_event.rb +19 -0
  217. data/lib/VitableConnect/types/member_qualifying_life_event_list_response.rb +12 -0
  218. data/lib/VitableConnect/types/member_response.rb +10 -0
  219. data/lib/VitableConnect/types/member_search.rb +23 -0
  220. data/lib/VitableConnect/types/member_status.rb +12 -0
  221. data/lib/VitableConnect/types/missing_employee_resolution.rb +12 -0
  222. data/lib/VitableConnect/types/name_suffix.rb +17 -0
  223. data/lib/VitableConnect/types/offset.rb +23 -0
  224. data/lib/VitableConnect/types/operation.rb +12 -0
  225. data/lib/VitableConnect/types/organization.rb +19 -0
  226. data/lib/VitableConnect/types/organization_employer.rb +44 -0
  227. data/lib/VitableConnect/types/organization_employer_list_response.rb +12 -0
  228. data/lib/VitableConnect/types/organization_hris_provider.rb +11 -0
  229. data/lib/VitableConnect/types/organization_hris_providers_response.rb +10 -0
  230. data/lib/VitableConnect/types/organization_type.rb +16 -0
  231. data/lib/VitableConnect/types/organizations_list_response.rb +12 -0
  232. data/lib/VitableConnect/types/page.rb +23 -0
  233. data/lib/VitableConnect/types/pagination.rb +16 -0
  234. data/lib/VitableConnect/types/payroll_access_setup_status.rb +11 -0
  235. data/lib/VitableConnect/types/payroll_access_setup_status_response.rb +10 -0
  236. data/lib/VitableConnect/types/payroll_deduction_statement.rb +29 -0
  237. data/lib/VitableConnect/types/payroll_integration_email.rb +9 -0
  238. data/lib/VitableConnect/types/payroll_integration_email_response.rb +10 -0
  239. data/lib/VitableConnect/types/plan.rb +11 -0
  240. data/lib/VitableConnect/types/plan_list_response.rb +12 -0
  241. data/lib/VitableConnect/types/plan_year_enrollment.rb +35 -0
  242. data/lib/VitableConnect/types/plan_year_enrollment_election_status.rb +14 -0
  243. data/lib/VitableConnect/types/plan_year_enrollment_list_response.rb +12 -0
  244. data/lib/VitableConnect/types/plan_year_enrollment_policy_status.rb +14 -0
  245. data/lib/VitableConnect/types/preferred_language.rb +16 -0
  246. data/lib/VitableConnect/types/product_code.rb +25 -0
  247. data/lib/VitableConnect/types/qualifying_life_event_status.rb +13 -0
  248. data/lib/VitableConnect/types/qualifying_life_event_type.rb +31 -0
  249. data/lib/VitableConnect/types/reissue_enrollment.rb +9 -0
  250. data/lib/VitableConnect/types/reissue_enrollment_response.rb +10 -0
  251. data/lib/VitableConnect/types/relationship.rb +12 -0
  252. data/lib/VitableConnect/types/remaining_employee_action.rb +12 -0
  253. data/lib/VitableConnect/types/request_id.rb +23 -0
  254. data/lib/VitableConnect/types/resource_id.rb +23 -0
  255. data/lib/VitableConnect/types/resource_type.rb +16 -0
  256. data/lib/VitableConnect/types/search.rb +23 -0
  257. data/lib/VitableConnect/types/sex_at_birth.rb +14 -0
  258. data/lib/VitableConnect/types/state.rb +72 -0
  259. data/lib/VitableConnect/types/status.rb +13 -0
  260. data/lib/VitableConnect/types/tax_classification.rb +13 -0
  261. data/lib/VitableConnect/types/termination_rule.rb +12 -0
  262. data/lib/VitableConnect/types/update_employer_address_input.rb +17 -0
  263. data/lib/VitableConnect/types/waiting_period.rb +13 -0
  264. data/lib/VitableConnect/types/webhook_delivery.rb +25 -0
  265. data/lib/VitableConnect/types/webhook_event.rb +19 -0
  266. data/lib/VitableConnect/types/webhook_event_list_response.rb +12 -0
  267. data/lib/VitableConnect/types/webhook_event_response.rb +10 -0
  268. data/lib/{vitable_connect → VitableConnect}/version.rb +1 -1
  269. data/lib/VitableConnect/webhook_events/client.rb +156 -0
  270. data/lib/VitableConnect/webhook_events/types/get_webhook_events_request.rb +11 -0
  271. data/lib/VitableConnect/webhook_events/types/list_deliveries_webhook_events_request.rb +11 -0
  272. data/lib/VitableConnect/webhook_events/types/list_webhook_events_request.rb +23 -0
  273. data/lib/VitableConnect.rb +268 -0
  274. data/lib/vitable_connect.rb +4 -105
  275. data/reference.md +3722 -0
  276. metadata +286 -266
  277. data/.ignore +0 -2
  278. data/CHANGELOG.md +0 -133
  279. data/lib/vitable_connect/client.rb +0 -139
  280. data/lib/vitable_connect/errors.rb +0 -228
  281. data/lib/vitable_connect/file_part.rb +0 -58
  282. data/lib/vitable_connect/internal/page_number_page.rb +0 -113
  283. data/lib/vitable_connect/internal/transport/base_client.rb +0 -582
  284. data/lib/vitable_connect/internal/transport/pooled_net_requester.rb +0 -210
  285. data/lib/vitable_connect/internal/type/array_of.rb +0 -168
  286. data/lib/vitable_connect/internal/type/base_model.rb +0 -534
  287. data/lib/vitable_connect/internal/type/base_page.rb +0 -55
  288. data/lib/vitable_connect/internal/type/boolean.rb +0 -77
  289. data/lib/vitable_connect/internal/type/converter.rb +0 -327
  290. data/lib/vitable_connect/internal/type/enum.rb +0 -152
  291. data/lib/vitable_connect/internal/type/file_input.rb +0 -111
  292. data/lib/vitable_connect/internal/type/hash_of.rb +0 -188
  293. data/lib/vitable_connect/internal/type/request_parameters.rb +0 -42
  294. data/lib/vitable_connect/internal/type/union.rb +0 -245
  295. data/lib/vitable_connect/internal/type/unknown.rb +0 -81
  296. data/lib/vitable_connect/internal/util.rb +0 -966
  297. data/lib/vitable_connect/internal.rb +0 -20
  298. data/lib/vitable_connect/models/auth_issue_access_token_params.rb +0 -68
  299. data/lib/vitable_connect/models/auth_issue_access_token_response.rb +0 -70
  300. data/lib/vitable_connect/models/employee.rb +0 -310
  301. data/lib/vitable_connect/models/employee_class.rb +0 -25
  302. data/lib/vitable_connect/models/employee_list_enrollments_params.rb +0 -38
  303. data/lib/vitable_connect/models/employee_retrieve_params.rb +0 -22
  304. data/lib/vitable_connect/models/employee_retrieve_response.rb +0 -18
  305. data/lib/vitable_connect/models/employer.rb +0 -155
  306. data/lib/vitable_connect/models/employer_create_params.rb +0 -115
  307. data/lib/vitable_connect/models/employer_list_employees_params.rb +0 -38
  308. data/lib/vitable_connect/models/employer_list_params.rb +0 -30
  309. data/lib/vitable_connect/models/employer_response.rb +0 -19
  310. data/lib/vitable_connect/models/employer_retrieve_params.rb +0 -22
  311. data/lib/vitable_connect/models/employer_submit_census_sync_params.rb +0 -374
  312. data/lib/vitable_connect/models/employer_submit_census_sync_response.rb +0 -35
  313. data/lib/vitable_connect/models/employer_update_settings_params.rb +0 -52
  314. data/lib/vitable_connect/models/employer_update_settings_response.rb +0 -56
  315. data/lib/vitable_connect/models/enrollment.rb +0 -234
  316. data/lib/vitable_connect/models/enrollment_retrieve_params.rb +0 -22
  317. data/lib/vitable_connect/models/enrollment_retrieve_response.rb +0 -18
  318. data/lib/vitable_connect/models/enrollment_status.rb +0 -21
  319. data/lib/vitable_connect/models/group.rb +0 -57
  320. data/lib/vitable_connect/models/group_create_params.rb +0 -26
  321. data/lib/vitable_connect/models/group_list_params.rb +0 -30
  322. data/lib/vitable_connect/models/group_response.rb +0 -18
  323. data/lib/vitable_connect/models/group_retrieve_params.rb +0 -22
  324. data/lib/vitable_connect/models/group_update_params.rb +0 -36
  325. data/lib/vitable_connect/models/groups/members/sync_retrieve_params.rb +0 -33
  326. data/lib/vitable_connect/models/groups/members/sync_retrieve_response.rb +0 -128
  327. data/lib/vitable_connect/models/groups/members/sync_submit_params.rb +0 -121
  328. data/lib/vitable_connect/models/groups/members/sync_submit_response.rb +0 -45
  329. data/lib/vitable_connect/models/pagination.rb +0 -42
  330. data/lib/vitable_connect/models/plan_list_params.rb +0 -30
  331. data/lib/vitable_connect/models/plan_list_response.rb +0 -22
  332. data/lib/vitable_connect/models/type.rb +0 -17
  333. data/lib/vitable_connect/models/webhook_event.rb +0 -62
  334. data/lib/vitable_connect/models/webhook_event_list_deliveries_params.rb +0 -20
  335. data/lib/vitable_connect/models/webhook_event_list_deliveries_response.rb +0 -92
  336. data/lib/vitable_connect/models/webhook_event_list_params.rb +0 -132
  337. data/lib/vitable_connect/models/webhook_event_retrieve_params.rb +0 -20
  338. data/lib/vitable_connect/models/webhook_event_retrieve_response.rb +0 -18
  339. data/lib/vitable_connect/models.rb +0 -104
  340. data/lib/vitable_connect/request_options.rb +0 -78
  341. data/lib/vitable_connect/resources/auth.rb +0 -41
  342. data/lib/vitable_connect/resources/benefit_eligibility_policies.rb +0 -14
  343. data/lib/vitable_connect/resources/employees.rb +0 -65
  344. data/lib/vitable_connect/resources/employers.rb +0 -184
  345. data/lib/vitable_connect/resources/enrollments.rb +0 -35
  346. data/lib/vitable_connect/resources/groups/members/sync.rb +0 -74
  347. data/lib/vitable_connect/resources/groups/members.rb +0 -20
  348. data/lib/vitable_connect/resources/groups.rb +0 -114
  349. data/lib/vitable_connect/resources/plans.rb +0 -41
  350. data/lib/vitable_connect/resources/webhook_events.rb +0 -95
  351. data/manifest.yaml +0 -17
  352. data/rbi/vitable_connect/client.rbi +0 -93
  353. data/rbi/vitable_connect/errors.rbi +0 -205
  354. data/rbi/vitable_connect/file_part.rbi +0 -37
  355. data/rbi/vitable_connect/internal/page_number_page.rbi +0 -49
  356. data/rbi/vitable_connect/internal/transport/base_client.rbi +0 -307
  357. data/rbi/vitable_connect/internal/transport/pooled_net_requester.rbi +0 -84
  358. data/rbi/vitable_connect/internal/type/array_of.rbi +0 -108
  359. data/rbi/vitable_connect/internal/type/base_model.rbi +0 -314
  360. data/rbi/vitable_connect/internal/type/base_page.rbi +0 -43
  361. data/rbi/vitable_connect/internal/type/boolean.rbi +0 -58
  362. data/rbi/vitable_connect/internal/type/converter.rbi +0 -225
  363. data/rbi/vitable_connect/internal/type/enum.rbi +0 -82
  364. data/rbi/vitable_connect/internal/type/file_input.rbi +0 -59
  365. data/rbi/vitable_connect/internal/type/hash_of.rbi +0 -108
  366. data/rbi/vitable_connect/internal/type/request_parameters.rbi +0 -31
  367. data/rbi/vitable_connect/internal/type/union.rbi +0 -130
  368. data/rbi/vitable_connect/internal/type/unknown.rbi +0 -58
  369. data/rbi/vitable_connect/internal/util.rbi +0 -515
  370. data/rbi/vitable_connect/internal.rbi +0 -18
  371. data/rbi/vitable_connect/models/auth_issue_access_token_params.rbi +0 -147
  372. data/rbi/vitable_connect/models/auth_issue_access_token_response.rbi +0 -128
  373. data/rbi/vitable_connect/models/employee.rbi +0 -450
  374. data/rbi/vitable_connect/models/employee_class.rbi +0 -38
  375. data/rbi/vitable_connect/models/employee_list_enrollments_params.rbi +0 -68
  376. data/rbi/vitable_connect/models/employee_retrieve_params.rbi +0 -46
  377. data/rbi/vitable_connect/models/employee_retrieve_response.rbi +0 -32
  378. data/rbi/vitable_connect/models/employer.rbi +0 -197
  379. data/rbi/vitable_connect/models/employer_create_params.rbi +0 -169
  380. data/rbi/vitable_connect/models/employer_list_employees_params.rbi +0 -68
  381. data/rbi/vitable_connect/models/employer_list_params.rbi +0 -60
  382. data/rbi/vitable_connect/models/employer_response.rbi +0 -36
  383. data/rbi/vitable_connect/models/employer_retrieve_params.rbi +0 -46
  384. data/rbi/vitable_connect/models/employer_submit_census_sync_params.rbi +0 -819
  385. data/rbi/vitable_connect/models/employer_submit_census_sync_response.rbi +0 -76
  386. data/rbi/vitable_connect/models/employer_update_settings_params.rbi +0 -114
  387. data/rbi/vitable_connect/models/employer_update_settings_response.rbi +0 -147
  388. data/rbi/vitable_connect/models/enrollment.rbi +0 -401
  389. data/rbi/vitable_connect/models/enrollment_retrieve_params.rbi +0 -46
  390. data/rbi/vitable_connect/models/enrollment_retrieve_response.rbi +0 -34
  391. data/rbi/vitable_connect/models/enrollment_status.rbi +0 -32
  392. data/rbi/vitable_connect/models/group.rbi +0 -77
  393. data/rbi/vitable_connect/models/group_create_params.rbi +0 -46
  394. data/rbi/vitable_connect/models/group_list_params.rbi +0 -60
  395. data/rbi/vitable_connect/models/group_response.rbi +0 -32
  396. data/rbi/vitable_connect/models/group_retrieve_params.rbi +0 -43
  397. data/rbi/vitable_connect/models/group_update_params.rbi +0 -58
  398. data/rbi/vitable_connect/models/groups/members/sync_retrieve_params.rbi +0 -56
  399. data/rbi/vitable_connect/models/groups/members/sync_retrieve_response.rbi +0 -282
  400. data/rbi/vitable_connect/models/groups/members/sync_submit_params.rbi +0 -214
  401. data/rbi/vitable_connect/models/groups/members/sync_submit_response.rbi +0 -92
  402. data/rbi/vitable_connect/models/pagination.rbi +0 -62
  403. data/rbi/vitable_connect/models/plan_list_params.rbi +0 -60
  404. data/rbi/vitable_connect/models/plan_list_response.rbi +0 -29
  405. data/rbi/vitable_connect/models/type.rbi +0 -21
  406. data/rbi/vitable_connect/models/webhook_event.rbi +0 -81
  407. data/rbi/vitable_connect/models/webhook_event_list_deliveries_params.rbi +0 -38
  408. data/rbi/vitable_connect/models/webhook_event_list_deliveries_response.rbi +0 -147
  409. data/rbi/vitable_connect/models/webhook_event_list_params.rbi +0 -299
  410. data/rbi/vitable_connect/models/webhook_event_retrieve_params.rbi +0 -38
  411. data/rbi/vitable_connect/models/webhook_event_retrieve_response.rbi +0 -34
  412. data/rbi/vitable_connect/models.rbi +0 -70
  413. data/rbi/vitable_connect/request_options.rbi +0 -61
  414. data/rbi/vitable_connect/resources/auth.rbi +0 -36
  415. data/rbi/vitable_connect/resources/benefit_eligibility_policies.rbi +0 -12
  416. data/rbi/vitable_connect/resources/employees.rbi +0 -51
  417. data/rbi/vitable_connect/resources/employers.rbi +0 -150
  418. data/rbi/vitable_connect/resources/enrollments.rbi +0 -27
  419. data/rbi/vitable_connect/resources/groups/members/sync.rbi +0 -62
  420. data/rbi/vitable_connect/resources/groups/members.rbi +0 -17
  421. data/rbi/vitable_connect/resources/groups.rbi +0 -79
  422. data/rbi/vitable_connect/resources/plans.rbi +0 -34
  423. data/rbi/vitable_connect/resources/webhook_events.rbi +0 -83
  424. data/rbi/vitable_connect/version.rbi +0 -5
  425. data/sig/vitable_connect/client.rbs +0 -46
  426. data/sig/vitable_connect/errors.rbs +0 -117
  427. data/sig/vitable_connect/file_part.rbs +0 -21
  428. data/sig/vitable_connect/internal/page_number_page.rbs +0 -28
  429. data/sig/vitable_connect/internal/transport/base_client.rbs +0 -133
  430. data/sig/vitable_connect/internal/transport/pooled_net_requester.rbs +0 -48
  431. data/sig/vitable_connect/internal/type/array_of.rbs +0 -48
  432. data/sig/vitable_connect/internal/type/base_model.rbs +0 -104
  433. data/sig/vitable_connect/internal/type/base_page.rbs +0 -24
  434. data/sig/vitable_connect/internal/type/boolean.rbs +0 -26
  435. data/sig/vitable_connect/internal/type/converter.rbs +0 -79
  436. data/sig/vitable_connect/internal/type/enum.rbs +0 -32
  437. data/sig/vitable_connect/internal/type/file_input.rbs +0 -25
  438. data/sig/vitable_connect/internal/type/hash_of.rbs +0 -48
  439. data/sig/vitable_connect/internal/type/request_parameters.rbs +0 -20
  440. data/sig/vitable_connect/internal/type/union.rbs +0 -52
  441. data/sig/vitable_connect/internal/type/unknown.rbs +0 -26
  442. data/sig/vitable_connect/internal/util.rbs +0 -199
  443. data/sig/vitable_connect/internal.rbs +0 -10
  444. data/sig/vitable_connect/models/auth_issue_access_token_params.rbs +0 -56
  445. data/sig/vitable_connect/models/auth_issue_access_token_response.rbs +0 -50
  446. data/sig/vitable_connect/models/employee.rbs +0 -214
  447. data/sig/vitable_connect/models/employee_class.rbs +0 -24
  448. data/sig/vitable_connect/models/employee_list_enrollments_params.rbs +0 -36
  449. data/sig/vitable_connect/models/employee_retrieve_params.rbs +0 -24
  450. data/sig/vitable_connect/models/employee_retrieve_response.rbs +0 -13
  451. data/sig/vitable_connect/models/employer.rbs +0 -112
  452. data/sig/vitable_connect/models/employer_create_params.rbs +0 -93
  453. data/sig/vitable_connect/models/employer_list_employees_params.rbs +0 -36
  454. data/sig/vitable_connect/models/employer_list_params.rbs +0 -32
  455. data/sig/vitable_connect/models/employer_response.rbs +0 -13
  456. data/sig/vitable_connect/models/employer_retrieve_params.rbs +0 -24
  457. data/sig/vitable_connect/models/employer_submit_census_sync_params.rbs +0 -274
  458. data/sig/vitable_connect/models/employer_submit_census_sync_response.rbs +0 -30
  459. data/sig/vitable_connect/models/employer_update_settings_params.rbs +0 -44
  460. data/sig/vitable_connect/models/employer_update_settings_response.rbs +0 -48
  461. data/sig/vitable_connect/models/enrollment.rbs +0 -164
  462. data/sig/vitable_connect/models/enrollment_retrieve_params.rbs +0 -24
  463. data/sig/vitable_connect/models/enrollment_retrieve_response.rbs +0 -13
  464. data/sig/vitable_connect/models/enrollment_status.rbs +0 -16
  465. data/sig/vitable_connect/models/group.rbs +0 -45
  466. data/sig/vitable_connect/models/group_create_params.rbs +0 -28
  467. data/sig/vitable_connect/models/group_list_params.rbs +0 -32
  468. data/sig/vitable_connect/models/group_response.rbs +0 -13
  469. data/sig/vitable_connect/models/group_retrieve_params.rbs +0 -23
  470. data/sig/vitable_connect/models/group_update_params.rbs +0 -32
  471. data/sig/vitable_connect/models/groups/members/sync_retrieve_params.rbs +0 -32
  472. data/sig/vitable_connect/models/groups/members/sync_retrieve_response.rbs +0 -126
  473. data/sig/vitable_connect/models/groups/members/sync_submit_params.rbs +0 -124
  474. data/sig/vitable_connect/models/groups/members/sync_submit_response.rbs +0 -47
  475. data/sig/vitable_connect/models/pagination.rbs +0 -30
  476. data/sig/vitable_connect/models/plan_list_params.rbs +0 -32
  477. data/sig/vitable_connect/models/plan_list_response.rbs +0 -15
  478. data/sig/vitable_connect/models/type.rbs +0 -14
  479. data/sig/vitable_connect/models/webhook_event.rbs +0 -45
  480. data/sig/vitable_connect/models/webhook_event_list_deliveries_params.rbs +0 -23
  481. data/sig/vitable_connect/models/webhook_event_list_deliveries_response.rbs +0 -77
  482. data/sig/vitable_connect/models/webhook_event_list_params.rbs +0 -124
  483. data/sig/vitable_connect/models/webhook_event_retrieve_params.rbs +0 -23
  484. data/sig/vitable_connect/models/webhook_event_retrieve_response.rbs +0 -14
  485. data/sig/vitable_connect/models.rbs +0 -61
  486. data/sig/vitable_connect/request_options.rbs +0 -36
  487. data/sig/vitable_connect/resources/auth.rbs +0 -13
  488. data/sig/vitable_connect/resources/benefit_eligibility_policies.rbs +0 -7
  489. data/sig/vitable_connect/resources/employees.rbs +0 -19
  490. data/sig/vitable_connect/resources/employers.rbs +0 -48
  491. data/sig/vitable_connect/resources/enrollments.rbs +0 -12
  492. data/sig/vitable_connect/resources/groups/members/sync.rbs +0 -23
  493. data/sig/vitable_connect/resources/groups/members.rbs +0 -11
  494. data/sig/vitable_connect/resources/groups.rbs +0 -33
  495. data/sig/vitable_connect/resources/plans.rbs +0 -13
  496. data/sig/vitable_connect/resources/webhook_events.rbs +0 -28
  497. data/sig/vitable_connect/version.rbs +0 -3
@@ -1,582 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module VitableConnect
4
- module Internal
5
- module Transport
6
- # @api private
7
- #
8
- # @abstract
9
- class BaseClient
10
- extend VitableConnect::Internal::Util::SorbetRuntimeSupport
11
-
12
- # from whatwg fetch spec
13
- MAX_REDIRECTS = 20
14
-
15
- # rubocop:disable Style/MutableConstant
16
- PLATFORM_HEADERS =
17
- {
18
- "x-stainless-arch" => VitableConnect::Internal::Util.arch,
19
- "x-stainless-lang" => "ruby",
20
- "x-stainless-os" => VitableConnect::Internal::Util.os,
21
- "x-stainless-package-version" => VitableConnect::VERSION,
22
- "x-stainless-runtime" => ::RUBY_ENGINE,
23
- "x-stainless-runtime-version" => ::RUBY_ENGINE_VERSION
24
- }
25
- # rubocop:enable Style/MutableConstant
26
-
27
- class << self
28
- # @api private
29
- #
30
- # @param req [Hash{Symbol=>Object}]
31
- #
32
- # @raise [ArgumentError]
33
- def validate!(req)
34
- keys = [:method, :path, :query, :headers, :body, :unwrap, :page, :stream, :model, :options]
35
- case req
36
- in Hash
37
- req.each_key do |k|
38
- unless keys.include?(k)
39
- raise ArgumentError.new("Request `req` keys must be one of #{keys}, got #{k.inspect}")
40
- end
41
- end
42
- else
43
- raise ArgumentError.new("Request `req` must be a Hash or RequestOptions, got #{req.inspect}")
44
- end
45
- end
46
-
47
- # @api private
48
- #
49
- # @param status [Integer]
50
- # @param headers [Hash{String=>String}]
51
- #
52
- # @return [Boolean]
53
- def should_retry?(status, headers:)
54
- coerced = VitableConnect::Internal::Util.coerce_boolean(headers["x-should-retry"])
55
- case [coerced, status]
56
- in [true | false, _]
57
- coerced
58
- in [_, 408 | 409 | 429 | (500..)]
59
- # retry on:
60
- # 408: timeouts
61
- # 409: locks
62
- # 429: rate limits
63
- # 500+: unknown errors
64
- true
65
- else
66
- false
67
- end
68
- end
69
-
70
- # @api private
71
- #
72
- # @param request [Hash{Symbol=>Object}] .
73
- #
74
- # @option request [Symbol] :method
75
- #
76
- # @option request [URI::Generic] :url
77
- #
78
- # @option request [Hash{String=>String}] :headers
79
- #
80
- # @option request [Object] :body
81
- #
82
- # @option request [Integer] :max_retries
83
- #
84
- # @option request [Float] :timeout
85
- #
86
- # @param status [Integer]
87
- #
88
- # @param response_headers [Hash{String=>String}]
89
- #
90
- # @return [Hash{Symbol=>Object}]
91
- def follow_redirect(request, status:, response_headers:)
92
- method, url, headers = request.fetch_values(:method, :url, :headers)
93
- location =
94
- Kernel.then do
95
- URI.join(url, response_headers["location"])
96
- rescue ArgumentError
97
- message = "Server responded with status #{status} but no valid location header."
98
- raise VitableConnect::Errors::APIConnectionError.new(
99
- url: url,
100
- response: response_headers,
101
- message: message
102
- )
103
- end
104
-
105
- request = {**request, url: location}
106
-
107
- case [url.scheme, location.scheme]
108
- in ["https", "http"]
109
- message = "Tried to redirect to a insecure URL"
110
- raise VitableConnect::Errors::APIConnectionError.new(
111
- url: url,
112
- response: response_headers,
113
- message: message
114
- )
115
- else
116
- nil
117
- end
118
-
119
- # from whatwg fetch spec
120
- case [status, method]
121
- in [301 | 302, :post] | [303, _]
122
- drop = %w[content-encoding content-language content-length content-location content-type]
123
- request = {
124
- **request,
125
- method: method == :head ? :head : :get,
126
- headers: headers.except(*drop),
127
- body: nil
128
- }
129
- else
130
- end
131
-
132
- # from undici
133
- if VitableConnect::Internal::Util.uri_origin(url) != VitableConnect::Internal::Util.uri_origin(location)
134
- drop = %w[authorization cookie host proxy-authorization]
135
- request = {**request, headers: request.fetch(:headers).except(*drop)}
136
- end
137
-
138
- request
139
- end
140
-
141
- # @api private
142
- #
143
- # @param status [Integer, VitableConnect::Errors::APIConnectionError]
144
- # @param stream [Enumerable<String>, nil]
145
- def reap_connection!(status, stream:)
146
- case status
147
- in (..199) | (300..499)
148
- stream&.each { next }
149
- in VitableConnect::Errors::APIConnectionError | (500..)
150
- VitableConnect::Internal::Util.close_fused!(stream)
151
- else
152
- end
153
- end
154
- end
155
-
156
- # @return [URI::Generic]
157
- attr_reader :base_url
158
-
159
- # @return [Float]
160
- attr_reader :timeout
161
-
162
- # @return [Integer]
163
- attr_reader :max_retries
164
-
165
- # @return [Float]
166
- attr_reader :initial_retry_delay
167
-
168
- # @return [Float]
169
- attr_reader :max_retry_delay
170
-
171
- # @return [Hash{String=>String}]
172
- attr_reader :headers
173
-
174
- # @return [String, nil]
175
- attr_reader :idempotency_header
176
-
177
- # @api private
178
- # @return [VitableConnect::Internal::Transport::PooledNetRequester]
179
- attr_reader :requester
180
-
181
- # @api private
182
- #
183
- # @param base_url [String]
184
- # @param timeout [Float]
185
- # @param max_retries [Integer]
186
- # @param initial_retry_delay [Float]
187
- # @param max_retry_delay [Float]
188
- # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
189
- # @param idempotency_header [String, nil]
190
- def initialize(
191
- base_url:,
192
- timeout: 0.0,
193
- max_retries: 0,
194
- initial_retry_delay: 0.0,
195
- max_retry_delay: 0.0,
196
- headers: {},
197
- idempotency_header: nil
198
- )
199
- @requester = VitableConnect::Internal::Transport::PooledNetRequester.new
200
- @headers = VitableConnect::Internal::Util.normalized_headers(
201
- self.class::PLATFORM_HEADERS,
202
- {
203
- "accept" => "application/json",
204
- "content-type" => "application/json",
205
- "user-agent" => user_agent
206
- },
207
- headers
208
- )
209
- @base_url_components = VitableConnect::Internal::Util.parse_uri(base_url)
210
- @base_url = VitableConnect::Internal::Util.unparse_uri(@base_url_components)
211
- @idempotency_header = idempotency_header&.to_s&.downcase
212
- @timeout = timeout
213
- @max_retries = max_retries
214
- @initial_retry_delay = initial_retry_delay
215
- @max_retry_delay = max_retry_delay
216
- end
217
-
218
- # @api private
219
- #
220
- # @return [Hash{String=>String}]
221
- private def auth_headers = {}
222
-
223
- # @api private
224
- #
225
- # @return [String]
226
- private def user_agent = "#{self.class.name}/Ruby #{VitableConnect::VERSION}"
227
-
228
- # @api private
229
- #
230
- # @return [String]
231
- private def generate_idempotency_key = "stainless-ruby-retry-#{SecureRandom.uuid}"
232
-
233
- # @api private
234
- #
235
- # @param req [Hash{Symbol=>Object}] .
236
- #
237
- # @option req [Symbol] :method
238
- #
239
- # @option req [String, Array<String>] :path
240
- #
241
- # @option req [Hash{String=>Array<String>, String, nil}, nil] :query
242
- #
243
- # @option req [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}, nil] :headers
244
- #
245
- # @option req [Object, nil] :body
246
- #
247
- # @option req [Symbol, Integer, Array<Symbol, Integer>, Proc, nil] :unwrap
248
- #
249
- # @option req [Class<VitableConnect::Internal::Type::BasePage>, nil] :page
250
- #
251
- # @option req [Class<VitableConnect::Internal::Type::BaseStream>, nil] :stream
252
- #
253
- # @option req [VitableConnect::Internal::Type::Converter, Class, nil] :model
254
- #
255
- # @param opts [Hash{Symbol=>Object}] .
256
- #
257
- # @option opts [String, nil] :idempotency_key
258
- #
259
- # @option opts [Hash{String=>Array<String>, String, nil}, nil] :extra_query
260
- #
261
- # @option opts [Hash{String=>String, nil}, nil] :extra_headers
262
- #
263
- # @option opts [Object, nil] :extra_body
264
- #
265
- # @option opts [Integer, nil] :max_retries
266
- #
267
- # @option opts [Float, nil] :timeout
268
- #
269
- # @return [Hash{Symbol=>Object}]
270
- private def build_request(req, opts)
271
- method, uninterpolated_path = req.fetch_values(:method, :path)
272
-
273
- path = VitableConnect::Internal::Util.interpolate_path(uninterpolated_path)
274
-
275
- query = VitableConnect::Internal::Util.deep_merge(req[:query].to_h, opts[:extra_query].to_h)
276
-
277
- headers = VitableConnect::Internal::Util.normalized_headers(
278
- @headers,
279
- auth_headers,
280
- req[:headers].to_h,
281
- opts[:extra_headers].to_h
282
- )
283
-
284
- if @idempotency_header &&
285
- !headers.key?(@idempotency_header) &&
286
- (!Net::HTTP::IDEMPOTENT_METHODS_.include?(method.to_s.upcase) || opts.key?(:idempotency_key))
287
- headers[@idempotency_header] = opts.fetch(:idempotency_key) { generate_idempotency_key }
288
- end
289
-
290
- unless headers.key?("x-stainless-retry-count")
291
- headers["x-stainless-retry-count"] = "0"
292
- end
293
-
294
- timeout = opts.fetch(:timeout, @timeout).to_f.clamp(0..)
295
- unless headers.key?("x-stainless-timeout") || timeout.zero?
296
- headers["x-stainless-timeout"] = timeout.to_s
297
- end
298
-
299
- headers.reject! { |_, v| v.to_s.empty? }
300
-
301
- body =
302
- case method
303
- in :get | :head | :options | :trace
304
- nil
305
- else
306
- VitableConnect::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
307
- end
308
-
309
- # Generated methods always pass `req[:body]` for operations that define a
310
- # request body, so only elide the content-type header when the operation
311
- # has no body at all, not when an optional body param was omitted.
312
- headers.delete("content-type") if body.nil? && !req.key?(:body)
313
-
314
- url = VitableConnect::Internal::Util.join_parsed_uri(
315
- @base_url_components,
316
- {**req, path: path, query: query}
317
- )
318
- headers, encoded = VitableConnect::Internal::Util.encode_content(headers, body)
319
- {
320
- method: method,
321
- url: url,
322
- headers: headers,
323
- body: encoded,
324
- max_retries: opts.fetch(:max_retries, @max_retries),
325
- timeout: timeout
326
- }
327
- end
328
-
329
- # @api private
330
- #
331
- # @param headers [Hash{String=>String}]
332
- # @param retry_count [Integer]
333
- #
334
- # @return [Float]
335
- private def retry_delay(headers, retry_count:)
336
- # Non-standard extension
337
- span = Float(headers["retry-after-ms"], exception: false)&.then { _1 / 1000 }
338
- return span if span
339
-
340
- retry_header = headers["retry-after"]
341
- return span if (span = Float(retry_header, exception: false))
342
-
343
- span = retry_header&.then do
344
- Time.httpdate(_1) - Time.now
345
- rescue ArgumentError
346
- nil
347
- end
348
- return span if span
349
-
350
- scale = retry_count**2
351
- jitter = 1 - (0.25 * rand)
352
- (@initial_retry_delay * scale * jitter).clamp(0, @max_retry_delay)
353
- end
354
-
355
- # @api private
356
- #
357
- # @param request [Hash{Symbol=>Object}] .
358
- #
359
- # @option request [Symbol] :method
360
- #
361
- # @option request [URI::Generic] :url
362
- #
363
- # @option request [Hash{String=>String}] :headers
364
- #
365
- # @option request [Object] :body
366
- #
367
- # @option request [Integer] :max_retries
368
- #
369
- # @option request [Float] :timeout
370
- #
371
- # @param redirect_count [Integer]
372
- #
373
- # @param retry_count [Integer]
374
- #
375
- # @param send_retry_header [Boolean]
376
- #
377
- # @raise [VitableConnect::Errors::APIError]
378
- # @return [Array(Integer, Net::HTTPResponse, Enumerable<String>)]
379
- def send_request(request, redirect_count:, retry_count:, send_retry_header:)
380
- url, headers, max_retries, timeout = request.fetch_values(:url, :headers, :max_retries, :timeout)
381
- input = {**request.except(:timeout), deadline: VitableConnect::Internal::Util.monotonic_secs + timeout}
382
-
383
- if send_retry_header
384
- headers["x-stainless-retry-count"] = retry_count.to_s
385
- end
386
-
387
- begin
388
- status, response, stream = @requester.execute(input)
389
- rescue VitableConnect::Errors::APIConnectionError => e
390
- status = e
391
- end
392
- headers = VitableConnect::Internal::Util.normalized_headers(response&.each_header&.to_h)
393
-
394
- case status
395
- in ..299
396
- [status, response, stream]
397
- in 300..399 if redirect_count >= self.class::MAX_REDIRECTS
398
- self.class.reap_connection!(status, stream: stream)
399
-
400
- message = "Failed to complete the request within #{self.class::MAX_REDIRECTS} redirects."
401
- raise VitableConnect::Errors::APIConnectionError.new(
402
- url: url,
403
- response: response,
404
- message: message
405
- )
406
- in 300..399
407
- self.class.reap_connection!(status, stream: stream)
408
-
409
- request = self.class.follow_redirect(request, status: status, response_headers: headers)
410
- send_request(
411
- request,
412
- redirect_count: redirect_count + 1,
413
- retry_count: retry_count,
414
- send_retry_header: send_retry_header
415
- )
416
- in VitableConnect::Errors::APIConnectionError if retry_count >= max_retries
417
- raise status
418
- in (400..) if retry_count >= max_retries || !self.class.should_retry?(status, headers: headers)
419
- decoded = Kernel.then do
420
- VitableConnect::Internal::Util.decode_content(headers, stream: stream, suppress_error: true)
421
- ensure
422
- self.class.reap_connection!(status, stream: stream)
423
- end
424
-
425
- raise VitableConnect::Errors::APIStatusError.for(
426
- url: url,
427
- status: status,
428
- headers: headers,
429
- body: decoded,
430
- request: nil,
431
- response: response
432
- )
433
- in (400..) | VitableConnect::Errors::APIConnectionError
434
- self.class.reap_connection!(status, stream: stream)
435
-
436
- delay = retry_delay(response || {}, retry_count: retry_count)
437
- sleep(delay)
438
-
439
- send_request(
440
- request,
441
- redirect_count: redirect_count,
442
- retry_count: retry_count + 1,
443
- send_retry_header: send_retry_header
444
- )
445
- end
446
- end
447
-
448
- # Execute the request specified by `req`. This is the method that all resource
449
- # methods call into.
450
- #
451
- # @overload request(method, path, query: {}, headers: {}, body: nil, unwrap: nil, page: nil, stream: nil, model: VitableConnect::Internal::Type::Unknown, options: {})
452
- #
453
- # @param method [Symbol]
454
- #
455
- # @param path [String, Array<String>]
456
- #
457
- # @param query [Hash{String=>Array<String>, String, nil}, nil]
458
- #
459
- # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}, nil]
460
- #
461
- # @param body [Object, nil]
462
- #
463
- # @param unwrap [Symbol, Integer, Array<Symbol, Integer>, Proc, nil]
464
- #
465
- # @param page [Class<VitableConnect::Internal::Type::BasePage>, nil]
466
- #
467
- # @param stream [Class<VitableConnect::Internal::Type::BaseStream>, nil]
468
- #
469
- # @param model [VitableConnect::Internal::Type::Converter, Class, nil]
470
- #
471
- # @param options [VitableConnect::RequestOptions, Hash{Symbol=>Object}, nil] .
472
- #
473
- # @option options [String, nil] :idempotency_key
474
- #
475
- # @option options [Hash{String=>Array<String>, String, nil}, nil] :extra_query
476
- #
477
- # @option options [Hash{String=>String, nil}, nil] :extra_headers
478
- #
479
- # @option options [Object, nil] :extra_body
480
- #
481
- # @option options [Integer, nil] :max_retries
482
- #
483
- # @option options [Float, nil] :timeout
484
- #
485
- # @raise [VitableConnect::Errors::APIError]
486
- # @return [Object]
487
- def request(req)
488
- self.class.validate!(req)
489
- model = req.fetch(:model) { VitableConnect::Internal::Type::Unknown }
490
- opts = req[:options].to_h
491
- unwrap = req[:unwrap]
492
- VitableConnect::RequestOptions.validate!(opts)
493
- request = build_request(req.except(:options), opts)
494
- url = request.fetch(:url)
495
-
496
- # Don't send the current retry count in the headers if the caller modified the header defaults.
497
- send_retry_header = request.fetch(:headers)["x-stainless-retry-count"] == "0"
498
- status, response, stream = send_request(
499
- request,
500
- redirect_count: 0,
501
- retry_count: 0,
502
- send_retry_header: send_retry_header
503
- )
504
-
505
- headers = VitableConnect::Internal::Util.normalized_headers(response.each_header.to_h)
506
- decoded = VitableConnect::Internal::Util.decode_content(headers, stream: stream)
507
- case req
508
- in {stream: Class => st}
509
- st.new(
510
- model: model,
511
- url: url,
512
- status: status,
513
- headers: headers,
514
- response: response,
515
- unwrap: unwrap,
516
- stream: decoded
517
- )
518
- in {page: Class => page}
519
- page.new(client: self, req: req, headers: headers, page_data: decoded)
520
- else
521
- unwrapped = VitableConnect::Internal::Util.dig(decoded, unwrap)
522
- VitableConnect::Internal::Type::Converter.coerce(model, unwrapped)
523
- end
524
- end
525
-
526
- # @api private
527
- #
528
- # @return [String]
529
- def inspect
530
- # rubocop:disable Layout/LineLength
531
- "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{@base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
532
- # rubocop:enable Layout/LineLength
533
- end
534
-
535
- define_sorbet_constant!(:RequestComponents) do
536
- T.type_alias do
537
- {
538
- method: Symbol,
539
- path: T.any(String, T::Array[String]),
540
- query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]),
541
- headers: T.nilable(
542
- T::Hash[String,
543
- T.nilable(
544
- T.any(
545
- String,
546
- Integer,
547
- T::Array[T.nilable(T.any(String, Integer))]
548
- )
549
- )]
550
- ),
551
- body: T.nilable(T.anything),
552
- unwrap: T.nilable(
553
- T.any(
554
- Symbol,
555
- Integer,
556
- T::Array[T.any(Symbol, Integer)],
557
- T.proc.params(arg0: T.anything).returns(T.anything)
558
- )
559
- ),
560
- page: T.nilable(T::Class[VitableConnect::Internal::Type::BasePage[VitableConnect::Internal::Type::BaseModel]]),
561
- stream: T.nilable(T::Class[T.anything]),
562
- model: T.nilable(VitableConnect::Internal::Type::Converter::Input),
563
- options: T.nilable(VitableConnect::RequestOptions::OrHash)
564
- }
565
- end
566
- end
567
- define_sorbet_constant!(:RequestInput) do
568
- T.type_alias do
569
- {
570
- method: Symbol,
571
- url: URI::Generic,
572
- headers: T::Hash[String, String],
573
- body: T.anything,
574
- max_retries: Integer,
575
- timeout: Float
576
- }
577
- end
578
- end
579
- end
580
- end
581
- end
582
- end