finch-api 0.1.0.pre.alpha.1 → 0.1.0.pre.alpha.2

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 (417) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +63 -20
  3. data/lib/finch-api/base_client.rb +52 -59
  4. data/lib/finch-api/base_model.rb +453 -415
  5. data/lib/finch-api/base_page.rb +34 -15
  6. data/lib/finch-api/client.rb +3 -7
  7. data/lib/finch-api/errors.rb +12 -17
  8. data/lib/finch-api/extern.rb +1 -4
  9. data/lib/finch-api/individuals_page.rb +28 -34
  10. data/lib/finch-api/models/account_update_event.rb +6 -31
  11. data/lib/finch-api/models/company_event.rb +3 -11
  12. data/lib/finch-api/models/connect/session_new_params.rb +9 -52
  13. data/lib/finch-api/models/connect/session_reauthenticate_params.rb +3 -22
  14. data/lib/finch-api/models/connection_status_type.rb +3 -21
  15. data/lib/finch-api/models/create_access_token_response.rb +6 -30
  16. data/lib/finch-api/models/directory_event.rb +3 -15
  17. data/lib/finch-api/models/employment_event.rb +3 -15
  18. data/lib/finch-api/models/hris/benefit_contribution.rb +3 -14
  19. data/lib/finch-api/models/hris/benefit_features_and_operations.rb +9 -39
  20. data/lib/finch-api/models/hris/benefit_frequency.rb +3 -15
  21. data/lib/finch-api/models/hris/benefit_type.rb +3 -22
  22. data/lib/finch-api/models/hris/benefits/enrolled_individual.rb +3 -18
  23. data/lib/finch-api/models/hris/benefits/individual_benefit.rb +3 -14
  24. data/lib/finch-api/models/hris/benefits/individual_enroll_many_params.rb +9 -40
  25. data/lib/finch-api/models/hris/company.rb +9 -52
  26. data/lib/finch-api/models/hris/document_list_params.rb +3 -13
  27. data/lib/finch-api/models/hris/document_response.rb +3 -14
  28. data/lib/finch-api/models/hris/document_retreive_response.rb +7 -23
  29. data/lib/finch-api/models/hris/employment_data.rb +9 -58
  30. data/lib/finch-api/models/hris/individual.rb +12 -66
  31. data/lib/finch-api/models/hris/pay_statement.rb +12 -70
  32. data/lib/finch-api/models/hris/payment.rb +3 -21
  33. data/lib/finch-api/models/hris/supported_benefit.rb +9 -39
  34. data/lib/finch-api/models/hris/w42005.rb +12 -49
  35. data/lib/finch-api/models/hris/w42020.rb +8 -29
  36. data/lib/finch-api/models/income.rb +3 -22
  37. data/lib/finch-api/models/individual_event.rb +3 -15
  38. data/lib/finch-api/models/introspection.rb +9 -50
  39. data/lib/finch-api/models/job_completion_event.rb +3 -21
  40. data/lib/finch-api/models/jobs/automated_async_job.rb +6 -35
  41. data/lib/finch-api/models/jobs/automated_create_params.rb +3 -12
  42. data/lib/finch-api/models/jobs/automated_list_response.rb +100 -0
  43. data/lib/finch-api/models/jobs/manual_async_job.rb +3 -17
  44. data/lib/finch-api/models/operation_support.rb +3 -18
  45. data/lib/finch-api/models/pay_statement_event.rb +3 -15
  46. data/lib/finch-api/models/payment_event.rb +3 -15
  47. data/lib/finch-api/models/payroll/pay_group_list_response.rb +3 -21
  48. data/lib/finch-api/models/payroll/pay_group_retrieve_response.rb +3 -21
  49. data/lib/finch-api/models/provider.rb +3 -20
  50. data/lib/finch-api/models/sandbox/company_update_params.rb +9 -52
  51. data/lib/finch-api/models/sandbox/company_update_response.rb +9 -52
  52. data/lib/finch-api/models/sandbox/connection_create_params.rb +3 -17
  53. data/lib/finch-api/models/sandbox/connection_create_response.rb +3 -17
  54. data/lib/finch-api/models/sandbox/connections/account_create_params.rb +3 -17
  55. data/lib/finch-api/models/sandbox/connections/account_create_response.rb +3 -17
  56. data/lib/finch-api/models/sandbox/connections/account_update_response.rb +3 -17
  57. data/lib/finch-api/models/sandbox/directory_create_params.rb +21 -124
  58. data/lib/finch-api/models/sandbox/employment_update_params.rb +9 -58
  59. data/lib/finch-api/models/sandbox/employment_update_response.rb +9 -58
  60. data/lib/finch-api/models/sandbox/individual_update_params.rb +12 -66
  61. data/lib/finch-api/models/sandbox/individual_update_response.rb +12 -66
  62. data/lib/finch-api/models/sandbox/job_create_params.rb +3 -12
  63. data/lib/finch-api/models/sandbox/jobs/configuration_retrieve_response.rb +2 -1
  64. data/lib/finch-api/models/sandbox/jobs/sandbox_job_configuration.rb +6 -28
  65. data/lib/finch-api/models/sandbox/payment_create_params.rb +12 -70
  66. data/lib/finch-api/models/webhook_event.rb +10 -27
  67. data/lib/finch-api/page.rb +28 -34
  68. data/lib/finch-api/pooled_net_requester.rb +51 -46
  69. data/lib/finch-api/request_options.rb +5 -12
  70. data/lib/finch-api/resources/access_tokens.rb +0 -2
  71. data/lib/finch-api/resources/account.rb +0 -3
  72. data/lib/finch-api/resources/connect/sessions.rb +0 -3
  73. data/lib/finch-api/resources/connect.rb +0 -1
  74. data/lib/finch-api/resources/hris/benefits/individuals.rb +2 -6
  75. data/lib/finch-api/resources/hris/benefits.rb +0 -6
  76. data/lib/finch-api/resources/hris/company.rb +0 -2
  77. data/lib/finch-api/resources/hris/directory.rb +1 -24
  78. data/lib/finch-api/resources/hris/documents.rb +4 -7
  79. data/lib/finch-api/resources/hris/employments.rb +0 -2
  80. data/lib/finch-api/resources/hris/individuals.rb +0 -2
  81. data/lib/finch-api/resources/hris/pay_statements.rb +0 -2
  82. data/lib/finch-api/resources/hris/payments.rb +0 -2
  83. data/lib/finch-api/resources/hris.rb +0 -1
  84. data/lib/finch-api/resources/jobs/automated.rb +2 -7
  85. data/lib/finch-api/resources/jobs/manual.rb +0 -2
  86. data/lib/finch-api/resources/jobs.rb +0 -1
  87. data/lib/finch-api/resources/payroll/pay_groups.rb +0 -3
  88. data/lib/finch-api/resources/payroll.rb +0 -1
  89. data/lib/finch-api/resources/providers.rb +0 -2
  90. data/lib/finch-api/resources/request_forwarding.rb +0 -2
  91. data/lib/finch-api/resources/sandbox/company.rb +0 -2
  92. data/lib/finch-api/resources/sandbox/connections/accounts.rb +0 -3
  93. data/lib/finch-api/resources/sandbox/connections.rb +0 -2
  94. data/lib/finch-api/resources/sandbox/directory.rb +0 -2
  95. data/lib/finch-api/resources/sandbox/employment.rb +0 -2
  96. data/lib/finch-api/resources/sandbox/individual.rb +0 -2
  97. data/lib/finch-api/resources/sandbox/jobs/configuration.rb +0 -3
  98. data/lib/finch-api/resources/sandbox/jobs.rb +0 -2
  99. data/lib/finch-api/resources/sandbox/payment.rb +0 -2
  100. data/lib/finch-api/resources/sandbox.rb +0 -1
  101. data/lib/finch-api/resources/webhooks.rb +0 -1
  102. data/lib/finch-api/responses_page.rb +24 -31
  103. data/lib/finch-api/single_page.rb +23 -31
  104. data/lib/finch-api/util.rb +216 -124
  105. data/lib/finch-api/version.rb +1 -1
  106. data/lib/finch-api.rb +17 -0
  107. data/manifest.yaml +1 -0
  108. data/rbi/lib/finch-api/base_client.rbi +89 -66
  109. data/rbi/lib/finch-api/base_model.rbi +403 -236
  110. data/rbi/lib/finch-api/base_page.rbi +3 -6
  111. data/rbi/lib/finch-api/client.rbi +23 -28
  112. data/rbi/lib/finch-api/errors.rbi +20 -22
  113. data/rbi/lib/finch-api/extern.rbi +1 -1
  114. data/rbi/lib/finch-api/individuals_page.rbi +5 -23
  115. data/rbi/lib/finch-api/models/access_token_create_params.rbi +13 -24
  116. data/rbi/lib/finch-api/models/account_disconnect_params.rbi +9 -2
  117. data/rbi/lib/finch-api/models/account_introspect_params.rbi +9 -2
  118. data/rbi/lib/finch-api/models/account_update_event.rbi +871 -983
  119. data/rbi/lib/finch-api/models/base_webhook_event.rbi +13 -19
  120. data/rbi/lib/finch-api/models/company_event.rbi +28 -20
  121. data/rbi/lib/finch-api/models/connect/session_new_params.rbi +90 -104
  122. data/rbi/lib/finch-api/models/connect/session_new_response.rbi +6 -14
  123. data/rbi/lib/finch-api/models/connect/session_reauthenticate_params.rbi +37 -47
  124. data/rbi/lib/finch-api/models/connect/session_reauthenticate_response.rbi +6 -14
  125. data/rbi/lib/finch-api/models/connection_status_type.rbi +13 -9
  126. data/rbi/lib/finch-api/models/create_access_token_response.rbi +61 -78
  127. data/rbi/lib/finch-api/models/directory_event.rbi +42 -27
  128. data/rbi/lib/finch-api/models/disconnect_response.rbi +4 -8
  129. data/rbi/lib/finch-api/models/employment_event.rbi +42 -27
  130. data/rbi/lib/finch-api/models/hris/benefit_contribution.rbi +29 -21
  131. data/rbi/lib/finch-api/models/hris/benefit_create_params.rbi +18 -26
  132. data/rbi/lib/finch-api/models/hris/benefit_features_and_operations.rbi +199 -86
  133. data/rbi/lib/finch-api/models/hris/benefit_frequency.rbi +9 -6
  134. data/rbi/lib/finch-api/models/hris/benefit_list_params.rbi +9 -2
  135. data/rbi/lib/finch-api/models/hris/benefit_list_supported_benefits_params.rbi +9 -2
  136. data/rbi/lib/finch-api/models/hris/benefit_retrieve_params.rbi +9 -2
  137. data/rbi/lib/finch-api/models/hris/benefit_type.rbi +26 -22
  138. data/rbi/lib/finch-api/models/hris/benefit_update_params.rbi +7 -11
  139. data/rbi/lib/finch-api/models/hris/benefits/enrolled_individual.rbi +43 -49
  140. data/rbi/lib/finch-api/models/hris/benefits/individual_benefit.rbi +74 -63
  141. data/rbi/lib/finch-api/models/hris/benefits/individual_enroll_many_params.rbi +249 -104
  142. data/rbi/lib/finch-api/models/hris/benefits/individual_enrolled_ids_params.rbi +9 -2
  143. data/rbi/lib/finch-api/models/hris/benefits/individual_enrolled_ids_response.rbi +4 -14
  144. data/rbi/lib/finch-api/models/hris/benefits/individual_retrieve_many_benefits_params.rbi +11 -8
  145. data/rbi/lib/finch-api/models/hris/benefits/individual_unenroll_many_params.rbi +7 -8
  146. data/rbi/lib/finch-api/models/hris/benefits/unenrolled_individual.rbi +23 -39
  147. data/rbi/lib/finch-api/models/hris/benefits_support.rbi +88 -86
  148. data/rbi/lib/finch-api/models/hris/benfit_contribution.rbi +1 -1
  149. data/rbi/lib/finch-api/models/hris/company.rbi +119 -171
  150. data/rbi/lib/finch-api/models/hris/company_benefit.rbi +13 -32
  151. data/rbi/lib/finch-api/models/hris/company_retrieve_params.rbi +9 -2
  152. data/rbi/lib/finch-api/models/hris/create_company_benefits_response.rbi +3 -8
  153. data/rbi/lib/finch-api/models/hris/directory_list_individuals_params.rbi +11 -13
  154. data/rbi/lib/finch-api/models/hris/directory_list_params.rbi +11 -13
  155. data/rbi/lib/finch-api/models/hris/document_list_params.rbi +32 -31
  156. data/rbi/lib/finch-api/models/hris/document_list_response.rbi +10 -17
  157. data/rbi/lib/finch-api/models/hris/document_response.rbi +40 -43
  158. data/rbi/lib/finch-api/models/hris/document_retreive_params.rbi +9 -2
  159. data/rbi/lib/finch-api/models/hris/document_retreive_response.rbi +6 -4
  160. data/rbi/lib/finch-api/models/hris/employment_data.rbi +163 -205
  161. data/rbi/lib/finch-api/models/hris/employment_data_response.rbi +18 -17
  162. data/rbi/lib/finch-api/models/hris/employment_retrieve_many_params.rbi +12 -21
  163. data/rbi/lib/finch-api/models/hris/individual.rbi +126 -151
  164. data/rbi/lib/finch-api/models/hris/individual_in_directory.rbi +42 -68
  165. data/rbi/lib/finch-api/models/hris/individual_response.rbi +18 -17
  166. data/rbi/lib/finch-api/models/hris/individual_retrieve_many_params.rbi +27 -31
  167. data/rbi/lib/finch-api/models/hris/pay_statement.rbi +290 -341
  168. data/rbi/lib/finch-api/models/hris/pay_statement_response.rbi +18 -20
  169. data/rbi/lib/finch-api/models/hris/pay_statement_response_body.rbi +13 -16
  170. data/rbi/lib/finch-api/models/hris/pay_statement_retrieve_many_params.rbi +18 -31
  171. data/rbi/lib/finch-api/models/hris/payment.rbi +63 -103
  172. data/rbi/lib/finch-api/models/hris/payment_list_params.rbi +9 -15
  173. data/rbi/lib/finch-api/models/hris/support_per_benefit_type.rbi +10 -14
  174. data/rbi/lib/finch-api/models/hris/supported_benefit.rbi +83 -79
  175. data/rbi/lib/finch-api/models/hris/update_company_benefit_response.rbi +3 -8
  176. data/rbi/lib/finch-api/models/hris/w42005.rbi +86 -70
  177. data/rbi/lib/finch-api/models/hris/w42020.rbi +84 -86
  178. data/rbi/lib/finch-api/models/income.rbi +34 -41
  179. data/rbi/lib/finch-api/models/individual_event.rbi +42 -27
  180. data/rbi/lib/finch-api/models/introspection.rbi +138 -178
  181. data/rbi/lib/finch-api/models/job_completion_event.rbi +48 -37
  182. data/rbi/lib/finch-api/models/jobs/automated_async_job.rbi +66 -94
  183. data/rbi/lib/finch-api/models/jobs/automated_create_params.rbi +26 -33
  184. data/rbi/lib/finch-api/models/jobs/automated_create_response.rbi +11 -31
  185. data/rbi/lib/finch-api/models/jobs/automated_list_params.rbi +11 -13
  186. data/rbi/lib/finch-api/models/jobs/automated_list_response.rbi +126 -0
  187. data/rbi/lib/finch-api/models/jobs/automated_retrieve_params.rbi +9 -2
  188. data/rbi/lib/finch-api/models/jobs/manual_async_job.rbi +32 -27
  189. data/rbi/lib/finch-api/models/jobs/manual_retrieve_params.rbi +9 -2
  190. data/rbi/lib/finch-api/models/location.rbi +16 -59
  191. data/rbi/lib/finch-api/models/money.rbi +7 -13
  192. data/rbi/lib/finch-api/models/operation_support.rbi +18 -7
  193. data/rbi/lib/finch-api/models/operation_support_matrix.rbi +65 -27
  194. data/rbi/lib/finch-api/models/paging.rbi +10 -12
  195. data/rbi/lib/finch-api/models/pay_statement_event.rbi +46 -32
  196. data/rbi/lib/finch-api/models/payment_event.rbi +39 -34
  197. data/rbi/lib/finch-api/models/payroll/pay_group_list_params.rbi +9 -13
  198. data/rbi/lib/finch-api/models/payroll/pay_group_list_response.rbi +55 -30
  199. data/rbi/lib/finch-api/models/payroll/pay_group_retrieve_params.rbi +9 -2
  200. data/rbi/lib/finch-api/models/payroll/pay_group_retrieve_response.rbi +45 -46
  201. data/rbi/lib/finch-api/models/provider.rbi +873 -964
  202. data/rbi/lib/finch-api/models/provider_list_params.rbi +9 -2
  203. data/rbi/lib/finch-api/models/request_forwarding_forward_params.rbi +20 -33
  204. data/rbi/lib/finch-api/models/request_forwarding_forward_response.rbi +40 -59
  205. data/rbi/lib/finch-api/models/sandbox/company_update_params.rbi +144 -166
  206. data/rbi/lib/finch-api/models/sandbox/company_update_response.rbi +145 -174
  207. data/rbi/lib/finch-api/models/sandbox/connection_create_params.rbi +43 -39
  208. data/rbi/lib/finch-api/models/sandbox/connection_create_response.rbi +38 -59
  209. data/rbi/lib/finch-api/models/sandbox/connections/account_create_params.rbi +62 -39
  210. data/rbi/lib/finch-api/models/sandbox/connections/account_create_response.rbi +54 -62
  211. data/rbi/lib/finch-api/models/sandbox/connections/account_update_params.rbi +17 -11
  212. data/rbi/lib/finch-api/models/sandbox/connections/account_update_response.rbi +55 -54
  213. data/rbi/lib/finch-api/models/sandbox/directory_create_params.rbi +380 -332
  214. data/rbi/lib/finch-api/models/sandbox/directory_create_response.rbi +1 -1
  215. data/rbi/lib/finch-api/models/sandbox/employment_update_params.rbi +190 -194
  216. data/rbi/lib/finch-api/models/sandbox/employment_update_response.rbi +195 -198
  217. data/rbi/lib/finch-api/models/sandbox/individual_update_params.rbi +151 -145
  218. data/rbi/lib/finch-api/models/sandbox/individual_update_response.rbi +163 -151
  219. data/rbi/lib/finch-api/models/sandbox/job_create_params.rbi +22 -19
  220. data/rbi/lib/finch-api/models/sandbox/job_create_response.rbi +11 -31
  221. data/rbi/lib/finch-api/models/sandbox/jobs/configuration_retrieve_params.rbi +9 -2
  222. data/rbi/lib/finch-api/models/sandbox/jobs/configuration_retrieve_response.rbi +2 -1
  223. data/rbi/lib/finch-api/models/sandbox/jobs/configuration_update_params.rbi +9 -2
  224. data/rbi/lib/finch-api/models/sandbox/jobs/sandbox_job_configuration.rbi +56 -26
  225. data/rbi/lib/finch-api/models/sandbox/payment_create_params.rbi +409 -393
  226. data/rbi/lib/finch-api/models/sandbox/payment_create_response.rbi +6 -14
  227. data/rbi/lib/finch-api/models/webhook_event.rbi +4 -4
  228. data/rbi/lib/finch-api/page.rbi +5 -23
  229. data/rbi/lib/finch-api/pooled_net_requester.rbi +39 -16
  230. data/rbi/lib/finch-api/request_options.rbi +33 -54
  231. data/rbi/lib/finch-api/resources/access_tokens.rbi +4 -3
  232. data/rbi/lib/finch-api/resources/account.rbi +6 -4
  233. data/rbi/lib/finch-api/resources/connect/sessions.rbi +17 -8
  234. data/rbi/lib/finch-api/resources/connect.rbi +3 -4
  235. data/rbi/lib/finch-api/resources/hris/benefits/individuals.rbi +33 -10
  236. data/rbi/lib/finch-api/resources/hris/benefits.rbi +32 -13
  237. data/rbi/lib/finch-api/resources/hris/company.rbi +4 -3
  238. data/rbi/lib/finch-api/resources/hris/directory.rbi +11 -15
  239. data/rbi/lib/finch-api/resources/hris/documents.rbi +27 -7
  240. data/rbi/lib/finch-api/resources/hris/employments.rbi +10 -5
  241. data/rbi/lib/finch-api/resources/hris/individuals.rbi +6 -5
  242. data/rbi/lib/finch-api/resources/hris/pay_statements.rbi +13 -5
  243. data/rbi/lib/finch-api/resources/hris/payments.rbi +13 -4
  244. data/rbi/lib/finch-api/resources/hris.rbi +10 -18
  245. data/rbi/lib/finch-api/resources/jobs/automated.rbi +39 -10
  246. data/rbi/lib/finch-api/resources/jobs/manual.rbi +5 -3
  247. data/rbi/lib/finch-api/resources/jobs.rbi +4 -6
  248. data/rbi/lib/finch-api/resources/payroll/pay_groups.rbi +6 -4
  249. data/rbi/lib/finch-api/resources/payroll.rbi +3 -4
  250. data/rbi/lib/finch-api/resources/providers.rbi +4 -3
  251. data/rbi/lib/finch-api/resources/request_forwarding.rbi +27 -4
  252. data/rbi/lib/finch-api/resources/sandbox/company.rbi +19 -7
  253. data/rbi/lib/finch-api/resources/sandbox/connections/accounts.rbi +19 -7
  254. data/rbi/lib/finch-api/resources/sandbox/connections.rbi +10 -6
  255. data/rbi/lib/finch-api/resources/sandbox/directory.rbi +12 -6
  256. data/rbi/lib/finch-api/resources/sandbox/employment.rbi +30 -11
  257. data/rbi/lib/finch-api/resources/sandbox/individual.rbi +26 -8
  258. data/rbi/lib/finch-api/resources/sandbox/jobs/configuration.rbi +9 -7
  259. data/rbi/lib/finch-api/resources/sandbox/jobs.rbi +11 -7
  260. data/rbi/lib/finch-api/resources/sandbox/payment.rbi +5 -4
  261. data/rbi/lib/finch-api/resources/sandbox.rbi +9 -16
  262. data/rbi/lib/finch-api/resources/webhooks.rbi +2 -2
  263. data/rbi/lib/finch-api/responses_page.rbi +4 -17
  264. data/rbi/lib/finch-api/single_page.rbi +4 -12
  265. data/rbi/lib/finch-api/util.rbi +228 -115
  266. data/rbi/lib/finch-api/version.rbi +1 -1
  267. data/sig/finch-api/base_client.rbs +20 -15
  268. data/sig/finch-api/base_model.rbs +36 -18
  269. data/sig/finch-api/base_page.rbs +1 -1
  270. data/sig/finch-api/client.rbs +8 -8
  271. data/sig/finch-api/errors.rbs +21 -21
  272. data/sig/finch-api/individuals_page.rbs +2 -7
  273. data/sig/finch-api/models/access_token_create_params.rbs +7 -12
  274. data/sig/finch-api/models/account_disconnect_params.rbs +1 -6
  275. data/sig/finch-api/models/account_introspect_params.rbs +1 -6
  276. data/sig/finch-api/models/account_update_event.rbs +204 -361
  277. data/sig/finch-api/models/base_webhook_event.rbs +5 -5
  278. data/sig/finch-api/models/company_event.rbs +13 -11
  279. data/sig/finch-api/models/connect/session_new_params.rbs +28 -32
  280. data/sig/finch-api/models/connect/session_new_response.rbs +1 -6
  281. data/sig/finch-api/models/connect/session_reauthenticate_params.rbs +11 -14
  282. data/sig/finch-api/models/connect/session_reauthenticate_response.rbs +1 -6
  283. data/sig/finch-api/models/connection_status_type.rbs +4 -2
  284. data/sig/finch-api/models/create_access_token_response.rbs +20 -21
  285. data/sig/finch-api/models/directory_event.rbs +13 -19
  286. data/sig/finch-api/models/disconnect_response.rbs +1 -5
  287. data/sig/finch-api/models/employment_event.rbs +13 -19
  288. data/sig/finch-api/models/hris/benefit_contribution.rbs +8 -11
  289. data/sig/finch-api/models/hris/benefit_create_params.rbs +6 -11
  290. data/sig/finch-api/models/hris/benefit_features_and_operations.rbs +25 -29
  291. data/sig/finch-api/models/hris/benefit_frequency.rbs +4 -2
  292. data/sig/finch-api/models/hris/benefit_list_params.rbs +1 -6
  293. data/sig/finch-api/models/hris/benefit_list_supported_benefits_params.rbs +1 -6
  294. data/sig/finch-api/models/hris/benefit_retrieve_params.rbs +1 -6
  295. data/sig/finch-api/models/hris/benefit_type.rbs +4 -2
  296. data/sig/finch-api/models/hris/benefit_update_params.rbs +4 -6
  297. data/sig/finch-api/models/hris/benefits/enrolled_individual.rbs +14 -18
  298. data/sig/finch-api/models/hris/benefits/individual_benefit.rbs +16 -25
  299. data/sig/finch-api/models/hris/benefits/individual_enroll_many_params.rbs +35 -54
  300. data/sig/finch-api/models/hris/benefits/individual_enrolled_ids_params.rbs +1 -6
  301. data/sig/finch-api/models/hris/benefits/individual_enrolled_ids_response.rbs +4 -6
  302. data/sig/finch-api/models/hris/benefits/individual_retrieve_many_benefits_params.rbs +4 -9
  303. data/sig/finch-api/models/hris/benefits/individual_unenroll_many_params.rbs +4 -9
  304. data/sig/finch-api/models/hris/benefits/unenrolled_individual.rbs +10 -16
  305. data/sig/finch-api/models/hris/benefits_support.rbs +14 -18
  306. data/sig/finch-api/models/hris/benfit_contribution.rbs +0 -1
  307. data/sig/finch-api/models/hris/company.rbs +39 -57
  308. data/sig/finch-api/models/hris/company_benefit.rbs +6 -10
  309. data/sig/finch-api/models/hris/company_retrieve_params.rbs +1 -6
  310. data/sig/finch-api/models/hris/create_company_benefits_response.rbs +1 -6
  311. data/sig/finch-api/models/hris/directory_list_individuals_params.rbs +5 -10
  312. data/sig/finch-api/models/hris/directory_list_params.rbs +5 -10
  313. data/sig/finch-api/models/hris/document_list_params.rbs +11 -14
  314. data/sig/finch-api/models/hris/document_list_response.rbs +4 -9
  315. data/sig/finch-api/models/hris/document_response.rbs +11 -14
  316. data/sig/finch-api/models/hris/document_retreive_params.rbs +1 -6
  317. data/sig/finch-api/models/hris/document_retreive_response.rbs +4 -2
  318. data/sig/finch-api/models/hris/employment_data.rbs +41 -59
  319. data/sig/finch-api/models/hris/employment_data_response.rbs +5 -10
  320. data/sig/finch-api/models/hris/employment_retrieve_many_params.rbs +5 -15
  321. data/sig/finch-api/models/hris/individual.rbs +39 -45
  322. data/sig/finch-api/models/hris/individual_in_directory.rbs +11 -26
  323. data/sig/finch-api/models/hris/individual_response.rbs +5 -10
  324. data/sig/finch-api/models/hris/individual_retrieve_many_params.rbs +7 -22
  325. data/sig/finch-api/models/hris/pay_statement.rbs +75 -131
  326. data/sig/finch-api/models/hris/pay_statement_response.rbs +5 -10
  327. data/sig/finch-api/models/hris/pay_statement_response_body.rbs +4 -9
  328. data/sig/finch-api/models/hris/pay_statement_retrieve_many_params.rbs +9 -15
  329. data/sig/finch-api/models/hris/payment.rbs +19 -26
  330. data/sig/finch-api/models/hris/payment_list_params.rbs +5 -10
  331. data/sig/finch-api/models/hris/support_per_benefit_type.rbs +4 -9
  332. data/sig/finch-api/models/hris/supported_benefit.rbs +22 -21
  333. data/sig/finch-api/models/hris/update_company_benefit_response.rbs +1 -6
  334. data/sig/finch-api/models/hris/w42005.rbs +26 -30
  335. data/sig/finch-api/models/hris/w42020.rbs +23 -25
  336. data/sig/finch-api/models/income.rbs +10 -10
  337. data/sig/finch-api/models/individual_event.rbs +13 -19
  338. data/sig/finch-api/models/introspection.rbs +43 -54
  339. data/sig/finch-api/models/job_completion_event.rbs +13 -20
  340. data/sig/finch-api/models/jobs/automated_async_job.rbs +20 -26
  341. data/sig/finch-api/models/jobs/automated_create_params.rbs +10 -18
  342. data/sig/finch-api/models/jobs/automated_create_response.rbs +6 -11
  343. data/sig/finch-api/models/jobs/automated_list_params.rbs +5 -10
  344. data/sig/finch-api/models/jobs/automated_list_response.rbs +82 -0
  345. data/sig/finch-api/models/jobs/automated_retrieve_params.rbs +1 -6
  346. data/sig/finch-api/models/jobs/manual_async_job.rbs +9 -11
  347. data/sig/finch-api/models/jobs/manual_retrieve_params.rbs +1 -6
  348. data/sig/finch-api/models/location.rbs +10 -12
  349. data/sig/finch-api/models/money.rbs +1 -3
  350. data/sig/finch-api/models/operation_support.rbs +4 -2
  351. data/sig/finch-api/models/operation_support_matrix.rbs +6 -10
  352. data/sig/finch-api/models/paging.rbs +1 -3
  353. data/sig/finch-api/models/pay_statement_event.rbs +13 -20
  354. data/sig/finch-api/models/payment_event.rbs +13 -17
  355. data/sig/finch-api/models/payroll/pay_group_list_params.rbs +5 -10
  356. data/sig/finch-api/models/payroll/pay_group_list_response.rbs +9 -12
  357. data/sig/finch-api/models/payroll/pay_group_retrieve_params.rbs +1 -6
  358. data/sig/finch-api/models/payroll/pay_group_retrieve_response.rbs +10 -13
  359. data/sig/finch-api/models/provider.rbs +200 -347
  360. data/sig/finch-api/models/provider_list_params.rbs +1 -5
  361. data/sig/finch-api/models/request_forwarding_forward_params.rbs +8 -13
  362. data/sig/finch-api/models/request_forwarding_forward_response.rbs +13 -23
  363. data/sig/finch-api/models/sandbox/company_update_params.rbs +39 -58
  364. data/sig/finch-api/models/sandbox/company_update_response.rbs +38 -57
  365. data/sig/finch-api/models/sandbox/connection_create_params.rbs +11 -14
  366. data/sig/finch-api/models/sandbox/connection_create_response.rbs +14 -17
  367. data/sig/finch-api/models/sandbox/connections/account_create_params.rbs +11 -14
  368. data/sig/finch-api/models/sandbox/connections/account_create_response.rbs +13 -16
  369. data/sig/finch-api/models/sandbox/connections/account_update_params.rbs +4 -9
  370. data/sig/finch-api/models/sandbox/connections/account_update_response.rbs +12 -15
  371. data/sig/finch-api/models/sandbox/directory_create_params.rbs +76 -102
  372. data/sig/finch-api/models/sandbox/employment_update_params.rbs +40 -59
  373. data/sig/finch-api/models/sandbox/employment_update_response.rbs +40 -59
  374. data/sig/finch-api/models/sandbox/individual_update_params.rbs +39 -46
  375. data/sig/finch-api/models/sandbox/individual_update_response.rbs +39 -46
  376. data/sig/finch-api/models/sandbox/job_create_params.rbs +8 -11
  377. data/sig/finch-api/models/sandbox/job_create_response.rbs +6 -11
  378. data/sig/finch-api/models/sandbox/jobs/configuration_retrieve_params.rbs +1 -6
  379. data/sig/finch-api/models/sandbox/jobs/configuration_update_params.rbs +1 -6
  380. data/sig/finch-api/models/sandbox/jobs/sandbox_job_configuration.rbs +12 -13
  381. data/sig/finch-api/models/sandbox/payment_create_params.rbs +81 -143
  382. data/sig/finch-api/models/sandbox/payment_create_response.rbs +1 -6
  383. data/sig/finch-api/models/webhook_event.rbs +5 -3
  384. data/sig/finch-api/page.rbs +2 -7
  385. data/sig/finch-api/pooled_net_requester.rbs +13 -4
  386. data/sig/finch-api/request_options.rbs +6 -2
  387. data/sig/finch-api/resources/access_tokens.rbs +7 -11
  388. data/sig/finch-api/resources/account.rbs +6 -16
  389. data/sig/finch-api/resources/connect/sessions.rbs +19 -29
  390. data/sig/finch-api/resources/hris/benefits/individuals.rbs +19 -43
  391. data/sig/finch-api/resources/hris/benefits.rbs +21 -48
  392. data/sig/finch-api/resources/hris/company.rbs +3 -8
  393. data/sig/finch-api/resources/hris/directory.rbs +6 -20
  394. data/sig/finch-api/resources/hris/documents.rbs +11 -22
  395. data/sig/finch-api/resources/hris/employments.rbs +4 -9
  396. data/sig/finch-api/resources/hris/individuals.rbs +5 -10
  397. data/sig/finch-api/resources/hris/pay_statements.rbs +4 -9
  398. data/sig/finch-api/resources/hris/payments.rbs +5 -10
  399. data/sig/finch-api/resources/jobs/automated.rbs +14 -30
  400. data/sig/finch-api/resources/jobs/manual.rbs +4 -10
  401. data/sig/finch-api/resources/payroll/pay_groups.rbs +9 -20
  402. data/sig/finch-api/resources/providers.rbs +3 -7
  403. data/sig/finch-api/resources/request_forwarding.rbs +8 -13
  404. data/sig/finch-api/resources/sandbox/company.rbs +11 -16
  405. data/sig/finch-api/resources/sandbox/connections/accounts.rbs +11 -21
  406. data/sig/finch-api/resources/sandbox/connections.rbs +7 -12
  407. data/sig/finch-api/resources/sandbox/directory.rbs +4 -9
  408. data/sig/finch-api/resources/sandbox/employment.rbs +22 -28
  409. data/sig/finch-api/resources/sandbox/individual.rbs +16 -22
  410. data/sig/finch-api/resources/sandbox/jobs/configuration.rbs +8 -18
  411. data/sig/finch-api/resources/sandbox/jobs.rbs +4 -9
  412. data/sig/finch-api/resources/sandbox/payment.rbs +6 -11
  413. data/sig/finch-api/responses_page.rbs +2 -7
  414. data/sig/finch-api/single_page.rbs +2 -7
  415. data/sig/finch-api/util.rbs +37 -12
  416. data/sig/finch-api/version.rbs +1 -1
  417. metadata +7 -4
