believe 0.7.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 (551) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +125 -0
  4. data/README.md +291 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/believe/client.rb +194 -0
  7. data/lib/believe/errors.rb +228 -0
  8. data/lib/believe/file_part.rb +58 -0
  9. data/lib/believe/internal/skip_limit_page.rb +90 -0
  10. data/lib/believe/internal/transport/base_client.rb +573 -0
  11. data/lib/believe/internal/transport/pooled_net_requester.rb +210 -0
  12. data/lib/believe/internal/type/array_of.rb +168 -0
  13. data/lib/believe/internal/type/base_model.rb +531 -0
  14. data/lib/believe/internal/type/base_page.rb +55 -0
  15. data/lib/believe/internal/type/boolean.rb +77 -0
  16. data/lib/believe/internal/type/converter.rb +327 -0
  17. data/lib/believe/internal/type/enum.rb +156 -0
  18. data/lib/believe/internal/type/file_input.rb +111 -0
  19. data/lib/believe/internal/type/hash_of.rb +188 -0
  20. data/lib/believe/internal/type/request_parameters.rb +42 -0
  21. data/lib/believe/internal/type/union.rb +262 -0
  22. data/lib/believe/internal/type/unknown.rb +81 -0
  23. data/lib/believe/internal/util.rb +966 -0
  24. data/lib/believe/internal.rb +20 -0
  25. data/lib/believe/models/believe_submit_params.rb +63 -0
  26. data/lib/believe/models/believe_submit_response.rb +51 -0
  27. data/lib/believe/models/biscuit.rb +76 -0
  28. data/lib/believe/models/biscuit_get_fresh_params.rb +14 -0
  29. data/lib/believe/models/biscuit_list_params.rb +30 -0
  30. data/lib/believe/models/biscuit_retrieve_params.rb +20 -0
  31. data/lib/believe/models/character.rb +123 -0
  32. data/lib/believe/models/character_create_params.rb +130 -0
  33. data/lib/believe/models/character_delete_params.rb +20 -0
  34. data/lib/believe/models/character_get_quotes_params.rb +20 -0
  35. data/lib/believe/models/character_get_quotes_response.rb +8 -0
  36. data/lib/believe/models/character_list_params.rb +54 -0
  37. data/lib/believe/models/character_retrieve_params.rb +20 -0
  38. data/lib/believe/models/character_role.rb +24 -0
  39. data/lib/believe/models/character_update_params.rb +125 -0
  40. data/lib/believe/models/client/w_test_params.rb +16 -0
  41. data/lib/believe/models/client_get_welcome_params.rb +14 -0
  42. data/lib/believe/models/coach.rb +87 -0
  43. data/lib/believe/models/coach_specialty.rb +19 -0
  44. data/lib/believe/models/coaching/coaching_principle.rb +63 -0
  45. data/lib/believe/models/coaching/principle_get_random_params.rb +16 -0
  46. data/lib/believe/models/coaching/principle_list_params.rb +32 -0
  47. data/lib/believe/models/coaching/principle_retrieve_params.rb +22 -0
  48. data/lib/believe/models/conflict_resolve_params.rb +61 -0
  49. data/lib/believe/models/conflict_resolve_response.rb +59 -0
  50. data/lib/believe/models/emotional_stats.rb +50 -0
  51. data/lib/believe/models/episode.rb +139 -0
  52. data/lib/believe/models/episode_create_params.rb +134 -0
  53. data/lib/believe/models/episode_delete_params.rb +20 -0
  54. data/lib/believe/models/episode_get_wisdom_params.rb +20 -0
  55. data/lib/believe/models/episode_get_wisdom_response.rb +8 -0
  56. data/lib/believe/models/episode_list_params.rb +46 -0
  57. data/lib/believe/models/episode_retrieve_params.rb +20 -0
  58. data/lib/believe/models/episode_update_params.rb +110 -0
  59. data/lib/believe/models/equipment_manager.rb +78 -0
  60. data/lib/believe/models/geo_location.rb +26 -0
  61. data/lib/believe/models/get_welcome_response.rb +8 -0
  62. data/lib/believe/models/growth_arc.rb +50 -0
  63. data/lib/believe/models/health_check_params.rb +14 -0
  64. data/lib/believe/models/health_check_response.rb +8 -0
  65. data/lib/believe/models/league.rb +22 -0
  66. data/lib/believe/models/match.rb +139 -0
  67. data/lib/believe/models/match_completed_webhook_event.rb +178 -0
  68. data/lib/believe/models/match_create_params.rb +146 -0
  69. data/lib/believe/models/match_delete_params.rb +20 -0
  70. data/lib/believe/models/match_get_lesson_params.rb +20 -0
  71. data/lib/believe/models/match_get_lesson_response.rb +8 -0
  72. data/lib/believe/models/match_get_turning_points_params.rb +20 -0
  73. data/lib/believe/models/match_get_turning_points_response.rb +9 -0
  74. data/lib/believe/models/match_list_params.rb +54 -0
  75. data/lib/believe/models/match_result.rb +18 -0
  76. data/lib/believe/models/match_retrieve_params.rb +20 -0
  77. data/lib/believe/models/match_stream_live_params.rb +46 -0
  78. data/lib/believe/models/match_type.rb +19 -0
  79. data/lib/believe/models/match_update_params.rb +139 -0
  80. data/lib/believe/models/matches/commentary_stream_params.rb +22 -0
  81. data/lib/believe/models/matches/commentary_stream_response.rb +10 -0
  82. data/lib/believe/models/medical_specialty.rb +19 -0
  83. data/lib/believe/models/medical_staff.rb +86 -0
  84. data/lib/believe/models/paginated_response.rb +62 -0
  85. data/lib/believe/models/paginated_response_quote.rb +62 -0
  86. data/lib/believe/models/pep_talk_retrieve_params.rb +22 -0
  87. data/lib/believe/models/pep_talk_retrieve_response.rb +69 -0
  88. data/lib/believe/models/player.rb +103 -0
  89. data/lib/believe/models/position.rb +18 -0
  90. data/lib/believe/models/press_simulate_params.rb +38 -0
  91. data/lib/believe/models/press_simulate_response.rb +51 -0
  92. data/lib/believe/models/purchase_method.rb +18 -0
  93. data/lib/believe/models/quote.rb +107 -0
  94. data/lib/believe/models/quote_create_params.rb +102 -0
  95. data/lib/believe/models/quote_delete_params.rb +20 -0
  96. data/lib/believe/models/quote_get_random_params.rb +38 -0
  97. data/lib/believe/models/quote_list_by_character_params.rb +37 -0
  98. data/lib/believe/models/quote_list_by_theme_params.rb +38 -0
  99. data/lib/believe/models/quote_list_params.rb +70 -0
  100. data/lib/believe/models/quote_moment.rb +25 -0
  101. data/lib/believe/models/quote_retrieve_params.rb +20 -0
  102. data/lib/believe/models/quote_theme.rb +45 -0
  103. data/lib/believe/models/quote_update_params.rb +102 -0
  104. data/lib/believe/models/reframe_transform_negative_thoughts_params.rb +30 -0
  105. data/lib/believe/models/reframe_transform_negative_thoughts_response.rb +51 -0
  106. data/lib/believe/models/registered_webhook.rb +70 -0
  107. data/lib/believe/models/stream_test_connection_params.rb +14 -0
  108. data/lib/believe/models/stream_test_connection_response.rb +8 -0
  109. data/lib/believe/models/team.rb +155 -0
  110. data/lib/believe/models/team_create_params.rb +162 -0
  111. data/lib/believe/models/team_delete_params.rb +20 -0
  112. data/lib/believe/models/team_get_culture_params.rb +20 -0
  113. data/lib/believe/models/team_get_culture_response.rb +8 -0
  114. data/lib/believe/models/team_get_rivals_params.rb +20 -0
  115. data/lib/believe/models/team_get_rivals_response.rb +8 -0
  116. data/lib/believe/models/team_list_logos_params.rb +20 -0
  117. data/lib/believe/models/team_list_logos_response.rb +8 -0
  118. data/lib/believe/models/team_list_params.rb +46 -0
  119. data/lib/believe/models/team_member_create_params.rb +345 -0
  120. data/lib/believe/models/team_member_create_response.rb +29 -0
  121. data/lib/believe/models/team_member_delete_params.rb +20 -0
  122. data/lib/believe/models/team_member_list_coaches_params.rb +46 -0
  123. data/lib/believe/models/team_member_list_params.rb +59 -0
  124. data/lib/believe/models/team_member_list_players_params.rb +46 -0
  125. data/lib/believe/models/team_member_list_response.rb +29 -0
  126. data/lib/believe/models/team_member_list_staff_params.rb +38 -0
  127. data/lib/believe/models/team_member_list_staff_response.rb +21 -0
  128. data/lib/believe/models/team_member_retrieve_params.rb +20 -0
  129. data/lib/believe/models/team_member_retrieve_response.rb +29 -0
  130. data/lib/believe/models/team_member_transferred_webhook_event.rb +185 -0
  131. data/lib/believe/models/team_member_update_params.rb +216 -0
  132. data/lib/believe/models/team_member_update_response.rb +29 -0
  133. data/lib/believe/models/team_retrieve_params.rb +20 -0
  134. data/lib/believe/models/team_update_params.rb +154 -0
  135. data/lib/believe/models/team_values.rb +34 -0
  136. data/lib/believe/models/teams/file_upload.rb +50 -0
  137. data/lib/believe/models/teams/logo_delete_params.rb +28 -0
  138. data/lib/believe/models/teams/logo_download_params.rb +28 -0
  139. data/lib/believe/models/teams/logo_download_response.rb +10 -0
  140. data/lib/believe/models/teams/logo_upload_params.rb +31 -0
  141. data/lib/believe/models/ticket_sale.rb +115 -0
  142. data/lib/believe/models/ticket_sale_create_params.rb +110 -0
  143. data/lib/believe/models/ticket_sale_delete_params.rb +20 -0
  144. data/lib/believe/models/ticket_sale_list_params.rb +62 -0
  145. data/lib/believe/models/ticket_sale_retrieve_params.rb +20 -0
  146. data/lib/believe/models/ticket_sale_update_params.rb +106 -0
  147. data/lib/believe/models/turning_point.rb +42 -0
  148. data/lib/believe/models/unwrap_webhook_event.rb +19 -0
  149. data/lib/believe/models/version_retrieve_params.rb +14 -0
  150. data/lib/believe/models/version_retrieve_response.rb +8 -0
  151. data/lib/believe/models/webhook_create_params.rb +50 -0
  152. data/lib/believe/models/webhook_create_response.rb +35 -0
  153. data/lib/believe/models/webhook_delete_params.rb +20 -0
  154. data/lib/believe/models/webhook_delete_response.rb +8 -0
  155. data/lib/believe/models/webhook_list_params.rb +14 -0
  156. data/lib/believe/models/webhook_list_response.rb +8 -0
  157. data/lib/believe/models/webhook_retrieve_params.rb +20 -0
  158. data/lib/believe/models/webhook_trigger_event_params.rb +383 -0
  159. data/lib/believe/models/webhook_trigger_event_response.rb +118 -0
  160. data/lib/believe/models/webhook_unwrap_params.rb +14 -0
  161. data/lib/believe/models.rb +245 -0
  162. data/lib/believe/request_options.rb +77 -0
  163. data/lib/believe/resources/believe.rb +43 -0
  164. data/lib/believe/resources/biscuits.rb +79 -0
  165. data/lib/believe/resources/characters.rb +198 -0
  166. data/lib/believe/resources/client/ws.rb +44 -0
  167. data/lib/believe/resources/client.rb +20 -0
  168. data/lib/believe/resources/coaching/principles.rb +80 -0
  169. data/lib/believe/resources/coaching.rb +19 -0
  170. data/lib/believe/resources/conflicts.rb +43 -0
  171. data/lib/believe/resources/episodes.rb +189 -0
  172. data/lib/believe/resources/health.rb +32 -0
  173. data/lib/believe/resources/matches/commentary.rb +37 -0
  174. data/lib/believe/resources/matches.rb +288 -0
  175. data/lib/believe/resources/pep_talk.rb +40 -0
  176. data/lib/believe/resources/press.rb +41 -0
  177. data/lib/believe/resources/quotes.rb +258 -0
  178. data/lib/believe/resources/reframe.rb +39 -0
  179. data/lib/believe/resources/stream.rb +33 -0
  180. data/lib/believe/resources/team_members.rb +267 -0
  181. data/lib/believe/resources/teams/logo.rb +92 -0
  182. data/lib/believe/resources/teams.rb +250 -0
  183. data/lib/believe/resources/ticket_sales.rb +179 -0
  184. data/lib/believe/resources/version.rb +32 -0
  185. data/lib/believe/resources/webhooks.rb +177 -0
  186. data/lib/believe/version.rb +5 -0
  187. data/lib/believe.rb +215 -0
  188. data/manifest.yaml +17 -0
  189. data/rbi/believe/client.rbi +128 -0
  190. data/rbi/believe/errors.rbi +205 -0
  191. data/rbi/believe/file_part.rbi +37 -0
  192. data/rbi/believe/internal/skip_limit_page.rbi +25 -0
  193. data/rbi/believe/internal/transport/base_client.rbi +298 -0
  194. data/rbi/believe/internal/transport/pooled_net_requester.rbi +83 -0
  195. data/rbi/believe/internal/type/array_of.rbi +104 -0
  196. data/rbi/believe/internal/type/base_model.rbi +308 -0
  197. data/rbi/believe/internal/type/base_page.rbi +42 -0
  198. data/rbi/believe/internal/type/boolean.rbi +58 -0
  199. data/rbi/believe/internal/type/converter.rbi +216 -0
  200. data/rbi/believe/internal/type/enum.rbi +82 -0
  201. data/rbi/believe/internal/type/file_input.rbi +59 -0
  202. data/rbi/believe/internal/type/hash_of.rbi +104 -0
  203. data/rbi/believe/internal/type/request_parameters.rbi +29 -0
  204. data/rbi/believe/internal/type/union.rbi +128 -0
  205. data/rbi/believe/internal/type/unknown.rbi +58 -0
  206. data/rbi/believe/internal/util.rbi +515 -0
  207. data/rbi/believe/internal.rbi +18 -0
  208. data/rbi/believe/models/believe_submit_params.rbi +134 -0
  209. data/rbi/believe/models/believe_submit_response.rbi +73 -0
  210. data/rbi/believe/models/biscuit.rbi +101 -0
  211. data/rbi/believe/models/biscuit_get_fresh_params.rbi +27 -0
  212. data/rbi/believe/models/biscuit_list_params.rbi +57 -0
  213. data/rbi/believe/models/biscuit_retrieve_params.rbi +35 -0
  214. data/rbi/believe/models/character.rbi +151 -0
  215. data/rbi/believe/models/character_create_params.rbi +169 -0
  216. data/rbi/believe/models/character_delete_params.rbi +35 -0
  217. data/rbi/believe/models/character_get_quotes_params.rbi +38 -0
  218. data/rbi/believe/models/character_get_quotes_response.rbi +11 -0
  219. data/rbi/believe/models/character_list_params.rbi +81 -0
  220. data/rbi/believe/models/character_retrieve_params.rbi +38 -0
  221. data/rbi/believe/models/character_role.rbi +28 -0
  222. data/rbi/believe/models/character_update_params.rbi +150 -0
  223. data/rbi/believe/models/client/w_test_params.rbi +32 -0
  224. data/rbi/believe/models/client_get_welcome_params.rbi +27 -0
  225. data/rbi/believe/models/coach.rbi +115 -0
  226. data/rbi/believe/models/coach_specialty.rbi +29 -0
  227. data/rbi/believe/models/coaching/coaching_principle.rbi +85 -0
  228. data/rbi/believe/models/coaching/principle_get_random_params.rbi +32 -0
  229. data/rbi/believe/models/coaching/principle_list_params.rbi +62 -0
  230. data/rbi/believe/models/coaching/principle_retrieve_params.rbi +40 -0
  231. data/rbi/believe/models/conflict_resolve_params.rbi +121 -0
  232. data/rbi/believe/models/conflict_resolve_response.rbi +81 -0
  233. data/rbi/believe/models/emotional_stats.rbi +70 -0
  234. data/rbi/believe/models/episode.rbi +159 -0
  235. data/rbi/believe/models/episode_create_params.rbi +158 -0
  236. data/rbi/believe/models/episode_delete_params.rbi +35 -0
  237. data/rbi/believe/models/episode_get_wisdom_params.rbi +35 -0
  238. data/rbi/believe/models/episode_get_wisdom_response.rbi +11 -0
  239. data/rbi/believe/models/episode_list_params.rbi +73 -0
  240. data/rbi/believe/models/episode_retrieve_params.rbi +35 -0
  241. data/rbi/believe/models/episode_update_params.rbi +131 -0
  242. data/rbi/believe/models/equipment_manager.rbi +128 -0
  243. data/rbi/believe/models/geo_location.rbi +36 -0
  244. data/rbi/believe/models/get_welcome_response.rbi +7 -0
  245. data/rbi/believe/models/growth_arc.rbi +70 -0
  246. data/rbi/believe/models/health_check_params.rbi +27 -0
  247. data/rbi/believe/models/health_check_response.rbi +8 -0
  248. data/rbi/believe/models/league.rbi +26 -0
  249. data/rbi/believe/models/match.rbi +170 -0
  250. data/rbi/believe/models/match_completed_webhook_event.rbi +315 -0
  251. data/rbi/believe/models/match_create_params.rbi +192 -0
  252. data/rbi/believe/models/match_delete_params.rbi +35 -0
  253. data/rbi/believe/models/match_get_lesson_params.rbi +35 -0
  254. data/rbi/believe/models/match_get_lesson_response.rbi +11 -0
  255. data/rbi/believe/models/match_get_turning_points_params.rbi +38 -0
  256. data/rbi/believe/models/match_get_turning_points_response.rbi +13 -0
  257. data/rbi/believe/models/match_list_params.rbi +81 -0
  258. data/rbi/believe/models/match_result.rbi +22 -0
  259. data/rbi/believe/models/match_retrieve_params.rbi +35 -0
  260. data/rbi/believe/models/match_stream_live_params.rbi +79 -0
  261. data/rbi/believe/models/match_type.rbi +23 -0
  262. data/rbi/believe/models/match_update_params.rbi +157 -0
  263. data/rbi/believe/models/matches/commentary_stream_params.rbi +40 -0
  264. data/rbi/believe/models/matches/commentary_stream_response.rbi +10 -0
  265. data/rbi/believe/models/medical_specialty.rbi +30 -0
  266. data/rbi/believe/models/medical_staff.rbi +127 -0
  267. data/rbi/believe/models/paginated_response.rbi +77 -0
  268. data/rbi/believe/models/paginated_response_quote.rbi +77 -0
  269. data/rbi/believe/models/pep_talk_retrieve_params.rbi +43 -0
  270. data/rbi/believe/models/pep_talk_retrieve_response.rbi +114 -0
  271. data/rbi/believe/models/player.rbi +139 -0
  272. data/rbi/believe/models/position.rbi +22 -0
  273. data/rbi/believe/models/press_simulate_params.rbi +62 -0
  274. data/rbi/believe/models/press_simulate_response.rbi +73 -0
  275. data/rbi/believe/models/purchase_method.rbi +24 -0
  276. data/rbi/believe/models/quote.rbi +135 -0
  277. data/rbi/believe/models/quote_create_params.rbi +134 -0
  278. data/rbi/believe/models/quote_delete_params.rbi +35 -0
  279. data/rbi/believe/models/quote_get_random_params.rbi +59 -0
  280. data/rbi/believe/models/quote_list_by_character_params.rbi +66 -0
  281. data/rbi/believe/models/quote_list_by_theme_params.rbi +65 -0
  282. data/rbi/believe/models/quote_list_params.rbi +97 -0
  283. data/rbi/believe/models/quote_moment.rbi +33 -0
  284. data/rbi/believe/models/quote_retrieve_params.rbi +35 -0
  285. data/rbi/believe/models/quote_theme.rbi +51 -0
  286. data/rbi/believe/models/quote_update_params.rbi +113 -0
  287. data/rbi/believe/models/reframe_transform_negative_thoughts_params.rbi +57 -0
  288. data/rbi/believe/models/reframe_transform_negative_thoughts_response.rbi +73 -0
  289. data/rbi/believe/models/registered_webhook.rbi +111 -0
  290. data/rbi/believe/models/stream_test_connection_params.rbi +30 -0
  291. data/rbi/believe/models/stream_test_connection_response.rbi +8 -0
  292. data/rbi/believe/models/team.rbi +186 -0
  293. data/rbi/believe/models/team_create_params.rbi +206 -0
  294. data/rbi/believe/models/team_delete_params.rbi +35 -0
  295. data/rbi/believe/models/team_get_culture_params.rbi +35 -0
  296. data/rbi/believe/models/team_get_culture_response.rbi +11 -0
  297. data/rbi/believe/models/team_get_rivals_params.rbi +35 -0
  298. data/rbi/believe/models/team_get_rivals_response.rbi +11 -0
  299. data/rbi/believe/models/team_list_logos_params.rbi +35 -0
  300. data/rbi/believe/models/team_list_logos_response.rbi +11 -0
  301. data/rbi/believe/models/team_list_params.rbi +73 -0
  302. data/rbi/believe/models/team_member_create_params.rbi +636 -0
  303. data/rbi/believe/models/team_member_create_response.rbi +28 -0
  304. data/rbi/believe/models/team_member_delete_params.rbi +35 -0
  305. data/rbi/believe/models/team_member_list_coaches_params.rbi +76 -0
  306. data/rbi/believe/models/team_member_list_params.rbi +119 -0
  307. data/rbi/believe/models/team_member_list_players_params.rbi +76 -0
  308. data/rbi/believe/models/team_member_list_response.rbi +28 -0
  309. data/rbi/believe/models/team_member_list_staff_params.rbi +68 -0
  310. data/rbi/believe/models/team_member_list_staff_response.rbi +23 -0
  311. data/rbi/believe/models/team_member_retrieve_params.rbi +38 -0
  312. data/rbi/believe/models/team_member_retrieve_response.rbi +28 -0
  313. data/rbi/believe/models/team_member_transferred_webhook_event.rbi +325 -0
  314. data/rbi/believe/models/team_member_update_params.rbi +337 -0
  315. data/rbi/believe/models/team_member_update_response.rbi +28 -0
  316. data/rbi/believe/models/team_retrieve_params.rbi +35 -0
  317. data/rbi/believe/models/team_update_params.rbi +177 -0
  318. data/rbi/believe/models/team_values.rbi +54 -0
  319. data/rbi/believe/models/teams/file_upload.rbi +68 -0
  320. data/rbi/believe/models/teams/logo_delete_params.rbi +48 -0
  321. data/rbi/believe/models/teams/logo_download_params.rbi +48 -0
  322. data/rbi/believe/models/teams/logo_download_response.rbi +10 -0
  323. data/rbi/believe/models/teams/logo_upload_params.rbi +54 -0
  324. data/rbi/believe/models/ticket_sale.rbi +134 -0
  325. data/rbi/believe/models/ticket_sale_create_params.rbi +131 -0
  326. data/rbi/believe/models/ticket_sale_delete_params.rbi +35 -0
  327. data/rbi/believe/models/ticket_sale_list_params.rbi +89 -0
  328. data/rbi/believe/models/ticket_sale_retrieve_params.rbi +38 -0
  329. data/rbi/believe/models/ticket_sale_update_params.rbi +115 -0
  330. data/rbi/believe/models/turning_point.rbi +62 -0
  331. data/rbi/believe/models/unwrap_webhook_event.rbi +24 -0
  332. data/rbi/believe/models/version_retrieve_params.rbi +27 -0
  333. data/rbi/believe/models/version_retrieve_response.rbi +8 -0
  334. data/rbi/believe/models/webhook_create_params.rbi +100 -0
  335. data/rbi/believe/models/webhook_create_response.rbi +66 -0
  336. data/rbi/believe/models/webhook_delete_params.rbi +35 -0
  337. data/rbi/believe/models/webhook_delete_response.rbi +11 -0
  338. data/rbi/believe/models/webhook_list_params.rbi +27 -0
  339. data/rbi/believe/models/webhook_list_response.rbi +11 -0
  340. data/rbi/believe/models/webhook_retrieve_params.rbi +35 -0
  341. data/rbi/believe/models/webhook_trigger_event_params.rbi +771 -0
  342. data/rbi/believe/models/webhook_trigger_event_response.rbi +200 -0
  343. data/rbi/believe/models/webhook_unwrap_params.rbi +27 -0
  344. data/rbi/believe/models.rbi +209 -0
  345. data/rbi/believe/request_options.rbi +59 -0
  346. data/rbi/believe/resources/believe.rbi +37 -0
  347. data/rbi/believe/resources/biscuits.rbi +50 -0
  348. data/rbi/believe/resources/characters.rbi +162 -0
  349. data/rbi/believe/resources/client/ws.rbi +34 -0
  350. data/rbi/believe/resources/client.rbi +17 -0
  351. data/rbi/believe/resources/coaching/principles.rbi +55 -0
  352. data/rbi/believe/resources/coaching.rbi +16 -0
  353. data/rbi/believe/resources/conflicts.rbi +37 -0
  354. data/rbi/believe/resources/episodes.rbi +166 -0
  355. data/rbi/believe/resources/health.rbi +21 -0
  356. data/rbi/believe/resources/matches/commentary.rbi +26 -0
  357. data/rbi/believe/resources/matches.rbi +244 -0
  358. data/rbi/believe/resources/pep_talk.rbi +29 -0
  359. data/rbi/believe/resources/press.rbi +33 -0
  360. data/rbi/believe/resources/quotes.rbi +206 -0
  361. data/rbi/believe/resources/reframe.rbi +30 -0
  362. data/rbi/believe/resources/stream.rbi +22 -0
  363. data/rbi/believe/resources/team_members.rbi +223 -0
  364. data/rbi/believe/resources/teams/logo.rbi +53 -0
  365. data/rbi/believe/resources/teams.rbi +205 -0
  366. data/rbi/believe/resources/ticket_sales.rbi +149 -0
  367. data/rbi/believe/resources/version.rbi +21 -0
  368. data/rbi/believe/resources/webhooks.rbi +150 -0
  369. data/rbi/believe/version.rbi +5 -0
  370. data/sig/believe/client.rbs +64 -0
  371. data/sig/believe/errors.rbs +117 -0
  372. data/sig/believe/file_part.rbs +21 -0
  373. data/sig/believe/internal/skip_limit_page.rbs +15 -0
  374. data/sig/believe/internal/transport/base_client.rbs +133 -0
  375. data/sig/believe/internal/transport/pooled_net_requester.rbs +48 -0
  376. data/sig/believe/internal/type/array_of.rbs +48 -0
  377. data/sig/believe/internal/type/base_model.rbs +102 -0
  378. data/sig/believe/internal/type/base_page.rbs +24 -0
  379. data/sig/believe/internal/type/boolean.rbs +26 -0
  380. data/sig/believe/internal/type/converter.rbs +79 -0
  381. data/sig/believe/internal/type/enum.rbs +32 -0
  382. data/sig/believe/internal/type/file_input.rbs +25 -0
  383. data/sig/believe/internal/type/hash_of.rbs +48 -0
  384. data/sig/believe/internal/type/request_parameters.rbs +19 -0
  385. data/sig/believe/internal/type/union.rbs +52 -0
  386. data/sig/believe/internal/type/unknown.rbs +26 -0
  387. data/sig/believe/internal/util.rbs +199 -0
  388. data/sig/believe/internal.rbs +9 -0
  389. data/sig/believe/models/believe_submit_params.rbs +68 -0
  390. data/sig/believe/models/believe_submit_response.rbs +40 -0
  391. data/sig/believe/models/biscuit.rbs +66 -0
  392. data/sig/believe/models/biscuit_get_fresh_params.rbs +15 -0
  393. data/sig/believe/models/biscuit_list_params.rbs +32 -0
  394. data/sig/believe/models/biscuit_retrieve_params.rbs +23 -0
  395. data/sig/believe/models/character.rbs +91 -0
  396. data/sig/believe/models/character_create_params.rbs +100 -0
  397. data/sig/believe/models/character_delete_params.rbs +23 -0
  398. data/sig/believe/models/character_get_quotes_params.rbs +23 -0
  399. data/sig/believe/models/character_get_quotes_response.rbs +7 -0
  400. data/sig/believe/models/character_list_params.rbs +50 -0
  401. data/sig/believe/models/character_retrieve_params.rbs +23 -0
  402. data/sig/believe/models/character_role.rbs +32 -0
  403. data/sig/believe/models/character_update_params.rbs +99 -0
  404. data/sig/believe/models/client/w_test_params.rbs +16 -0
  405. data/sig/believe/models/client_get_welcome_params.rbs +15 -0
  406. data/sig/believe/models/coach.rbs +71 -0
  407. data/sig/believe/models/coach_specialty.rbs +22 -0
  408. data/sig/believe/models/coaching/coaching_principle.rbs +49 -0
  409. data/sig/believe/models/coaching/principle_get_random_params.rbs +17 -0
  410. data/sig/believe/models/coaching/principle_list_params.rbs +34 -0
  411. data/sig/believe/models/coaching/principle_retrieve_params.rbs +25 -0
  412. data/sig/believe/models/conflict_resolve_params.rbs +62 -0
  413. data/sig/believe/models/conflict_resolve_response.rbs +45 -0
  414. data/sig/believe/models/emotional_stats.rbs +40 -0
  415. data/sig/believe/models/episode.rbs +97 -0
  416. data/sig/believe/models/episode_create_params.rbs +98 -0
  417. data/sig/believe/models/episode_delete_params.rbs +23 -0
  418. data/sig/believe/models/episode_get_wisdom_params.rbs +23 -0
  419. data/sig/believe/models/episode_get_wisdom_response.rbs +7 -0
  420. data/sig/believe/models/episode_list_params.rbs +45 -0
  421. data/sig/believe/models/episode_retrieve_params.rbs +23 -0
  422. data/sig/believe/models/episode_update_params.rbs +101 -0
  423. data/sig/believe/models/equipment_manager.rbs +68 -0
  424. data/sig/believe/models/geo_location.rbs +15 -0
  425. data/sig/believe/models/get_welcome_response.rbs +5 -0
  426. data/sig/believe/models/growth_arc.rbs +40 -0
  427. data/sig/believe/models/health_check_params.rbs +15 -0
  428. data/sig/believe/models/health_check_response.rbs +5 -0
  429. data/sig/believe/models/league.rbs +28 -0
  430. data/sig/believe/models/match.rbs +107 -0
  431. data/sig/believe/models/match_completed_webhook_event.rbs +138 -0
  432. data/sig/believe/models/match_create_params.rbs +116 -0
  433. data/sig/believe/models/match_delete_params.rbs +23 -0
  434. data/sig/believe/models/match_get_lesson_params.rbs +23 -0
  435. data/sig/believe/models/match_get_lesson_response.rbs +7 -0
  436. data/sig/believe/models/match_get_turning_points_params.rbs +23 -0
  437. data/sig/believe/models/match_get_turning_points_response.rbs +7 -0
  438. data/sig/believe/models/match_list_params.rbs +50 -0
  439. data/sig/believe/models/match_result.rbs +16 -0
  440. data/sig/believe/models/match_retrieve_params.rbs +23 -0
  441. data/sig/believe/models/match_stream_live_params.rbs +49 -0
  442. data/sig/believe/models/match_type.rbs +17 -0
  443. data/sig/believe/models/match_update_params.rbs +109 -0
  444. data/sig/believe/models/matches/commentary_stream_params.rbs +25 -0
  445. data/sig/believe/models/matches/commentary_stream_response.rbs +7 -0
  446. data/sig/believe/models/medical_specialty.rbs +22 -0
  447. data/sig/believe/models/medical_staff.rbs +71 -0
  448. data/sig/believe/models/paginated_response.rbs +50 -0
  449. data/sig/believe/models/paginated_response_quote.rbs +50 -0
  450. data/sig/believe/models/pep_talk_retrieve_params.rbs +25 -0
  451. data/sig/believe/models/pep_talk_retrieve_response.rbs +57 -0
  452. data/sig/believe/models/player.rbs +85 -0
  453. data/sig/believe/models/position.rbs +16 -0
  454. data/sig/believe/models/press_simulate_params.rbs +34 -0
  455. data/sig/believe/models/press_simulate_response.rbs +40 -0
  456. data/sig/believe/models/purchase_method.rbs +16 -0
  457. data/sig/believe/models/quote.rbs +83 -0
  458. data/sig/believe/models/quote_create_params.rbs +84 -0
  459. data/sig/believe/models/quote_delete_params.rbs +23 -0
  460. data/sig/believe/models/quote_get_random_params.rbs +36 -0
  461. data/sig/believe/models/quote_list_by_character_params.rbs +36 -0
  462. data/sig/believe/models/quote_list_by_theme_params.rbs +36 -0
  463. data/sig/believe/models/quote_list_params.rbs +60 -0
  464. data/sig/believe/models/quote_moment.rbs +34 -0
  465. data/sig/believe/models/quote_retrieve_params.rbs +23 -0
  466. data/sig/believe/models/quote_theme.rbs +74 -0
  467. data/sig/believe/models/quote_update_params.rbs +81 -0
  468. data/sig/believe/models/reframe_transform_negative_thoughts_params.rbs +30 -0
  469. data/sig/believe/models/reframe_transform_negative_thoughts_response.rbs +40 -0
  470. data/sig/believe/models/registered_webhook.rbs +56 -0
  471. data/sig/believe/models/stream_test_connection_params.rbs +15 -0
  472. data/sig/believe/models/stream_test_connection_response.rbs +5 -0
  473. data/sig/believe/models/team.rbs +109 -0
  474. data/sig/believe/models/team_create_params.rbs +118 -0
  475. data/sig/believe/models/team_delete_params.rbs +23 -0
  476. data/sig/believe/models/team_get_culture_params.rbs +23 -0
  477. data/sig/believe/models/team_get_culture_response.rbs +7 -0
  478. data/sig/believe/models/team_get_rivals_params.rbs +23 -0
  479. data/sig/believe/models/team_get_rivals_response.rbs +7 -0
  480. data/sig/believe/models/team_list_logos_params.rbs +23 -0
  481. data/sig/believe/models/team_list_logos_response.rbs +7 -0
  482. data/sig/believe/models/team_list_params.rbs +45 -0
  483. data/sig/believe/models/team_member_create_params.rbs +299 -0
  484. data/sig/believe/models/team_member_create_response.rbs +15 -0
  485. data/sig/believe/models/team_member_delete_params.rbs +23 -0
  486. data/sig/believe/models/team_member_list_coaches_params.rbs +45 -0
  487. data/sig/believe/models/team_member_list_params.rbs +58 -0
  488. data/sig/believe/models/team_member_list_players_params.rbs +45 -0
  489. data/sig/believe/models/team_member_list_response.rbs +15 -0
  490. data/sig/believe/models/team_member_list_staff_params.rbs +36 -0
  491. data/sig/believe/models/team_member_list_staff_response.rbs +12 -0
  492. data/sig/believe/models/team_member_retrieve_params.rbs +23 -0
  493. data/sig/believe/models/team_member_retrieve_response.rbs +15 -0
  494. data/sig/believe/models/team_member_transferred_webhook_event.rbs +142 -0
  495. data/sig/believe/models/team_member_update_params.rbs +196 -0
  496. data/sig/believe/models/team_member_update_response.rbs +15 -0
  497. data/sig/believe/models/team_retrieve_params.rbs +23 -0
  498. data/sig/believe/models/team_update_params.rbs +119 -0
  499. data/sig/believe/models/team_values.rbs +30 -0
  500. data/sig/believe/models/teams/file_upload.rbs +47 -0
  501. data/sig/believe/models/teams/logo_delete_params.rbs +30 -0
  502. data/sig/believe/models/teams/logo_download_params.rbs +30 -0
  503. data/sig/believe/models/teams/logo_download_response.rbs +7 -0
  504. data/sig/believe/models/teams/logo_upload_params.rbs +30 -0
  505. data/sig/believe/models/ticket_sale.rbs +80 -0
  506. data/sig/believe/models/ticket_sale_create_params.rbs +81 -0
  507. data/sig/believe/models/ticket_sale_delete_params.rbs +23 -0
  508. data/sig/believe/models/ticket_sale_list_params.rbs +55 -0
  509. data/sig/believe/models/ticket_sale_retrieve_params.rbs +23 -0
  510. data/sig/believe/models/ticket_sale_update_params.rbs +86 -0
  511. data/sig/believe/models/turning_point.rbs +35 -0
  512. data/sig/believe/models/unwrap_webhook_event.rbs +13 -0
  513. data/sig/believe/models/version_retrieve_params.rbs +15 -0
  514. data/sig/believe/models/version_retrieve_response.rbs +5 -0
  515. data/sig/believe/models/webhook_create_params.rbs +47 -0
  516. data/sig/believe/models/webhook_create_response.rbs +34 -0
  517. data/sig/believe/models/webhook_delete_params.rbs +23 -0
  518. data/sig/believe/models/webhook_delete_response.rbs +7 -0
  519. data/sig/believe/models/webhook_list_params.rbs +15 -0
  520. data/sig/believe/models/webhook_list_response.rbs +7 -0
  521. data/sig/believe/models/webhook_retrieve_params.rbs +23 -0
  522. data/sig/believe/models/webhook_trigger_event_params.rbs +314 -0
  523. data/sig/believe/models/webhook_trigger_event_response.rbs +93 -0
  524. data/sig/believe/models/webhook_unwrap_params.rbs +15 -0
  525. data/sig/believe/models.rbs +205 -0
  526. data/sig/believe/request_options.rbs +34 -0
  527. data/sig/believe/resources/believe.rbs +15 -0
  528. data/sig/believe/resources/biscuits.rbs +22 -0
  529. data/sig/believe/resources/characters.rbs +66 -0
  530. data/sig/believe/resources/client/ws.rbs +11 -0
  531. data/sig/believe/resources/client.rbs +9 -0
  532. data/sig/believe/resources/coaching/principles.rbs +24 -0
  533. data/sig/believe/resources/coaching.rbs +9 -0
  534. data/sig/believe/resources/conflicts.rbs +15 -0
  535. data/sig/believe/resources/episodes.rbs +69 -0
  536. data/sig/believe/resources/health.rbs +9 -0
  537. data/sig/believe/resources/matches/commentary.rbs +14 -0
  538. data/sig/believe/resources/matches.rbs +85 -0
  539. data/sig/believe/resources/pep_talk.rbs +12 -0
  540. data/sig/believe/resources/press.rbs +14 -0
  541. data/sig/believe/resources/quotes.rbs +80 -0
  542. data/sig/believe/resources/reframe.rbs +13 -0
  543. data/sig/believe/resources/stream.rbs +9 -0
  544. data/sig/believe/resources/team_members.rbs +59 -0
  545. data/sig/believe/resources/teams/logo.rbs +27 -0
  546. data/sig/believe/resources/teams.rbs +85 -0
  547. data/sig/believe/resources/ticket_sales.rbs +60 -0
  548. data/sig/believe/resources/version.rbs +9 -0
  549. data/sig/believe/resources/webhooks.rbs +39 -0
  550. data/sig/believe/version.rbs +3 -0
  551. metadata +622 -0