@@ -3,20 +3,17 @@
3
3
  module FinchAPI
4
4
  # rubocop:disable Metrics/ModuleLength
5
5
 
6
- # @private
7
- #
6
+ # @api private
8
7
  module Util
9
- # @private
8
+ # @api private
10
9
  #
11
10
  # @return [Float]
12
- #
13
11
  def self.monotonic_secs = Process.clock_gettime(Process::CLOCK_MONOTONIC)
14
12
 
15
13
  class << self
16
- # @private
14
+ # @api private
17
15
  #
18
16
  # @return [String]
19
- #
20
17
  def arch
21
18
  case (arch = RbConfig::CONFIG["arch"])&.downcase
22
19
  in nil
@@ -32,10 +29,9 @@ module FinchAPI
32
29
  end
33
30
  end
34
31
 
35
- # @private
32
+ # @api private
36
33
  #
37
34
  # @return [String]
38
- #
39
35
  def os
40
36
  case (host = RbConfig::CONFIG["host_os"])&.downcase
41
37
  in nil
@@ -57,12 +53,11 @@ module FinchAPI
57
53
  end
58
54
 
59
55
  class << self
60
- # @private
56
+ # @api private
61
57
  #
62
58
  # @param input [Object]
63
59
  #
64
- # @return [Boolean, Object]
65
- #
60
+ # @return [Boolean]
66
61
  def primitive?(input)
67
62
  case input
68
63
  in true | false | Integer | Float | Symbol | String
@@ -72,12 +67,11 @@ module FinchAPI
72
67
  end
73
68
  end
74
69
 
75
- # @private
70
+ # @api private
76
71
  #
77
72
  # @param input [Object]
78
73
  #
79
74
  # @return [Boolean, Object]
80
- #
81
75
  def coerce_boolean(input)
82
76
  case input.is_a?(String) ? input.downcase : input
83
77
  in Numeric
@@ -91,13 +85,12 @@ module FinchAPI
91
85
  end
92
86
  end
93
87
 
94
- # @private
88
+ # @api private
95
89
  #
96
90
  # @param input [Object]
97
91
  #
98
92
  # @raise [ArgumentError]
99
93
  # @return [Boolean, nil]
100
- #
101
94
  def coerce_boolean!(input)
102
95
  case coerce_boolean(input)
103
96
  in true | false | nil => coerced
@@ -107,12 +100,11 @@ module FinchAPI
107
100
  end
108
101
  end
109
102
 
110
- # @private
103
+ # @api private
111
104
  #
112
105
  # @param input [Object]
113
106
  #
114
107
  # @return [Integer, Object]
115
- #
116
108
  def coerce_integer(input)
117
109
  case input
118
110
  in true