@@ -0,0 +1,966 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Believe
4
+ module Internal
5
+ # @api private
6
+ module Util
7
+ # @api private
8
+ #
9
+ # @return [Float]
10
+ def self.monotonic_secs = Process.clock_gettime(Process::CLOCK_MONOTONIC)
11
+
12
+ # @api private
13
+ #
14
+ # @param ns [Module, Class]
15
+ #
16
+ # @return [Enumerable<Module, Class>]
17
+ def self.walk_namespaces(ns)
18
+ ns.constants(false).lazy.flat_map do
19
+ case (c = ns.const_get(_1, false))
20
+ in Module | Class
21
+ walk_namespaces(c)
22
+ else
23
+ []
24
+ end
25
+ end
26
+ .chain([ns])
27
+ end
28
+
29
+ class << self
30
+ # @api private
31
+ #
32
+ # @return [String]
33
+ def arch
34
+ case (arch = RbConfig::CONFIG["arch"])&.downcase
35
+ in nil
36
+ "unknown"
37
+ in /aarch64|arm64/
38
+ "arm64"
39
+ in /x86_64/
40
+ "x64"
41
+ in /arm/
42
+ "arm"
43
+ else
44
+ "other:#{arch}"
45
+ end
46
+ end
47
+
48
+ # @api private
49
+ #
50
+ # @return [String]
51
+ def os
52
+ case (host = RbConfig::CONFIG["host_os"])&.downcase
53
+ in nil
54
+ "Unknown"
55
+ in /linux/
56
+ "Linux"
57
+ in /darwin/
58
+ "MacOS"
59
+ in /freebsd/
60
+ "FreeBSD"
61
+ in /openbsd/
62
+ "OpenBSD"
63
+ in /mswin|mingw|cygwin|ucrt/
64
+ "Windows"
65
+ else
66
+ "Other:#{host}"
67
+ end
68
+ end
69
+ end
70
+
71
+ class << self
72
+ # @api private
73
+ #
74
+ # @param input [Object]
75
+ #
76
+ # @return [Boolean]
77
+ def primitive?(input)
78
+ case input
79
+ in true | false | Numeric | Symbol | String
80
+ true
81
+ else
82
+ false
83
+ end
84
+ end
85
+
86
+ # @api private
87
+ #
88
+ # @param input [String, Boolean]
89
+ #
90
+ # @return [Boolean, Object]
91
+ def coerce_boolean(input)
92
+ case input.is_a?(String) ? input.downcase : input
93
+ in "true"
94
+ true
95
+ in "false"
96
+ false
97
+ else
98
+ input
99
+ end
100
+ end
101
+
102
+ # @api private
103
+ #
104
+ # @param input [String, Boolean]
105
+ #
106
+ # @raise [ArgumentError]
107
+ # @return [Boolean, nil]
108
+ def coerce_boolean!(input)
109
+ case coerce_boolean(input)
110
+ in true | false | nil => coerced
111
+ coerced
112
+ else
113
+ raise ArgumentError.new("Unable to coerce #{input.inspect} into boolean value")
114
+ end
115
+ end
116
+
117
+ # @api private
118
+ #
119
+ # @param input [String, Integer]
120
+ #
121
+ # @return [Integer, Object]
122
+ def coerce_integer(input)
123
+ Integer(input, exception: false) || input
124
+ end
125
+
126
+ # @api private
127
+ #
128
+ # @param input [String, Integer, Float]
129
+ #
130
+ # @return [Float, Object]
131
+ def coerce_float(input)
132
+ Float(input, exception: false) || input
133
+ end
134
+
135
+ # @api private
136
+ #
137
+ # @param input [Object]
138
+ #
139
+ # @return [Hash{Object=>Object}, Object]
140
+ def coerce_hash(input)
141
+ case input
142
+ in NilClass | Array | Set | Enumerator | StringIO | IO
143
+ input
144
+ else
145
+ input.respond_to?(:to_h) ? input.to_h : input
146
+ end
147
+ end
148
+
149
+ # @api private
150
+ #
151
+ # @param input [Object]
152
+ #
153
+ # @raise [ArgumentError]
154
+ # @return [Hash{Object=>Object}, nil]
155
+ def coerce_hash!(input)
156
+ case coerce_hash(input)
157
+ in Hash | nil => coerced
158
+ coerced
159
+ else
160
+ message = "Expected a #{Hash} or #{::Believe::Internal::Type::BaseModel}, got #{input.inspect}"
161
+ raise ArgumentError.new(message)
162
+ end
163
+ end
164
+ end
165
+
166
+ class << self
167
+ # @api private
168
+ #
169
+ # @param lhs [Object]
170
+ # @param rhs [Object]
171
+ # @param concat [Boolean]
172
+ #
173
+ # @return [Object]
174
+ private def deep_merge_lr(lhs, rhs, concat: false)
175
+ case [lhs, rhs, concat]
176
+ in [Hash, Hash, _]
177
+ lhs.merge(rhs) { deep_merge_lr(_2, _3, concat: concat) }
178
+ in [Array, Array, true]
179
+ lhs.concat(rhs)
180
+ else
181
+ rhs
182
+ end
183
+ end
184
+
185
+ # @api private
186
+ #
187
+ # Recursively merge one hash with another. If the values at a given key are not
188
+ # both hashes, just take the new value.
189
+ #
190
+ # @param values [Array<Object>]
191
+ #
192
+ # @param sentinel [Object, nil] the value to return if no values are provided.
193
+ #
194
+ # @param concat [Boolean] whether to merge sequences by concatenation.
195
+ #
196
+ # @return [Object]
197
+ def deep_merge(*values, sentinel: nil, concat: false)
198
+ case values
199
+ in [value, *values]
200
+ values.reduce(value) do |acc, val|
201
+ deep_merge_lr(acc, val, concat: concat)
202
+ end
203
+ else
204
+ sentinel
205
+ end
206
+ end
207
+
208
+ # @api private
209
+ #
210
+ # @param data [Hash{Symbol=>Object}, Array<Object>, Object]
211
+ # @param pick [Symbol, Integer, Array<Symbol, Integer>, Proc, nil]
212
+ # @param blk [Proc, nil]
213
+ #
214
+ # @return [Object, nil]
215
+ def dig(data, pick, &blk)
216
+ case [data, pick]
217
+ in [_, nil]
218
+ data
219
+ in [Hash, Symbol] | [Array, Integer]
220
+ data.fetch(pick) { blk&.call }
221
+ in [Hash | Array, Array]
222
+ pick.reduce(data) do |acc, key|
223
+ case acc
224
+ in Hash if acc.key?(key)
225
+ acc.fetch(key)
226
+ in Array if key.is_a?(Integer) && key < acc.length
227
+ acc[key]
228
+ else
229
+ return blk&.call
230
+ end
231
+ end
232
+ in [_, Proc]
233
+ pick.call(data)
234
+ else
235
+ blk&.call
236
+ end
237
+ end
238
+ end
239
+
240
+ # @type [Regexp]
241
+ #
242
+ # https://www.rfc-editor.org/rfc/rfc3986.html#section-3.3
243
+ RFC_3986_NOT_PCHARS = /[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/
244
+
245
+ class << self
246
+ # @api private
247
+ #
248
+ # @param uri [URI::Generic]
249
+ #
250
+ # @return [String]
251
+ def uri_origin(uri)
252
+ "#{uri.scheme}://#{uri.host}#{":#{uri.port}" unless uri.port == uri.default_port}"
253
+ end
254
+
255
+ # @api private
256
+ #
257
+ # @param path [String, Integer]
258
+ #
259
+ # @return [String]
260
+ def encode_path(path)
261
+ path.to_s.gsub(::Believe::Internal::Util::RFC_3986_NOT_PCHARS) { ERB::Util.url_encode(_1) }
262
+ end
263
+
264
+ # @api private
265
+ #
266
+ # @param path [String, Array<String>]
267
+ #
268
+ # @return [String]
269
+ def interpolate_path(path)
270
+ case path
271
+ in String
272
+ path
273
+ in []
274
+ ""
275
+ in [String => p, *interpolations]
276
+ encoded = interpolations.map { encode_path(_1) }
277
+ format(p, *encoded)
278
+ end
279
+ end
280
+ end
281
+
282
+ class << self
283
+ # @api private
284
+ #
285
+ # @param query [String, nil]
286
+ #
287
+ # @return [Hash{String=>Array<String>}]
288
+ def decode_query(query)
289
+ CGI.parse(query.to_s)
290
+ end
291
+
292
+ # @api private
293
+ #
294
+ # @param query [Hash{String=>Array<String>, String, nil}, nil]
295
+ #
296
+ # @return [String, nil]
297
+ def encode_query(query)
298
+ query.to_h.empty? ? nil : URI.encode_www_form(query)
299
+ end
300
+ end
301
+
302
+ class << self
303
+ # @api private
304
+ #
305
+ # @param url [URI::Generic, String]
306
+ #
307
+ # @return [Hash{Symbol=>String, Integer, nil}]
308
+ def parse_uri(url)
309
+ parsed = URI::Generic.component.zip(URI.split(url)).to_h
310
+ {**parsed, query: decode_query(parsed.fetch(:query))}
311
+ end
312
+
313
+ # @api private
314
+ #
315
+ # @param parsed [Hash{Symbol=>String, Integer, nil}] .
316
+ #
317
+ # @option parsed [String, nil] :scheme
318
+ #
319
+ # @option parsed [String, nil] :host
320
+ #
321
+ # @option parsed [Integer, nil] :port
322
+ #
323
+ # @option parsed [String, nil] :path
324
+ #
325
+ # @option parsed [Hash{String=>Array<String>}] :query
326
+ #
327
+ # @return [URI::Generic]
328
+ def unparse_uri(parsed)
329
+ URI::Generic.build(**parsed, query: encode_query(parsed.fetch(:query)))
330
+ end
331
+
332
+ # @api private
333
+ #
334
+ # @param lhs [Hash{Symbol=>String, Integer, nil}] .
335
+ #
336
+ # @option lhs [String, nil] :scheme
337
+ #
338
+ # @option lhs [String, nil] :host
339
+ #
340
+ # @option lhs [Integer, nil] :port
341
+ #
342
+ # @option lhs [String, nil] :path
343
+ #
344
+ # @option lhs [Hash{String=>Array<String>}] :query
345
+ #
346
+ # @param rhs [Hash{Symbol=>String, Integer, nil}] .
347
+ #
348
+ # @option rhs [String, nil] :scheme
349
+ #
350
+ # @option rhs [String, nil] :host
351
+ #
352
+ # @option rhs [Integer, nil] :port
353
+ #
354
+ # @option rhs [String, nil] :path
355
+ #
356
+ # @option rhs [Hash{String=>Array<String>}] :query
357
+ #
358
+ # @return [URI::Generic]
359
+ def join_parsed_uri(lhs, rhs)
360
+ base_path, base_query = lhs.fetch_values(:path, :query)
361
+ slashed = base_path.end_with?("/") ? base_path : "#{base_path}/"
362
+
363
+ merged = {**parse_uri(rhs.fetch(:path)), **rhs.except(:path, :query)}
364
+ parsed_path, parsed_query = merged.fetch_values(:path, :query)
365
+ override = URI::Generic.build(**merged.slice(:scheme, :host, :port), path: parsed_path)
366
+
367
+ joined = URI.join(URI::Generic.build(lhs.except(:path, :query)), slashed, override)
368
+ query = deep_merge(
369
+ joined.path == base_path ? base_query : {},
370
+ parsed_query,
371
+ rhs[:query].to_h,
372
+ concat: true
373
+ )
374
+
375
+ joined.query = encode_query(query)
376
+ joined
377
+ end
378
+ end
379
+
380
+ class << self
381
+ # @api private
382
+ #
383
+ # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
384
+ #
385
+ # @return [Hash{String=>String}]
386
+ def normalized_headers(*headers)
387
+ {}.merge(*headers.compact).to_h do |key, val|
388
+ value =
389
+ case val
390
+ in Array
391
+ val.filter_map { _1&.to_s&.strip }.join(", ")
392
+ else
393
+ val&.to_s&.strip
394
+ end
395
+ [key.downcase, value]
396
+ end
397
+ end
398
+ end
399
+
400
+ # @api private
401
+ #
402
+ # An adapter that satisfies the IO interface required by `::IO.copy_stream`
403
+ class ReadIOAdapter
404
+ # @api private
405
+ #
406
+ # @return [Boolean, nil]
407
+ def close? = @closing
408
+
409
+ # @api private
410
+ def close
411
+ case @stream
412
+ in Enumerator
413
+ ::Believe::Internal::Util.close_fused!(@stream)
414
+ in IO if close?
415
+ @stream.close
416
+ else
417
+ end
418
+ end
419
+
420
+ # @api private
421
+ #
422
+ # @param max_len [Integer, nil]
423
+ #
424
+ # @return [String]
425
+ private def read_enum(max_len)
426
+ case max_len
427
+ in nil
428
+ @stream.to_a.join
429
+ in Integer
430
+ @buf << @stream.next while @buf.length < max_len
431
+ @buf.slice!(..max_len)
432
+ end
433
+ rescue StopIteration
434
+ @stream = nil
435
+ @buf.slice!(0..)
436
+ end
437
+
438
+ # @api private
439
+ #
440
+ # @param max_len [Integer, nil]
441
+ # @param out_string [String, nil]
442
+ #
443
+ # @return [String, nil]
444
+ def read(max_len = nil, out_string = nil)
445
+ case @stream
446
+ in nil
447
+ nil
448
+ in IO | StringIO
449
+ @stream.read(max_len, out_string)
450
+ in Enumerator
451
+ read = read_enum(max_len)
452
+ case out_string
453
+ in String
454
+ out_string.replace(read)
455
+ in nil
456
+ read
457
+ end
458
+ end
459
+ .tap(&@blk)
460
+ end
461
+
462
+ # @api private
463
+ #
464
+ # @param src [String, Pathname, StringIO, Enumerable<String>]
465
+ # @param blk [Proc]
466
+ #
467
+ # @yieldparam [String]
468
+ def initialize(src, &blk)
469
+ @stream =
470
+ case src
471
+ in String
472
+ StringIO.new(src)
473
+ in Pathname
474
+ @closing = true
475
+ src.open(binmode: true)
476
+ else
477
+ src
478
+ end
479
+ @buf = String.new
480
+ @blk = blk
481
+ end
482
+ end
483
+
484
+ class << self
485
+ # @param blk [Proc]
486
+ #
487
+ # @yieldparam [Enumerator::Yielder]
488
+ # @return [Enumerable<String>]
489
+ def writable_enum(&blk)
490
+ Enumerator.new do |y|
491
+ y.define_singleton_method(:write) do
492
+ self << _1.dup
493
+ _1.bytesize
494
+ end
495
+
496
+ blk.call(y)
497
+ end
498
+ end
499
+ end
500
+
501
+ # @type [Regexp]
502
+ JSON_CONTENT = %r{^application/(?:[a-zA-Z0-9.-]+\+)?json(?!l)}
503
+ # @type [Regexp]
504
+ JSONL_CONTENT = %r{^application/(:?x-(?:n|l)djson)|(:?(?:x-)?jsonl)}
505
+
506
+ class << self
507
+ # @api private
508
+ #
509
+ # @param query [Hash{Symbol=>Object}]
510
+ #
511
+ # @return [Hash{Symbol=>Object}]
512
+ def encode_query_params(query)
513
+ out = {}
514
+ query.each { write_query_param_element!(out, _1, _2) }
515
+ out
516
+ end
517
+
518
+ # @api private
519
+ #
520
+ # @param collection [Hash{Symbol=>Object}]
521
+ # @param key [String]
522
+ # @param element [Object]
523
+ #
524
+ # @return [nil]
525
+ private def write_query_param_element!(collection, key, element)
526
+ case element
527
+ in Hash
528
+ element.each do |name, value|
529
+ write_query_param_element!(collection, "#{key}[#{name}]", value)
530
+ end
531
+ in Array
532
+ collection[key] = element.map(&:to_s).join(",")
533
+ else
534
+ collection[key] = element.to_s
535
+ end
536
+ end
537
+
538
+ # @api private
539
+ #
540
+ # @param y [Enumerator::Yielder]
541
+ # @param val [Object]
542
+ # @param closing [Array<Proc>]
543
+ # @param content_type [String, nil]
544
+ private def write_multipart_content(y, val:, closing:, content_type: nil)
545
+ content_line = "Content-Type: %s\r\n\r\n"
546
+
547
+ case val
548
+ in ::Believe::FilePart
549
+ return write_multipart_content(
550
+ y,
551
+ val: val.content,
552
+ closing: closing,
553
+ content_type: val.content_type
554
+ )
555
+ in Pathname
556
+ y << format(content_line, content_type || "application/octet-stream")
557
+ io = val.open(binmode: true)
558
+ closing << io.method(:close)
559
+ IO.copy_stream(io, y)
560
+ in IO
561
+ y << format(content_line, content_type || "application/octet-stream")
562
+ IO.copy_stream(val, y)
563
+ in StringIO
564
+ y << format(content_line, content_type || "application/octet-stream")
565
+ y << val.string
566
+ in -> { primitive?(_1) }
567
+ y << format(content_line, content_type || "text/plain")
568
+ y << val.to_s
569
+ else
570
+ y << format(content_line, content_type || "application/json")
571
+ y << JSON.generate(val)
572
+ end
573
+ y << "\r\n"
574
+ end
575
+
576
+ # @api private
577
+ #
578
+ # @param y [Enumerator::Yielder]
579
+ # @param boundary [String]
580
+ # @param key [Symbol, String]
581
+ # @param val [Object]
582
+ # @param closing [Array<Proc>]
583
+ private def write_multipart_chunk(y, boundary:, key:, val:, closing:)
584
+ y << "--#{boundary}\r\n"
585
+ y << "Content-Disposition: form-data"
586
+
587
+ unless key.nil?
588
+ y << "; name=\"#{key}\""
589
+ end
590
+
591
+ case val
592
+ in ::Believe::FilePart unless val.filename.nil?
593
+ filename = encode_path(val.filename)
594
+ y << "; filename=\"#{filename}\""
595
+ in Pathname | IO
596
+ filename = encode_path(::File.basename(val.to_path))
597
+ y << "; filename=\"#{filename}\""
598
+ else
599
+ end
600
+ y << "\r\n"
601
+
602
+ write_multipart_content(y, val: val, closing: closing)
603
+ end
604
+
605
+ # @api private
606
+ #
607
+ # https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.1.md#special-considerations-for-multipart-content
608
+ #
609
+ # @param body [Object]
610
+ #
611
+ # @return [Array(String, Enumerable<String>)]
612
+ private def encode_multipart_streaming(body)
613
+ # rubocop:disable Style/CaseEquality
614
+ # RFC 1521 Section 7.2.1 says we should have 70 char maximum for boundary length
615
+ boundary = SecureRandom.urlsafe_base64(46)
616
+
617
+ closing = []
618
+ strio = writable_enum do |y|
619
+ case body
620
+ in Hash
621
+ body.each do |key, val|
622
+ case val
623
+ in Array if val.all? { primitive?(_1) || ::Believe::Internal::Type::FileInput === _1 }
624
+ val.each do |v|
625
+ write_multipart_chunk(y, boundary: boundary, key: key, val: v, closing: closing)
626
+ end
627
+ else
628
+ write_multipart_chunk(y, boundary: boundary, key: key, val: val, closing: closing)
629
+ end
630
+ end
631
+ else
632
+ write_multipart_chunk(y, boundary: boundary, key: nil, val: body, closing: closing)
633
+ end
634
+ y << "--#{boundary}--\r\n"
635
+ end
636
+
637
+ fused_io = fused_enum(strio) { closing.each(&:call) }
638
+ [boundary, fused_io]
639
+ # rubocop:enable Style/CaseEquality
640
+ end
641
+
642
+ # @api private
643
+ #
644
+ # @param headers [Hash{String=>String}]
645
+ # @param body [Object]
646
+ #
647
+ # @return [Object]
648
+ def encode_content(headers, body)
649
+ # rubocop:disable Style/CaseEquality
650
+ # rubocop:disable Layout/LineLength
651
+ content_type = headers["content-type"]
652
+ case [content_type, body]
653
+ in [::Believe::Internal::Util::JSON_CONTENT, Hash | Array | -> { primitive?(_1) }]
654
+ [headers, JSON.generate(body)]
655
+ in [::Believe::Internal::Util::JSONL_CONTENT, Enumerable] unless ::Believe::Internal::Type::FileInput === body
656
+ [headers, body.lazy.map { JSON.generate(_1) }]
657
+ in [%r{^multipart/form-data}, Hash | ::Believe::Internal::Type::FileInput]
658
+ boundary, strio = encode_multipart_streaming(body)
659
+ headers = {**headers, "content-type" => "#{content_type}; boundary=#{boundary}"}
660
+ [headers, strio]
661
+ in [_, Symbol | Numeric]
662
+ [headers, body.to_s]
663
+ in [_, StringIO]
664
+ [headers, body.string]
665
+ in [_, ::Believe::FilePart]
666
+ [headers, body.content]
667
+ else
668
+ [headers, body]
669
+ end
670
+ # rubocop:enable Layout/LineLength
671
+ # rubocop:enable Style/CaseEquality
672
+ end
673
+
674
+ # @api private
675
+ #
676
+ # https://www.iana.org/assignments/character-sets/character-sets.xhtml
677
+ #
678
+ # @param content_type [String]
679
+ # @param text [String]
680
+ def force_charset!(content_type, text:)
681
+ charset = /charset=([^;\s]+)/.match(content_type)&.captures&.first
682
+
683
+ return unless charset
684
+
685
+ begin
686
+ encoding = Encoding.find(charset)
687
+ text.force_encoding(encoding)
688
+ rescue ArgumentError
689
+ nil
690
+ end
691
+ end
692
+
693
+ # @api private
694
+ #
695
+ # Assumes each chunk in stream has `Encoding::BINARY`.
696
+ #
697
+ # @param headers [Hash{String=>String}]
698
+ # @param stream [Enumerable<String>]
699
+ # @param suppress_error [Boolean]
700
+ #
701
+ # @raise [JSON::ParserError]
702
+ # @return [Object]
703
+ def decode_content(headers, stream:, suppress_error: false)
704
+ case (content_type = headers["content-type"])
705
+ in ::Believe::Internal::Util::JSON_CONTENT
706
+ return nil if (json = stream.to_a.join).empty?
707
+
708
+ begin
709
+ JSON.parse(json, symbolize_names: true)
710
+ rescue JSON::ParserError => e
711
+ raise e unless suppress_error
712
+ json
713
+ end
714
+ in ::Believe::Internal::Util::JSONL_CONTENT
715
+ lines = decode_lines(stream)
716
+ chain_fused(lines) do |y|
717
+ lines.each do
718
+ next if _1.empty?
719
+
720
+ y << JSON.parse(_1, symbolize_names: true)
721
+ end
722
+ end
723
+ in %r{^text/event-stream}
724
+ lines = decode_lines(stream)
725
+ decode_sse(lines)
726
+ else
727
+ text = stream.to_a.join
728
+ force_charset!(content_type, text: text)
729
+ StringIO.new(text)
730
+ end
731
+ end
732
+ end
733
+
734
+ class << self
735
+ # @api private
736
+ #
737
+ # https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
738
+ #
739
+ # @param enum [Enumerable<Object>]
740
+ # @param external [Boolean]
741
+ # @param close [Proc]
742
+ #
743
+ # @return [Enumerable<Object>]
744
+ def fused_enum(enum, external: false, &close)
745
+ fused = false
746
+ iter = Enumerator.new do |y|
747
+ next if fused
748
+
749
+ fused = true
750
+ if external
751
+ loop { y << enum.next }
752
+ else
753
+ enum.each(&y)
754
+ end
755
+ ensure
756
+ close&.call
757
+ close = nil
758
+ end
759
+
760
+ iter.define_singleton_method(:rewind) do
761
+ fused = true
762
+ self
763
+ end
764
+ iter
765
+ end
766
+
767
+ # @api private
768
+ #
769
+ # @param enum [Enumerable<Object>, nil]
770
+ def close_fused!(enum)
771
+ return unless enum.is_a?(Enumerator)
772
+
773
+ # rubocop:disable Lint/UnreachableLoop
774
+ enum.rewind.each { break }
775
+ # rubocop:enable Lint/UnreachableLoop
776
+ end
777
+
778
+ # @api private
779
+ #
780
+ # @param enum [Enumerable<Object>, nil]
781
+ # @param blk [Proc]
782
+ #
783
+ # @yieldparam [Enumerator::Yielder]
784
+ # @return [Enumerable<Object>]
785
+ def chain_fused(enum, &blk)
786
+ iter = Enumerator.new { blk.call(_1) }
787
+ fused_enum(iter) { close_fused!(enum) }
788
+ end
789
+ end
790
+
791
+ class << self
792
+ # @api private
793
+ #
794
+ # Assumes Strings have been forced into having `Encoding::BINARY`.
795
+ #
796
+ # This decoder is responsible for reassembling lines split across multiple
797
+ # fragments.
798
+ #
799
+ # @param enum [Enumerable<String>]
800
+ #
801
+ # @return [Enumerable<String>]
802
+ def decode_lines(enum)
803
+ re = /(\r\n|\r|\n)/
804
+ buffer = String.new
805
+ cr_seen = nil
806
+
807
+ chain_fused(enum) do |y|
808
+ enum.each do |row|
809
+ offset = buffer.bytesize
810
+ buffer << row
811
+ while (match = re.match(buffer, cr_seen&.to_i || offset))
812
+ case [match.captures.first, cr_seen]
813
+ in ["\r", nil]
814
+ cr_seen = match.end(1)
815
+ next
816
+ in ["\r" | "\r\n", Integer]
817
+ y << buffer.slice!(..(cr_seen.pred))
818
+ else
819
+ y << buffer.slice!(..(match.end(1).pred))
820
+ end
821
+ offset = 0
822
+ cr_seen = nil
823
+ end
824
+ end
825
+
826
+ y << buffer.slice!(..(cr_seen.pred)) unless cr_seen.nil?
827
+ y << buffer unless buffer.empty?
828
+ end
829
+ end
830
+
831
+ # @api private
832
+ #
833
+ # https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
834
+ #
835
+ # Assumes that `lines` has been decoded with `#decode_lines`.
836
+ #
837
+ # @param lines [Enumerable<String>]
838
+ #
839
+ # @return [Enumerable<Hash{Symbol=>Object}>]
840
+ def decode_sse(lines)
841
+ # rubocop:disable Metrics/BlockLength
842
+ chain_fused(lines) do |y|
843
+ blank = {event: nil, data: nil, id: nil, retry: nil}
844
+ current = {}
845
+
846
+ lines.each do |line|
847
+ case line.sub(/\R$/, "")
848
+ in ""
849
+ next if current.empty?
850
+ y << {**blank, **current}
851
+ current = {}
852
+ in /^:/
853
+ next
854
+ in /^([^:]+):\s?(.*)$/
855
+ field, value = Regexp.last_match.captures
856
+ case field
857
+ in "event"
858
+ current.merge!(event: value)
859
+ in "data"
860
+ (current[:data] ||= String.new) << (value << "\n")
861
+ in "id" unless value.include?("\0")
862
+ current.merge!(id: value)
863
+ in "retry" if /^\d+$/ =~ value
864
+ current.merge!(retry: Integer(value))
865
+ else
866
+ end
867
+ else
868
+ end
869
+ end
870
+ # rubocop:enable Metrics/BlockLength
871
+
872
+ y << {**blank, **current} unless current.empty?
873
+ end
874
+ end
875
+ end
876
+
877
+ # @api private
878
+ module SorbetRuntimeSupport
879
+ class MissingSorbetRuntimeError < ::RuntimeError
880
+ end
881
+
882
+ # @api private
883
+ #
884
+ # @return [Hash{Symbol=>Object}]
885
+ private def sorbet_runtime_constants = @sorbet_runtime_constants ||= {}
886
+
887
+ # @api private
888
+ #
889
+ # @param name [Symbol]
890
+ def const_missing(name)
891
+ super unless sorbet_runtime_constants.key?(name)
892
+
893
+ unless Object.const_defined?(:T)
894
+ message = "Trying to access a Sorbet constant #{name.inspect} without `sorbet-runtime`."
895
+ raise MissingSorbetRuntimeError.new(message)
896
+ end
897
+
898
+ sorbet_runtime_constants.fetch(name).call
899
+ end
900
+
901
+ # @api private
902
+ #
903
+ # @param name [Symbol]
904
+ #
905
+ # @return [Boolean]
906
+ def sorbet_constant_defined?(name) = sorbet_runtime_constants.key?(name)
907
+
908
+ # @api private
909
+ #
910
+ # @param name [Symbol]
911
+ # @param blk [Proc]
912
+ def define_sorbet_constant!(name, &blk) = sorbet_runtime_constants.store(name, blk)
913
+
914
+ # @api private
915
+ #
916
+ # @return [Object]
917
+ def to_sorbet_type = raise NotImplementedError
918
+
919
+ class << self
920
+ # @api private
921
+ #
922
+ # @param type [::Believe::Internal::Util::SorbetRuntimeSupport, Object]
923
+ #
924
+ # @return [Object]
925
+ def to_sorbet_type(type)
926
+ case type
927
+ in ::Believe::Internal::Util::SorbetRuntimeSupport
928
+ type.to_sorbet_type
929
+ in Class | Module
930
+ type
931
+ in true | false
932
+ T::Boolean
933
+ else
934
+ type.class
935
+ end
936
+ end
937
+ end
938
+ end
939
+
940
+ extend ::Believe::Internal::Util::SorbetRuntimeSupport
941
+
942
+ define_sorbet_constant!(:ParsedUri) do
943
+ T.type_alias do
944
+ {
945
+ scheme: T.nilable(String),
946
+ host: T.nilable(String),
947
+ port: T.nilable(Integer),
948
+ path: T.nilable(String),
949
+ query: T::Hash[String, T::Array[String]]
950
+ }
951
+ end
952
+ end
953
+
954
+ define_sorbet_constant!(:ServerSentEvent) do
955
+ T.type_alias do
956
+ {
957
+ event: T.nilable(String),
958
+ data: T.nilable(String),
959
+ id: T.nilable(String),
960
+ retry: T.nilable(Integer)
961
+ }
962
+ end
963
+ end
964
+ end
965
+ end
966
+ end