@@ -124,12 +116,11 @@ module FinchAPI
124
116
  end
125
117
  end
126
118
 
127
- # @private
119
+ # @api private
128
120
  #
129
121
  # @param input [Object]
130
122
  #
131
123
  # @return [Float, Object]
132
- #
133
124
  def coerce_float(input)
134
125
  case input
135
126
  in true
@@ -141,12 +132,11 @@ module FinchAPI
141
132
  end
142
133
  end
143
134
 
144
- # @private
135
+ # @api private
145
136
  #
146
137
  # @param input [Object]
147
138
  #
148
139
  # @return [Hash{Object=>Object}, Object]
149
- #
150
140
  def coerce_hash(input)
151
141
  case input
152
142
  in NilClass | Array | Set | Enumerator
@@ -165,14 +155,13 @@ module FinchAPI
165
155
  OMIT = Object.new.freeze
166
156
 
167
157
  class << self
168
- # @private
158
+ # @api private
169
159
  #
170
160
  # @param lhs [Object]
171
161
  # @param rhs [Object]
172
162
  # @param concat [Boolean]
173
163
  #
174
164
  # @return [Object]
175
- #
176
165
  private def deep_merge_lr(lhs, rhs, concat: false)
177
166
  case [lhs, rhs, concat]
178
167
  in [Hash, Hash, _]
@@ -191,7 +180,7 @@ module FinchAPI
191
180
  end
192
181
  end
193
182
 
194
- # @private
183
+ # @api private
195
184
  #
196
185
  # Recursively merge one hash with another. If the values at a given key are not
197
186
  # both hashes, just take the new value.
@@ -203,7 +192,6 @@ module FinchAPI
203
192
  # @param concat [Boolean] whether to merge sequences by concatenation.
204
193
  #
205
194
  # @return [Object]
206
- #
207
195
  def deep_merge(*values, sentinel: nil, concat: false)
208
196
  case values
209
197
  in [value, *values]
@@ -215,7 +203,7 @@ module FinchAPI
215
203
  end
216
204
  end
217
205
 
218
- # @private
206
+ # @api private
219
207
  #
220
208
  # @param data [Hash{Symbol=>Object}, Array<Object>, Object]
221
209
  # @param pick [Symbol, Integer, Array<Symbol, Integer>, nil]
@@ -223,7 +211,6 @@ module FinchAPI
223
211
  # @param blk [Proc, nil]
224
212
  #
225
213
  # @return [Object, nil]
226
- #
227
214
  def dig(data, pick, sentinel = nil, &blk)
228
215
  case [data, pick, blk]
229
216
  in [_, nil, nil]
@@ -248,22 +235,20 @@ module FinchAPI
248
235
  end
249
236
 
250
237
  class << self
251
- # @private
238
+ # @api private
252
239
  #
253
240
  # @param uri [URI::Generic]
254
241
  #
255
242
  # @return [String]
256
- #
257
243
  def uri_origin(uri)
258
244
  "#{uri.scheme}://#{uri.host}#{uri.port == uri.default_port ? '' : ":#{uri.port}"}"
259
245
  end
260
246
 
261
- # @private
247
+ # @api private
262
248
  #
263
249
  # @param path [String, Array<String>]
264
250
  #
265
251
  # @return [String]
266
- #
267
252
  def interpolate_path(path)
268
253
  case path
269
254
  in String
@@ -278,40 +263,37 @@ module FinchAPI
278
263
  end
279
264
 
280
265
  class << self
281
- # @private
266
+ # @api private
282
267
  #
283
268
  # @param query [String, nil]
284
269
  #
285
270
  # @return [Hash{String=>Array<String>}]
286
- #
287
271
  def decode_query(query)
288
272
  CGI.parse(query.to_s)
289
273
  end
290
274
 
291
- # @private
275
+ # @api private
292
276
  #
293
277
  # @param query [Hash{String=>Array<String>, String, nil}, nil]
294
278
  #
295
279
  # @return [String, nil]
296
- #
297
280
  def encode_query(query)
298
281
  query.to_h.empty? ? nil : URI.encode_www_form(query)
299
282
  end
300
283
  end
301
284
 
302
285
  class << self
303
- # @private
286
+ # @api private
304
287
  #
305
288
  # @param url [URI::Generic, String]
306
289
  #
307
290
  # @return [Hash{Symbol=>String, Integer, nil}]
308
- #
309
291
  def parse_uri(url)
310
292
  parsed = URI::Generic.component.zip(URI.split(url)).to_h
311
293
  {**parsed, query: decode_query(parsed.fetch(:query))}
312
294
  end
313
295
 
314
- # @private
296
+ # @api private
315
297
  #
316
298
  # @param parsed [Hash{Symbol=>String, Integer, nil}] .
317
299
  #
@@ -326,12 +308,11 @@ module FinchAPI
326
308
  # @option parsed [Hash{String=>Array<String>}] :query
327
309
  #
328
310
  # @return [URI::Generic]
329
- #
330
311
  def unparse_uri(parsed)
331
312
  URI::Generic.build(**parsed, query: encode_query(parsed.fetch(:query)))
332
313
  end
333
314
 
334
- # @private
315
+ # @api private
335
316
  #
336
317
  # @param lhs [Hash{Symbol=>String, Integer, nil}] .
337
318
  #
@@ -358,7 +339,6 @@ module FinchAPI
358
339
  # @option rhs [Hash{String=>Array<String>}] :query
359
340
  #
360
341
  # @return [URI::Generic]
361
- #
362
342
  def join_parsed_uri(lhs, rhs)
363
343
  base_path, base_query = lhs.fetch_values(:path, :query)
364
344
  slashed = base_path.end_with?("/") ? base_path : "#{base_path}/"
@@ -380,112 +360,199 @@ module FinchAPI
380
360
  end
381
361
 
382
362
  class << self
383
- # @private
363
+ # @api private
384
364
  #
385
365
  # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
386
366
  #
387
367
  # @return [Hash{String=>String}]
388
- #
389
368
  def normalized_headers(*headers)
390
369
  {}.merge(*headers.compact).to_h do |key, val|
391
- case val
392
- in Array
393
- val.map { _1.to_s.strip }.join(", ")
394
- else
395
- val&.to_s&.strip
370
+ value =
371
+ case val
372
+ in Array
373
+ val.map { _1.to_s.strip }.join(", ")
374
+ else
375
+ val&.to_s&.strip
376
+ end
377
+ [key.downcase, value]
378
+ end
379
+ end
380
+ end
381
+
382
+ # @api private
383
+ #
384
+ # An adapter that satisfies the IO interface required by `::IO.copy_stream`
385
+ class ReadIOAdapter
386
+ # @api private
387
+ #
388
+ # @param max_len [Integer, nil]
389
+ #
390
+ # @return [String]
391
+ private def read_enum(max_len)
392
+ case max_len
393
+ in nil
394
+ @stream.to_a.join
395
+ in Integer
396
+ @buf << @stream.next while @buf.length < max_len
397
+ @buf.slice!(..max_len)
398
+ end
399
+ rescue StopIteration
400
+ @stream = nil
401
+ @buf.slice!(0..)
402
+ end
403
+
404
+ # @api private
405
+ #
406
+ # @param max_len [Integer, nil]
407
+ # @param out_string [String, nil]
408
+ #
409
+ # @return [String, nil]
410
+ def read(max_len = nil, out_string = nil)
411
+ case @stream
412
+ in nil
413
+ nil
414
+ in IO | StringIO
415
+ @stream.read(max_len, out_string)
416
+ in Enumerator
417
+ read = read_enum(max_len)
418
+ case out_string
419
+ in String
420
+ out_string.replace(read)
421
+ in nil
422
+ read
396
423
  end
397
- [key.downcase, val]
398
424
  end
425
+ .tap(&@blk)
426
+ end
427
+
428
+ # @api private
429
+ #
430
+ # @param stream [String, IO, StringIO, Enumerable]
431
+ # @param blk [Proc]
432
+ #
433
+ # @yieldparam [String]
434
+ def initialize(stream, &blk)
435
+ @stream = stream.is_a?(String) ? StringIO.new(stream) : stream
436
+ @buf = String.new.b
437
+ @blk = blk
399
438
  end
400
439
  end
401
440
 
402
441
  class << self
403
- # @private
442
+ # @param blk [Proc]
404
443
  #
405
- # @param io [StringIO]
444
+ # @yieldparam [Enumerator::Yielder]
445
+ # @return [Enumerable]
446
+ def string_io(&blk)
447
+ Enumerator.new do |y|
448
+ y.define_singleton_method(:write) do
449
+ self << _1.clone
450
+ _1.bytesize
451
+ end
452
+
453
+ blk.call(y)
454
+ end
455
+ end
456
+ end
457
+
458
+ class << self
459
+ # rubocop:disable Naming/MethodParameterName
460
+
461
+ # @api private
462
+ #
463
+ # @param y [Enumerator::Yielder]
406
464
  # @param boundary [String]
407
465
  # @param key [Symbol, String]
408
466
  # @param val [Object]
409
- #
410
- private def encode_multipart_formdata(io, boundary:, key:, val:)
411
- io << "--#{boundary}\r\n"
412
- io << "Content-Disposition: form-data"
467
+ private def encode_multipart_formdata(y, boundary:, key:, val:)
468
+ y << "--#{boundary}\r\n"
469
+ y << "Content-Disposition: form-data"
413
470
  unless key.nil?
414
471
  name = ERB::Util.url_encode(key.to_s)
415
- io << "; name=\"#{name}\""
472
+ y << "; name=\"#{name}\""
416
473
  end
417
474
  if val.is_a?(IO)
418
475
  filename = ERB::Util.url_encode(File.basename(val.to_path))
419
- io << "; filename=\"#{filename}\""
476
+ y << "; filename=\"#{filename}\""
420
477
  end
421
- io << "\r\n"
478
+ y << "\r\n"
422
479
  case val
423
- in IO | StringIO
424
- io << "Content-Type: application/octet-stream\r\n\r\n"
425
- IO.copy_stream(val, io)
480
+ in IO
481
+ y << "Content-Type: application/octet-stream\r\n\r\n"
482
+ IO.copy_stream(val, y)
483
+ in StringIO
484
+ y << "Content-Type: application/octet-stream\r\n\r\n"
485
+ y << val.string
426
486
  in String
427
- io << "Content-Type: application/octet-stream\r\n\r\n"
428
- io << val.to_s
487
+ y << "Content-Type: application/octet-stream\r\n\r\n"
488
+ y << val.to_s
429
489
  in true | false | Integer | Float | Symbol
430
- io << "Content-Type: text/plain\r\n\r\n"
431
- io << val.to_s
490
+ y << "Content-Type: text/plain\r\n\r\n"
491
+ y << val.to_s
432
492
  else
433
- io << "Content-Type: application/json\r\n\r\n"
434
- io << JSON.fast_generate(val)
493
+ y << "Content-Type: application/json\r\n\r\n"
494
+ y << JSON.fast_generate(val)
435
495
  end
436
- io << "\r\n"
496
+ y << "\r\n"
437
497
  end
438
498
 
439
- # @private
499
+ # rubocop:enable Naming/MethodParameterName
500
+
501
+ # @api private
502
+ #
503
+ # @param body [Object]
504
+ #
505
+ # @return [Array(String, Enumerable)]
506
+ private def encode_multipart_streaming(body)
507
+ boundary = SecureRandom.urlsafe_base64(60)
508
+
509
+ strio = string_io do |y|
510
+ case body
511
+ in Hash
512
+ body.each do |key, val|
513
+ case val
514
+ in Array if val.all? { primitive?(_1) }
515
+ val.each do |v|
516
+ encode_multipart_formdata(y, boundary: boundary, key: key, val: v)
517
+ end
518
+ else
519
+ encode_multipart_formdata(y, boundary: boundary, key: key, val: val)
520
+ end
521
+ end
522
+ else
523
+ encode_multipart_formdata(y, boundary: boundary, key: nil, val: body)
524
+ end
525
+ y << "--#{boundary}--\r\n"
526
+ end
527
+
528
+ [boundary, strio]
529
+ end
530
+
531
+ # @api private
440
532
  #
441
533
  # @param headers [Hash{String=>String}]
442
534
  # @param body [Object]
443
535
  #
444
536
  # @return [Object]
445
- #
446
537
  def encode_content(headers, body)
447
538
  content_type = headers["content-type"]
448
539
  case [content_type, body]
449
- in ["application/json", Hash | Array]
540
+ in [%r{^application/(?:vnd\.api\+)?json}, Hash | Array]
450
541
  [headers, JSON.fast_generate(body)]
542
+ in [%r{^application/(?:x-)?jsonl}, Enumerable]
543
+ [headers, body.lazy.map { JSON.fast_generate(_1) }]
451
544
  in [%r{^multipart/form-data}, Hash | IO | StringIO]
452
- boundary = SecureRandom.urlsafe_base64(60)
453
- strio = StringIO.new.tap do |io|
454
- case body
455
- in Hash
456
- body.each do |key, val|
457
- case val
458
- in Array if val.all? { primitive?(_1) }
459
- val.each do |v|
460
- encode_multipart_formdata(io, boundary: boundary, key: key, val: v)
461
- end
462
- else
463
- encode_multipart_formdata(io, boundary: boundary, key: key, val: val)
464
- end
465
- end
466
- else
467
- encode_multipart_formdata(io, boundary: boundary, key: nil, val: body)
468
- end
469
- io << "--#{boundary}--\r\n"
470
- io.rewind
471
- end
472
- headers = {
473
- **headers,
474
- "content-type" => "#{content_type}; boundary=#{boundary}",
475
- "transfer-encoding" => "chunked"
476
- }
545
+ boundary, strio = encode_multipart_streaming(body)
546
+ headers = {**headers, "content-type" => "#{content_type}; boundary=#{boundary}"}
477
547
  [headers, strio]
478
548
  in [_, StringIO]
479
549
  [headers, body.string]
480
- in [_, IO]
481
- headers = {**headers, "transfer-encoding" => "chunked"}
482
- [headers, body]
483
550
  else
484
551
  [headers, body]
485
552
  end
486
553
  end
487
554
 
488
- # @private
555
+ # @api private
489
556
  #
490
557
  # @param headers [Hash{String=>String}, Net::HTTPHeader]
491
558
  # @param stream [Enumerable]
@@ -493,13 +560,9 @@ module FinchAPI
493
560
  #
494
561
  # @raise [JSON::ParserError]
495
562
  # @return [Object]
496
- #
497
563
  def decode_content(headers, stream:, suppress_error: false)
498
564
  case headers["content-type"]
499
- in %r{^text/event-stream}
500
- lines = enum_lines(stream)
501
- parse_sse(lines)
502
- in %r{^application/json}
565
+ in %r{^application/(?:vnd\.api\+)?json}
503
566
  json = stream.to_a.join
504
567
  begin
505
568
  JSON.parse(json, symbolize_names: true)
@@ -507,6 +570,14 @@ module FinchAPI
507
570
  raise e unless suppress_error
508
571
  json
509
572
  end
573
+ in %r{^application/(?:x-)?jsonl}
574
+ lines = decode_lines(stream)
575
+ chain_fused(lines) do |y|
576
+ lines.each { y << JSON.parse(_1, symbolize_names: true) }
577
+ end
578
+ in %r{^text/event-stream}
579
+ lines = decode_lines(stream)
580
+ decode_sse(lines)
510
581
  in %r{^text/}
511
582
  stream.to_a.join
512
583
  else
@@ -517,22 +588,26 @@ module FinchAPI
517
588
  end
518
589
 
519
590
  class << self
520
- # @private
591
+ # @api private
521
592
  #
522
593
  # https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
523
594
  #
524
595
  # @param enum [Enumerable]
596
+ # @param external [Boolean]
525
597
  # @param close [Proc]
526
598
  #
527
599
  # @return [Enumerable]
528
- #
529
- def fused_enum(enum, &close)
600
+ def fused_enum(enum, external: false, &close)
530
601
  fused = false
531
602
  iter = Enumerator.new do |y|
532
603
  next if fused
533
604
 
534
605
  fused = true
535
- loop { y << enum.next }
606
+ if external
607
+ loop { y << enum.next }
608
+ else
609
+ enum.each(&y)
610
+ end
536
611
  ensure
537
612
  close&.call
538
613
  close = nil
@@ -545,10 +620,9 @@ module FinchAPI
545
620
  iter
546
621
  end
547
622
 
548
- # @private
623
+ # @api private
549
624
  #
550
625
  # @param enum [Enumerable, nil]
551
- #
552
626
  def close_fused!(enum)
553
627
  return unless enum.is_a?(Enumerator)
554
628
 
@@ -557,11 +631,13 @@ module FinchAPI
557
631
  # rubocop:enable Lint/UnreachableLoop
558
632
  end
559
633
 
560
- # @private
634
+ # @api private
561
635
  #
562
636
  # @param enum [Enumerable, nil]
563
637
  # @param blk [Proc]
564
638
  #
639
+ # @yieldparam [Enumerator::Yielder]
640
+ # @return [Enumerable]
565
641
  def chain_fused(enum, &blk)
566
642
  iter = Enumerator.new { blk.call(_1) }
567
643
  fused_enum(iter) { close_fused!(enum) }
@@ -569,40 +645,55 @@ module FinchAPI
569
645
  end
570
646
 
571
647
  class << self
572
- # @private
648
+ # @api private
573
649
  #
574
650
  # @param enum [Enumerable]
575
651
  #
576
652
  # @return [Enumerable]
577
- #
578
- def enum_lines(enum)
653
+ def decode_lines(enum)
654
+ re = /(\r\n|\r|\n)/
655
+ buffer = String.new.b
656
+ cr_seen = nil
657
+
579
658
  chain_fused(enum) do |y|
580
- buffer = String.new
581
659
  enum.each do |row|
660
+ offset = buffer.bytesize
582
661
  buffer << row
583
- while (idx = buffer.index("\n"))
584
- y << buffer.slice!(..idx)
662
+ while (match = re.match(buffer, cr_seen&.to_i || offset))
663
+ case [match.captures.first, cr_seen]
664
+ in ["\r", nil]
665
+ cr_seen = match.end(1)
666
+ next
667
+ in ["\r" | "\r\n", Integer]
668
+ y << buffer.slice!(..(cr_seen.pred))
669
+ else
670
+ y << buffer.slice!(..(match.end(1).pred))
671
+ end
672
+ offset = 0
673
+ cr_seen = nil
585
674
  end
586
675
  end
676
+
677
+ y << buffer.slice!(..(cr_seen.pred)) unless cr_seen.nil?
587
678
  y << buffer unless buffer.empty?
588
679
  end
589
680
  end
590
681
 
591
- # @private
682
+ # @api private
592
683
  #
593
684
  # https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
594
685
  #
595
686
  # @param lines [Enumerable]
596
687
  #
597
688
  # @return [Hash{Symbol=>Object}]
598
- #
599
- def parse_sse(lines)
689
+ def decode_sse(lines)
690
+ # rubocop:disable Metrics/BlockLength
600
691
  chain_fused(lines) do |y|
601
692
  blank = {event: nil, data: nil, id: nil, retry: nil}
602
693
  current = {}
603
694
 
604
695
  lines.each do |line|
605
- case line.strip
696
+ case line.sub(/\R$/, "")
606
697
  in ""
607
698
  next if current.empty?
608
699
  y << {**blank, **current}
@@ -610,12 +701,12 @@ module FinchAPI
610
701
  in /^:/
611
702
  next
612
703
  in /^([^:]+):\s?(.*)$/
613
- _, field, value = Regexp.last_match.to_a
704
+ field, value = Regexp.last_match.captures
614
705
  case field
615
706
  in "event"
616
707
  current.merge!(event: value)
617
708
  in "data"
618
- (current[:data] ||= String.new) << value << "\n"
709
+ (current[:data] ||= String.new.b) << (value << "\n")
619
710
  in "id" unless value.include?("\0")
620
711
  current.merge!(id: value)
621
712
  in "retry" if /^\d+$/ =~ value
@@ -625,6 +716,7 @@ module FinchAPI
625
716
  else
626
717
  end
627
718
  end
719
+ # rubocop:enable Metrics/BlockLength
628
720
 
629
721
  y << {**blank, **current} unless current.empty?
630
722
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinchAPI
4
- VERSION = "0.1.0-alpha.1"
4
+ VERSION = "0.1.0-alpha.2"
5
5
  end