x_api_scraper 0.1.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 (459) hide show
  1. checksums.yaml +7 -0
  2. data/lib/crystalline/enum.rbi +17 -0
  3. data/lib/crystalline/metadata_fields.rb +265 -0
  4. data/lib/crystalline/module.rb +188 -0
  5. data/lib/crystalline/types.rb +170 -0
  6. data/lib/crystalline/utils.rb +69 -0
  7. data/lib/crystalline.rb +13 -0
  8. data/lib/x_api_scraper.rb +41 -0
  9. data/lib/xapi_scraper/account.rb +194 -0
  10. data/lib/xapi_scraper/actions.rb +2166 -0
  11. data/lib/xapi_scraper/analysis.rb +230 -0
  12. data/lib/xapi_scraper/articles.rb +410 -0
  13. data/lib/xapi_scraper/client.rb +133 -0
  14. data/lib/xapi_scraper/communities.rb +1352 -0
  15. data/lib/xapi_scraper/dm.rb +990 -0
  16. data/lib/xapi_scraper/engagement.rb +792 -0
  17. data/lib/xapi_scraper/followers.rb +420 -0
  18. data/lib/xapi_scraper/following.rb +230 -0
  19. data/lib/xapi_scraper/lists.rb +1156 -0
  20. data/lib/xapi_scraper/models/callbacks.rb +12 -0
  21. data/lib/xapi_scraper/models/components/accountverifymodel.rb +82 -0
  22. data/lib/xapi_scraper/models/components/accountverifymodel.rbi +38 -0
  23. data/lib/xapi_scraper/models/components/accountverifyresponse.rb +47 -0
  24. data/lib/xapi_scraper/models/components/accountverifyresponse.rbi +26 -0
  25. data/lib/xapi_scraper/models/components/advancedsearchcursorquery.rb +51 -0
  26. data/lib/xapi_scraper/models/components/advancedsearchcursorquery.rbi +26 -0
  27. data/lib/xapi_scraper/models/components/advancedsearchcursorresponse.rb +76 -0
  28. data/lib/xapi_scraper/models/components/advancedsearchcursorresponse.rbi +38 -0
  29. data/lib/xapi_scraper/models/components/articleblock.rb +50 -0
  30. data/lib/xapi_scraper/models/components/articleblock.rbi +26 -0
  31. data/lib/xapi_scraper/models/components/articleblockrange.rb +47 -0
  32. data/lib/xapi_scraper/models/components/articleblockrange.rbi +26 -0
  33. data/lib/xapi_scraper/models/components/blockuserresponse.rb +54 -0
  34. data/lib/xapi_scraper/models/components/blockuserresponse.rbi +26 -0
  35. data/lib/xapi_scraper/models/components/bookmarkbody.rb +43 -0
  36. data/lib/xapi_scraper/models/components/bookmarkbody.rbi +20 -0
  37. data/lib/xapi_scraper/models/components/cashtagsquery.rb +192 -0
  38. data/lib/xapi_scraper/models/components/cashtagsquery.rbi +98 -0
  39. data/lib/xapi_scraper/models/components/cashtagsquery_language.rb +76 -0
  40. data/lib/xapi_scraper/models/components/cashtagsquery_language.rbi +9 -0
  41. data/lib/xapi_scraper/models/components/cashtagsquery_sortby.rb +18 -0
  42. data/lib/xapi_scraper/models/components/cashtagsquery_sortby.rbi +9 -0
  43. data/lib/xapi_scraper/models/components/communitymodel.rb +164 -0
  44. data/lib/xapi_scraper/models/components/communitymodel.rbi +92 -0
  45. data/lib/xapi_scraper/models/components/communitytweetsresponse.rb +47 -0
  46. data/lib/xapi_scraper/models/components/communitytweetsresponse.rbi +26 -0
  47. data/lib/xapi_scraper/models/components/context.rb +25 -0
  48. data/lib/xapi_scraper/models/components/context.rbi +9 -0
  49. data/lib/xapi_scraper/models/components/conversationv3model.rb +57 -0
  50. data/lib/xapi_scraper/models/components/conversationv3model.rbi +32 -0
  51. data/lib/xapi_scraper/models/components/createthreaddata.rb +35 -0
  52. data/lib/xapi_scraper/models/components/createthreaddata.rbi +14 -0
  53. data/lib/xapi_scraper/models/components/createthreadquery.rb +51 -0
  54. data/lib/xapi_scraper/models/components/createthreadquery.rbi +26 -0
  55. data/lib/xapi_scraper/models/components/createthreadresponse.rb +47 -0
  56. data/lib/xapi_scraper/models/components/createthreadresponse.rbi +26 -0
  57. data/lib/xapi_scraper/models/components/createthreadtweetitem.rb +31 -0
  58. data/lib/xapi_scraper/models/components/createthreadtweetitem.rbi +14 -0
  59. data/lib/xapi_scraper/models/components/deletebookmarkquery.rb +35 -0
  60. data/lib/xapi_scraper/models/components/deletebookmarkquery.rbi +14 -0
  61. data/lib/xapi_scraper/models/components/deleteretweetquery.rb +35 -0
  62. data/lib/xapi_scraper/models/components/deleteretweetquery.rbi +14 -0
  63. data/lib/xapi_scraper/models/components/deletetweetquery.rb +51 -0
  64. data/lib/xapi_scraper/models/components/deletetweetquery.rbi +26 -0
  65. data/lib/xapi_scraper/models/components/deletetweetresponse.rb +51 -0
  66. data/lib/xapi_scraper/models/components/deletetweetresponse.rbi +26 -0
  67. data/lib/xapi_scraper/models/components/dmhistoryv3data.rb +54 -0
  68. data/lib/xapi_scraper/models/components/dmhistoryv3data.rbi +26 -0
  69. data/lib/xapi_scraper/models/components/dmstatusmodelv2.rb +122 -0
  70. data/lib/xapi_scraper/models/components/dmstatusmodelv2.rbi +62 -0
  71. data/lib/xapi_scraper/models/components/dmstatusresponsev2.rb +47 -0
  72. data/lib/xapi_scraper/models/components/dmstatusresponsev2.rbi +26 -0
  73. data/lib/xapi_scraper/models/components/followersfollowingv3query.rb +51 -0
  74. data/lib/xapi_scraper/models/components/followersfollowingv3query.rbi +26 -0
  75. data/lib/xapi_scraper/models/components/followuserquery.rb +43 -0
  76. data/lib/xapi_scraper/models/components/followuserquery.rbi +20 -0
  77. data/lib/xapi_scraper/models/components/getalltweetsrepliescursorquery.rb +43 -0
  78. data/lib/xapi_scraper/models/components/getalltweetsrepliescursorquery.rbi +20 -0
  79. data/lib/xapi_scraper/models/components/getalltweetsrepliescursorresponse.rb +76 -0
  80. data/lib/xapi_scraper/models/components/getalltweetsrepliescursorresponse.rbi +38 -0
  81. data/lib/xapi_scraper/models/components/getcommunitymemberscursorquery.rb +43 -0
  82. data/lib/xapi_scraper/models/components/getcommunitymemberscursorquery.rbi +20 -0
  83. data/lib/xapi_scraper/models/components/getcommunitymemberscursorresponse.rb +72 -0
  84. data/lib/xapi_scraper/models/components/getcommunitymemberscursorresponse.rbi +38 -0
  85. data/lib/xapi_scraper/models/components/getcommunityresponse.rb +47 -0
  86. data/lib/xapi_scraper/models/components/getcommunityresponse.rbi +26 -0
  87. data/lib/xapi_scraper/models/components/getcommunitytweetscursorquery.rb +60 -0
  88. data/lib/xapi_scraper/models/components/getcommunitytweetscursorquery.rbi +26 -0
  89. data/lib/xapi_scraper/models/components/getcommunitytweetscursorresponse.rb +72 -0
  90. data/lib/xapi_scraper/models/components/getcommunitytweetscursorresponse.rbi +38 -0
  91. data/lib/xapi_scraper/models/components/getconversationsv3query.rb +62 -0
  92. data/lib/xapi_scraper/models/components/getconversationsv3query.rbi +32 -0
  93. data/lib/xapi_scraper/models/components/getconversationsv3response.rb +47 -0
  94. data/lib/xapi_scraper/models/components/getconversationsv3response.rbi +26 -0
  95. data/lib/xapi_scraper/models/components/getdmhistoryv3query.rb +94 -0
  96. data/lib/xapi_scraper/models/components/getdmhistoryv3query.rbi +50 -0
  97. data/lib/xapi_scraper/models/components/getdmhistoryv3response.rb +47 -0
  98. data/lib/xapi_scraper/models/components/getdmhistoryv3response.rbi +26 -0
  99. data/lib/xapi_scraper/models/components/getdmmediav3data.rb +77 -0
  100. data/lib/xapi_scraper/models/components/getdmmediav3data.rbi +44 -0
  101. data/lib/xapi_scraper/models/components/getdmmediav3query.rb +112 -0
  102. data/lib/xapi_scraper/models/components/getdmmediav3query.rbi +56 -0
  103. data/lib/xapi_scraper/models/components/getdmmediav3response.rb +47 -0
  104. data/lib/xapi_scraper/models/components/getdmmediav3response.rbi +26 -0
  105. data/lib/xapi_scraper/models/components/getlistmemberscursorquery.rb +43 -0
  106. data/lib/xapi_scraper/models/components/getlistmemberscursorquery.rbi +20 -0
  107. data/lib/xapi_scraper/models/components/getlistmemberscursorresponse.rb +72 -0
  108. data/lib/xapi_scraper/models/components/getlistmemberscursorresponse.rbi +38 -0
  109. data/lib/xapi_scraper/models/components/getlisttweetscursorquery.rb +43 -0
  110. data/lib/xapi_scraper/models/components/getlisttweetscursorquery.rbi +20 -0
  111. data/lib/xapi_scraper/models/components/getlisttweetscursorresponse.rb +72 -0
  112. data/lib/xapi_scraper/models/components/getlisttweetscursorresponse.rbi +38 -0
  113. data/lib/xapi_scraper/models/components/getquotescursorquery.rb +63 -0
  114. data/lib/xapi_scraper/models/components/getquotescursorquery.rbi +26 -0
  115. data/lib/xapi_scraper/models/components/getquotescursorquery_sort_by.rb +18 -0
  116. data/lib/xapi_scraper/models/components/getquotescursorquery_sort_by.rbi +9 -0
  117. data/lib/xapi_scraper/models/components/getquotescursorresponse.rb +72 -0
  118. data/lib/xapi_scraper/models/components/getquotescursorresponse.rbi +38 -0
  119. data/lib/xapi_scraper/models/components/getquotesquery.rb +59 -0
  120. data/lib/xapi_scraper/models/components/getquotesquery.rbi +26 -0
  121. data/lib/xapi_scraper/models/components/getquotesquery_sort_by.rb +18 -0
  122. data/lib/xapi_scraper/models/components/getquotesquery_sort_by.rbi +9 -0
  123. data/lib/xapi_scraper/models/components/getquotesresponse.rb +47 -0
  124. data/lib/xapi_scraper/models/components/getquotesresponse.rbi +26 -0
  125. data/lib/xapi_scraper/models/components/getrepliespagequery.rb +51 -0
  126. data/lib/xapi_scraper/models/components/getrepliespagequery.rbi +20 -0
  127. data/lib/xapi_scraper/models/components/getrepliespagequery_sort_by.rb +19 -0
  128. data/lib/xapi_scraper/models/components/getrepliespagequery_sort_by.rbi +9 -0
  129. data/lib/xapi_scraper/models/components/getrepliespageresponse.rb +85 -0
  130. data/lib/xapi_scraper/models/components/getrepliespageresponse.rbi +44 -0
  131. data/lib/xapi_scraper/models/components/getretweeterscursorquery.rb +43 -0
  132. data/lib/xapi_scraper/models/components/getretweeterscursorquery.rbi +20 -0
  133. data/lib/xapi_scraper/models/components/getretweeterscursorresponse.rb +72 -0
  134. data/lib/xapi_scraper/models/components/getretweeterscursorresponse.rbi +38 -0
  135. data/lib/xapi_scraper/models/components/gettweetsbyidresponse.rb +58 -0
  136. data/lib/xapi_scraper/models/components/gettweetsbyidresponse.rbi +26 -0
  137. data/lib/xapi_scraper/models/components/hashtagsquery.rb +192 -0
  138. data/lib/xapi_scraper/models/components/hashtagsquery.rbi +98 -0
  139. data/lib/xapi_scraper/models/components/hashtagsquery_language.rb +76 -0
  140. data/lib/xapi_scraper/models/components/hashtagsquery_language.rbi +9 -0
  141. data/lib/xapi_scraper/models/components/hashtagsquery_sortby.rb +18 -0
  142. data/lib/xapi_scraper/models/components/hashtagsquery_sortby.rbi +9 -0
  143. data/lib/xapi_scraper/models/components/likeactionbody.rb +43 -0
  144. data/lib/xapi_scraper/models/components/likeactionbody.rbi +20 -0
  145. data/lib/xapi_scraper/models/components/listmembersresponse.rb +47 -0
  146. data/lib/xapi_scraper/models/components/listmembersresponse.rbi +26 -0
  147. data/lib/xapi_scraper/models/components/listmodel.rb +77 -0
  148. data/lib/xapi_scraper/models/components/listmodel.rbi +44 -0
  149. data/lib/xapi_scraper/models/components/listsubscribersresponse.rb +47 -0
  150. data/lib/xapi_scraper/models/components/listsubscribersresponse.rbi +26 -0
  151. data/lib/xapi_scraper/models/components/listtweetsresponse.rb +47 -0
  152. data/lib/xapi_scraper/models/components/listtweetsresponse.rbi +26 -0
  153. data/lib/xapi_scraper/models/components/loc.rb +25 -0
  154. data/lib/xapi_scraper/models/components/loc.rbi +9 -0
  155. data/lib/xapi_scraper/models/components/mediamodel.rb +194 -0
  156. data/lib/xapi_scraper/models/components/mediamodel.rbi +110 -0
  157. data/lib/xapi_scraper/models/components/messagemodel.rb +100 -0
  158. data/lib/xapi_scraper/models/components/messagemodel.rbi +56 -0
  159. data/lib/xapi_scraper/models/components/posttweetdata.rb +51 -0
  160. data/lib/xapi_scraper/models/components/posttweetdata.rbi +26 -0
  161. data/lib/xapi_scraper/models/components/posttweetquery.rb +122 -0
  162. data/lib/xapi_scraper/models/components/posttweetquery.rbi +62 -0
  163. data/lib/xapi_scraper/models/components/posttweetresponse.rb +58 -0
  164. data/lib/xapi_scraper/models/components/posttweetresponse.rbi +26 -0
  165. data/lib/xapi_scraper/models/components/posttweetwithoutcookiequery.rb +102 -0
  166. data/lib/xapi_scraper/models/components/posttweetwithoutcookiequery.rbi +50 -0
  167. data/lib/xapi_scraper/models/components/quotetweetquery.rb +112 -0
  168. data/lib/xapi_scraper/models/components/quotetweetquery.rbi +56 -0
  169. data/lib/xapi_scraper/models/components/retweetactionbody.rb +43 -0
  170. data/lib/xapi_scraper/models/components/retweetactionbody.rbi +20 -0
  171. data/lib/xapi_scraper/models/components/searchcommunityquery.rb +43 -0
  172. data/lib/xapi_scraper/models/components/searchcommunityquery.rbi +20 -0
  173. data/lib/xapi_scraper/models/components/searchcommunityresponse.rb +47 -0
  174. data/lib/xapi_scraper/models/components/searchcommunityresponse.rbi +26 -0
  175. data/lib/xapi_scraper/models/components/searchcommunitytweetsquery.rb +51 -0
  176. data/lib/xapi_scraper/models/components/searchcommunitytweetsquery.rbi +26 -0
  177. data/lib/xapi_scraper/models/components/searchlistquery.rb +43 -0
  178. data/lib/xapi_scraper/models/components/searchlistquery.rbi +20 -0
  179. data/lib/xapi_scraper/models/components/searchlistresponse.rb +47 -0
  180. data/lib/xapi_scraper/models/components/searchlistresponse.rbi +26 -0
  181. data/lib/xapi_scraper/models/components/searchresponse.rb +54 -0
  182. data/lib/xapi_scraper/models/components/searchresponse.rbi +26 -0
  183. data/lib/xapi_scraper/models/components/searchuserresponse.rb +47 -0
  184. data/lib/xapi_scraper/models/components/searchuserresponse.rbi +26 -0
  185. data/lib/xapi_scraper/models/components/security.rb +34 -0
  186. data/lib/xapi_scraper/models/components/security.rbi +14 -0
  187. data/lib/xapi_scraper/models/components/senddmresponse.rb +47 -0
  188. data/lib/xapi_scraper/models/components/senddmresponse.rbi +26 -0
  189. data/lib/xapi_scraper/models/components/senddmv3query.rb +90 -0
  190. data/lib/xapi_scraper/models/components/senddmv3query.rbi +50 -0
  191. data/lib/xapi_scraper/models/components/sentimentanalysismodel.rb +43 -0
  192. data/lib/xapi_scraper/models/components/sentimentanalysismodel.rbi +20 -0
  193. data/lib/xapi_scraper/models/components/sentimentanalysisquery.rb +31 -0
  194. data/lib/xapi_scraper/models/components/sentimentanalysisquery.rbi +14 -0
  195. data/lib/xapi_scraper/models/components/sentimentanalysisresponse.rb +47 -0
  196. data/lib/xapi_scraper/models/components/sentimentanalysisresponse.rbi +26 -0
  197. data/lib/xapi_scraper/models/components/standardresponse.rb +47 -0
  198. data/lib/xapi_scraper/models/components/standardresponse.rbi +26 -0
  199. data/lib/xapi_scraper/models/components/streammodel.rb +51 -0
  200. data/lib/xapi_scraper/models/components/streammodel.rbi +26 -0
  201. data/lib/xapi_scraper/models/components/tweet_type.rb +19 -0
  202. data/lib/xapi_scraper/models/components/tweet_type.rbi +9 -0
  203. data/lib/xapi_scraper/models/components/tweetactionresponse.rb +51 -0
  204. data/lib/xapi_scraper/models/components/tweetactionresponse.rbi +26 -0
  205. data/lib/xapi_scraper/models/components/tweetmodel.rb +518 -0
  206. data/lib/xapi_scraper/models/components/tweetmodel.rbi +302 -0
  207. data/lib/xapi_scraper/models/components/tweetthreadbyidbody.rb +53 -0
  208. data/lib/xapi_scraper/models/components/tweetthreadbyidbody.rbi +26 -0
  209. data/lib/xapi_scraper/models/components/twitteraccountbasedstandardresponse.rb +58 -0
  210. data/lib/xapi_scraper/models/components/twitteraccountbasedstandardresponse.rbi +26 -0
  211. data/lib/xapi_scraper/models/components/twitteruseraboutresponse.rb +208 -0
  212. data/lib/xapi_scraper/models/components/twitteruseraboutresponse.rbi +116 -0
  213. data/lib/xapi_scraper/models/components/twitteruseraboutstandardresponse.rb +58 -0
  214. data/lib/xapi_scraper/models/components/twitteruseraboutstandardresponse.rbi +26 -0
  215. data/lib/xapi_scraper/models/components/unfavoritetweetquery.rb +35 -0
  216. data/lib/xapi_scraper/models/components/unfavoritetweetquery.rbi +14 -0
  217. data/lib/xapi_scraper/models/components/unfollowuserquery.rb +43 -0
  218. data/lib/xapi_scraper/models/components/unfollowuserquery.rbi +20 -0
  219. data/lib/xapi_scraper/models/components/unfollowuserresponse.rb +47 -0
  220. data/lib/xapi_scraper/models/components/unfollowuserresponse.rbi +26 -0
  221. data/lib/xapi_scraper/models/components/urlmodel.rb +47 -0
  222. data/lib/xapi_scraper/models/components/urlmodel.rbi +26 -0
  223. data/lib/xapi_scraper/models/components/userinfo.rb +348 -0
  224. data/lib/xapi_scraper/models/components/userinfo.rbi +200 -0
  225. data/lib/xapi_scraper/models/components/usermodel.rb +344 -0
  226. data/lib/xapi_scraper/models/components/usermodel.rbi +200 -0
  227. data/lib/xapi_scraper/models/components/usersdetailsresponse.rb +47 -0
  228. data/lib/xapi_scraper/models/components/usersdetailsresponse.rbi +26 -0
  229. data/lib/xapi_scraper/models/components/usertimelinefillquery.rb +35 -0
  230. data/lib/xapi_scraper/models/components/usertimelinefillquery.rbi +14 -0
  231. data/lib/xapi_scraper/models/components/usertimelinepagequery.rb +43 -0
  232. data/lib/xapi_scraper/models/components/usertimelinepagequery.rbi +20 -0
  233. data/lib/xapi_scraper/models/components/usertimelinepageresponse.rb +112 -0
  234. data/lib/xapi_scraper/models/components/usertimelinepageresponse.rbi +56 -0
  235. data/lib/xapi_scraper/models/components/usertimelineresponse.rb +76 -0
  236. data/lib/xapi_scraper/models/components/usertimelineresponse.rbi +38 -0
  237. data/lib/xapi_scraper/models/components/usertweetitem.rb +225 -0
  238. data/lib/xapi_scraper/models/components/usertweetitem.rbi +122 -0
  239. data/lib/xapi_scraper/models/components/validationerror.rb +67 -0
  240. data/lib/xapi_scraper/models/components/validationerror.rbi +38 -0
  241. data/lib/xapi_scraper/models/components/verifiedfollowersdata.rb +58 -0
  242. data/lib/xapi_scraper/models/components/verifiedfollowersdata.rbi +26 -0
  243. data/lib/xapi_scraper/models/components/verifiedfollowersresponse.rb +47 -0
  244. data/lib/xapi_scraper/models/components/verifiedfollowersresponse.rbi +26 -0
  245. data/lib/xapi_scraper/models/components/xarticlemodel.rb +305 -0
  246. data/lib/xapi_scraper/models/components/xarticlemodel.rbi +170 -0
  247. data/lib/xapi_scraper/models/components/xarticleresponse.rb +47 -0
  248. data/lib/xapi_scraper/models/components/xarticleresponse.rbi +26 -0
  249. data/lib/xapi_scraper/models/components.rb +128 -0
  250. data/lib/xapi_scraper/models/errors/apierror.rb +39 -0
  251. data/lib/xapi_scraper/models/errors/apierror.rbi +27 -0
  252. data/lib/xapi_scraper/models/errors/httpvalidationerror.rb +48 -0
  253. data/lib/xapi_scraper/models/errors/httpvalidationerror.rbi +20 -0
  254. data/lib/xapi_scraper/models/errors.rb +13 -0
  255. data/lib/xapi_scraper/models/operations/accountgetbalance_response.rb +51 -0
  256. data/lib/xapi_scraper/models/operations/accountgetbalance_response.rbi +32 -0
  257. data/lib/xapi_scraper/models/operations/analysissentiment_response.rb +51 -0
  258. data/lib/xapi_scraper/models/operations/analysissentiment_response.rbi +32 -0
  259. data/lib/xapi_scraper/models/operations/articlesfetch_response.rb +51 -0
  260. data/lib/xapi_scraper/models/operations/articlesfetch_response.rbi +32 -0
  261. data/lib/xapi_scraper/models/operations/articlesmarkdown_request.rb +31 -0
  262. data/lib/xapi_scraper/models/operations/articlesmarkdown_request.rbi +14 -0
  263. data/lib/xapi_scraper/models/operations/articlesmarkdown_response.rb +51 -0
  264. data/lib/xapi_scraper/models/operations/articlesmarkdown_response.rbi +32 -0
  265. data/lib/xapi_scraper/models/operations/communitiesget_request.rb +34 -0
  266. data/lib/xapi_scraper/models/operations/communitiesget_request.rbi +14 -0
  267. data/lib/xapi_scraper/models/operations/communitiesget_response.rb +51 -0
  268. data/lib/xapi_scraper/models/operations/communitiesget_response.rbi +32 -0
  269. data/lib/xapi_scraper/models/operations/communitiesmembers_request.rb +42 -0
  270. data/lib/xapi_scraper/models/operations/communitiesmembers_request.rbi +20 -0
  271. data/lib/xapi_scraper/models/operations/communitiesmembers_response.rb +51 -0
  272. data/lib/xapi_scraper/models/operations/communitiesmembers_response.rbi +32 -0
  273. data/lib/xapi_scraper/models/operations/communitiesmemberspage_response.rb +54 -0
  274. data/lib/xapi_scraper/models/operations/communitiesmemberspage_response.rbi +32 -0
  275. data/lib/xapi_scraper/models/operations/communitiessearch_response.rb +51 -0
  276. data/lib/xapi_scraper/models/operations/communitiessearch_response.rbi +32 -0
  277. data/lib/xapi_scraper/models/operations/communitiessearchtweets_response.rb +51 -0
  278. data/lib/xapi_scraper/models/operations/communitiessearchtweets_response.rbi +32 -0
  279. data/lib/xapi_scraper/models/operations/communitiestweets_request.rb +50 -0
  280. data/lib/xapi_scraper/models/operations/communitiestweets_request.rbi +26 -0
  281. data/lib/xapi_scraper/models/operations/communitiestweets_response.rb +51 -0
  282. data/lib/xapi_scraper/models/operations/communitiestweets_response.rbi +32 -0
  283. data/lib/xapi_scraper/models/operations/communitiestweetspage_response.rb +54 -0
  284. data/lib/xapi_scraper/models/operations/communitiestweetspage_response.rbi +32 -0
  285. data/lib/xapi_scraper/models/operations/country.rb +79 -0
  286. data/lib/xapi_scraper/models/operations/country.rbi +9 -0
  287. data/lib/xapi_scraper/models/operations/dmconversations_response.rb +51 -0
  288. data/lib/xapi_scraper/models/operations/dmconversations_response.rbi +32 -0
  289. data/lib/xapi_scraper/models/operations/dmhistory_response.rb +51 -0
  290. data/lib/xapi_scraper/models/operations/dmhistory_response.rbi +32 -0
  291. data/lib/xapi_scraper/models/operations/dmmedia_response.rb +51 -0
  292. data/lib/xapi_scraper/models/operations/dmmedia_response.rbi +32 -0
  293. data/lib/xapi_scraper/models/operations/dmsend_response.rb +51 -0
  294. data/lib/xapi_scraper/models/operations/dmsend_response.rbi +32 -0
  295. data/lib/xapi_scraper/models/operations/dmstatus_response.rb +51 -0
  296. data/lib/xapi_scraper/models/operations/dmstatus_response.rbi +32 -0
  297. data/lib/xapi_scraper/models/operations/listsmembers_request.rb +38 -0
  298. data/lib/xapi_scraper/models/operations/listsmembers_request.rbi +20 -0
  299. data/lib/xapi_scraper/models/operations/listsmembers_response.rb +51 -0
  300. data/lib/xapi_scraper/models/operations/listsmembers_response.rbi +32 -0
  301. data/lib/xapi_scraper/models/operations/listsmemberspage_response.rb +54 -0
  302. data/lib/xapi_scraper/models/operations/listsmemberspage_response.rbi +32 -0
  303. data/lib/xapi_scraper/models/operations/listssearch_response.rb +51 -0
  304. data/lib/xapi_scraper/models/operations/listssearch_response.rbi +32 -0
  305. data/lib/xapi_scraper/models/operations/listssubscribers_request.rb +38 -0
  306. data/lib/xapi_scraper/models/operations/listssubscribers_request.rbi +20 -0
  307. data/lib/xapi_scraper/models/operations/listssubscribers_response.rb +51 -0
  308. data/lib/xapi_scraper/models/operations/listssubscribers_response.rbi +32 -0
  309. data/lib/xapi_scraper/models/operations/liststweets_request.rb +38 -0
  310. data/lib/xapi_scraper/models/operations/liststweets_request.rbi +20 -0
  311. data/lib/xapi_scraper/models/operations/liststweets_response.rb +51 -0
  312. data/lib/xapi_scraper/models/operations/liststweets_response.rbi +32 -0
  313. data/lib/xapi_scraper/models/operations/liststweetspage_response.rb +54 -0
  314. data/lib/xapi_scraper/models/operations/liststweetspage_response.rbi +32 -0
  315. data/lib/xapi_scraper/models/operations/searchadvanced_response.rb +54 -0
  316. data/lib/xapi_scraper/models/operations/searchadvanced_response.rbi +32 -0
  317. data/lib/xapi_scraper/models/operations/searchcashtags_response.rb +51 -0
  318. data/lib/xapi_scraper/models/operations/searchcashtags_response.rbi +32 -0
  319. data/lib/xapi_scraper/models/operations/searchhashtags_response.rb +51 -0
  320. data/lib/xapi_scraper/models/operations/searchhashtags_response.rbi +32 -0
  321. data/lib/xapi_scraper/models/operations/timelinestweetsandreplies_request.rb +35 -0
  322. data/lib/xapi_scraper/models/operations/timelinestweetsandreplies_request.rbi +20 -0
  323. data/lib/xapi_scraper/models/operations/timelinestweetsandreplies_response.rb +51 -0
  324. data/lib/xapi_scraper/models/operations/timelinestweetsandreplies_response.rbi +32 -0
  325. data/lib/xapi_scraper/models/operations/timelinestweetsandrepliespage_response.rb +54 -0
  326. data/lib/xapi_scraper/models/operations/timelinestweetsandrepliespage_response.rbi +32 -0
  327. data/lib/xapi_scraper/models/operations/timelinesuser_request.rb +35 -0
  328. data/lib/xapi_scraper/models/operations/timelinesuser_request.rbi +20 -0
  329. data/lib/xapi_scraper/models/operations/timelinesuser_response.rb +51 -0
  330. data/lib/xapi_scraper/models/operations/timelinesuser_response.rbi +32 -0
  331. data/lib/xapi_scraper/models/operations/timelinesuserpage_request.rb +35 -0
  332. data/lib/xapi_scraper/models/operations/timelinesuserpage_request.rbi +20 -0
  333. data/lib/xapi_scraper/models/operations/timelinesuserpage_response.rb +51 -0
  334. data/lib/xapi_scraper/models/operations/timelinesuserpage_response.rbi +32 -0
  335. data/lib/xapi_scraper/models/operations/trendingbycountry_request.rb +35 -0
  336. data/lib/xapi_scraper/models/operations/trendingbycountry_request.rbi +14 -0
  337. data/lib/xapi_scraper/models/operations/trendingbycountry_response.rb +51 -0
  338. data/lib/xapi_scraper/models/operations/trendingbycountry_response.rbi +32 -0
  339. data/lib/xapi_scraper/models/operations/trendingcontents_request.rb +35 -0
  340. data/lib/xapi_scraper/models/operations/trendingcontents_request.rbi +20 -0
  341. data/lib/xapi_scraper/models/operations/trendingcontents_response.rb +51 -0
  342. data/lib/xapi_scraper/models/operations/trendingcontents_response.rbi +32 -0
  343. data/lib/xapi_scraper/models/operations/trendingcountries_response.rb +51 -0
  344. data/lib/xapi_scraper/models/operations/trendingcountries_response.rbi +32 -0
  345. data/lib/xapi_scraper/models/operations/trendingtopics_response.rb +51 -0
  346. data/lib/xapi_scraper/models/operations/trendingtopics_response.rbi +32 -0
  347. data/lib/xapi_scraper/models/operations/trendingtweets_request.rb +63 -0
  348. data/lib/xapi_scraper/models/operations/trendingtweets_request.rbi +32 -0
  349. data/lib/xapi_scraper/models/operations/trendingtweets_response.rb +51 -0
  350. data/lib/xapi_scraper/models/operations/trendingtweets_response.rbi +32 -0
  351. data/lib/xapi_scraper/models/operations/tweet_type.rb +19 -0
  352. data/lib/xapi_scraper/models/operations/tweet_type.rbi +9 -0
  353. data/lib/xapi_scraper/models/operations/tweetsactionsbookmark_request.rb +35 -0
  354. data/lib/xapi_scraper/models/operations/tweetsactionsbookmark_request.rbi +20 -0
  355. data/lib/xapi_scraper/models/operations/tweetsactionsbookmark_response.rb +51 -0
  356. data/lib/xapi_scraper/models/operations/tweetsactionsbookmark_response.rbi +32 -0
  357. data/lib/xapi_scraper/models/operations/tweetsactionscreate_response.rb +51 -0
  358. data/lib/xapi_scraper/models/operations/tweetsactionscreate_response.rbi +32 -0
  359. data/lib/xapi_scraper/models/operations/tweetsactionscreatethread_response.rb +51 -0
  360. data/lib/xapi_scraper/models/operations/tweetsactionscreatethread_response.rbi +32 -0
  361. data/lib/xapi_scraper/models/operations/tweetsactionscreatewithoutcookie_response.rb +51 -0
  362. data/lib/xapi_scraper/models/operations/tweetsactionscreatewithoutcookie_response.rbi +32 -0
  363. data/lib/xapi_scraper/models/operations/tweetsactionsdeletebatch_response.rb +51 -0
  364. data/lib/xapi_scraper/models/operations/tweetsactionsdeletebatch_response.rbi +32 -0
  365. data/lib/xapi_scraper/models/operations/tweetsactionslike_request.rb +35 -0
  366. data/lib/xapi_scraper/models/operations/tweetsactionslike_request.rbi +20 -0
  367. data/lib/xapi_scraper/models/operations/tweetsactionslike_response.rb +51 -0
  368. data/lib/xapi_scraper/models/operations/tweetsactionslike_response.rbi +32 -0
  369. data/lib/xapi_scraper/models/operations/tweetsactionsquote_response.rb +51 -0
  370. data/lib/xapi_scraper/models/operations/tweetsactionsquote_response.rbi +32 -0
  371. data/lib/xapi_scraper/models/operations/tweetsactionsretweet_request.rb +35 -0
  372. data/lib/xapi_scraper/models/operations/tweetsactionsretweet_request.rbi +20 -0
  373. data/lib/xapi_scraper/models/operations/tweetsactionsretweet_response.rb +51 -0
  374. data/lib/xapi_scraper/models/operations/tweetsactionsretweet_response.rbi +32 -0
  375. data/lib/xapi_scraper/models/operations/tweetsactionsunbookmark_request.rb +35 -0
  376. data/lib/xapi_scraper/models/operations/tweetsactionsunbookmark_request.rbi +20 -0
  377. data/lib/xapi_scraper/models/operations/tweetsactionsunbookmark_response.rb +51 -0
  378. data/lib/xapi_scraper/models/operations/tweetsactionsunbookmark_response.rbi +32 -0
  379. data/lib/xapi_scraper/models/operations/tweetsactionsunlike_request.rb +35 -0
  380. data/lib/xapi_scraper/models/operations/tweetsactionsunlike_request.rbi +20 -0
  381. data/lib/xapi_scraper/models/operations/tweetsactionsunlike_response.rb +51 -0
  382. data/lib/xapi_scraper/models/operations/tweetsactionsunlike_response.rbi +32 -0
  383. data/lib/xapi_scraper/models/operations/tweetsactionsunretweet_request.rb +35 -0
  384. data/lib/xapi_scraper/models/operations/tweetsactionsunretweet_request.rbi +20 -0
  385. data/lib/xapi_scraper/models/operations/tweetsactionsunretweet_response.rb +51 -0
  386. data/lib/xapi_scraper/models/operations/tweetsactionsunretweet_response.rbi +32 -0
  387. data/lib/xapi_scraper/models/operations/tweetsdetail_response.rb +51 -0
  388. data/lib/xapi_scraper/models/operations/tweetsdetail_response.rbi +32 -0
  389. data/lib/xapi_scraper/models/operations/tweetsengagementquotes_response.rb +51 -0
  390. data/lib/xapi_scraper/models/operations/tweetsengagementquotes_response.rbi +32 -0
  391. data/lib/xapi_scraper/models/operations/tweetsengagementquotespage_response.rb +51 -0
  392. data/lib/xapi_scraper/models/operations/tweetsengagementquotespage_response.rbi +32 -0
  393. data/lib/xapi_scraper/models/operations/tweetsengagementretweeters_request.rb +39 -0
  394. data/lib/xapi_scraper/models/operations/tweetsengagementretweeters_request.rbi +20 -0
  395. data/lib/xapi_scraper/models/operations/tweetsengagementretweeters_response.rb +51 -0
  396. data/lib/xapi_scraper/models/operations/tweetsengagementretweeters_response.rbi +32 -0
  397. data/lib/xapi_scraper/models/operations/tweetsengagementretweeterspage_response.rb +51 -0
  398. data/lib/xapi_scraper/models/operations/tweetsengagementretweeterspage_response.rbi +32 -0
  399. data/lib/xapi_scraper/models/operations/tweetslookup_response.rb +51 -0
  400. data/lib/xapi_scraper/models/operations/tweetslookup_response.rbi +32 -0
  401. data/lib/xapi_scraper/models/operations/tweetsrepliespage_request.rb +35 -0
  402. data/lib/xapi_scraper/models/operations/tweetsrepliespage_request.rbi +20 -0
  403. data/lib/xapi_scraper/models/operations/tweetsrepliespage_response.rb +51 -0
  404. data/lib/xapi_scraper/models/operations/tweetsrepliespage_response.rbi +32 -0
  405. data/lib/xapi_scraper/models/operations/tweetssimilar_request.rb +30 -0
  406. data/lib/xapi_scraper/models/operations/tweetssimilar_request.rbi +14 -0
  407. data/lib/xapi_scraper/models/operations/tweetssimilar_response.rb +51 -0
  408. data/lib/xapi_scraper/models/operations/tweetssimilar_response.rbi +32 -0
  409. data/lib/xapi_scraper/models/operations/tweetsthread_response.rb +51 -0
  410. data/lib/xapi_scraper/models/operations/tweetsthread_response.rbi +32 -0
  411. data/lib/xapi_scraper/models/operations/usersfollow_response.rb +51 -0
  412. data/lib/xapi_scraper/models/operations/usersfollow_response.rbi +32 -0
  413. data/lib/xapi_scraper/models/operations/usersfollowerslist_response.rb +51 -0
  414. data/lib/xapi_scraper/models/operations/usersfollowerslist_response.rbi +32 -0
  415. data/lib/xapi_scraper/models/operations/usersfollowersverified_response.rb +51 -0
  416. data/lib/xapi_scraper/models/operations/usersfollowersverified_response.rbi +32 -0
  417. data/lib/xapi_scraper/models/operations/usersfollowinglist_response.rb +51 -0
  418. data/lib/xapi_scraper/models/operations/usersfollowinglist_response.rbi +32 -0
  419. data/lib/xapi_scraper/models/operations/usersgetabout_request.rb +31 -0
  420. data/lib/xapi_scraper/models/operations/usersgetabout_request.rbi +14 -0
  421. data/lib/xapi_scraper/models/operations/usersgetabout_response.rb +54 -0
  422. data/lib/xapi_scraper/models/operations/usersgetabout_response.rbi +32 -0
  423. data/lib/xapi_scraper/models/operations/usersgetaccountbased_response.rb +54 -0
  424. data/lib/xapi_scraper/models/operations/usersgetaccountbased_response.rbi +32 -0
  425. data/lib/xapi_scraper/models/operations/usersgetbyids_response.rb +51 -0
  426. data/lib/xapi_scraper/models/operations/usersgetbyids_response.rbi +32 -0
  427. data/lib/xapi_scraper/models/operations/usersgetbyusernames_response.rb +51 -0
  428. data/lib/xapi_scraper/models/operations/usersgetbyusernames_response.rbi +32 -0
  429. data/lib/xapi_scraper/models/operations/usersgetstatuses_response.rb +51 -0
  430. data/lib/xapi_scraper/models/operations/usersgetstatuses_response.rbi +32 -0
  431. data/lib/xapi_scraper/models/operations/userssearch_request.rb +39 -0
  432. data/lib/xapi_scraper/models/operations/userssearch_request.rbi +20 -0
  433. data/lib/xapi_scraper/models/operations/userssearch_response.rb +51 -0
  434. data/lib/xapi_scraper/models/operations/userssearch_response.rbi +32 -0
  435. data/lib/xapi_scraper/models/operations/usersunfollow_response.rb +51 -0
  436. data/lib/xapi_scraper/models/operations/usersunfollow_response.rbi +32 -0
  437. data/lib/xapi_scraper/models/operations/usersverifyaccount_response.rb +51 -0
  438. data/lib/xapi_scraper/models/operations/usersverifyaccount_response.rbi +32 -0
  439. data/lib/xapi_scraper/models/operations.rb +127 -0
  440. data/lib/xapi_scraper/replies.rb +235 -0
  441. data/lib/xapi_scraper/sdk_hooks/hooks.rb +99 -0
  442. data/lib/xapi_scraper/sdk_hooks/registration.rb +34 -0
  443. data/lib/xapi_scraper/sdk_hooks/types.rb +180 -0
  444. data/lib/xapi_scraper/sdkconfiguration.rb +107 -0
  445. data/lib/xapi_scraper/sdkconfiguration.rbi +83 -0
  446. data/lib/xapi_scraper/search.rb +610 -0
  447. data/lib/xapi_scraper/timelines.rb +805 -0
  448. data/lib/xapi_scraper/trending.rb +888 -0
  449. data/lib/xapi_scraper/tweets.rb +801 -0
  450. data/lib/xapi_scraper/users.rb +1748 -0
  451. data/lib/xapi_scraper/utils/forms.rb +232 -0
  452. data/lib/xapi_scraper/utils/headers.rb +82 -0
  453. data/lib/xapi_scraper/utils/query_params.rb +167 -0
  454. data/lib/xapi_scraper/utils/request_bodies.rb +79 -0
  455. data/lib/xapi_scraper/utils/retries.rb +139 -0
  456. data/lib/xapi_scraper/utils/security.rb +158 -0
  457. data/lib/xapi_scraper/utils/url.rb +124 -0
  458. data/lib/xapi_scraper/utils/utils.rb +241 -0
  459. metadata +720 -0
@@ -0,0 +1,2166 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require "faraday"
7
+ require "faraday/multipart"
8
+ require "faraday/retry"
9
+ require "sorbet-runtime"
10
+
11
+ require_relative "sdk_hooks/hooks"
12
+ require_relative "utils/retries"
13
+
14
+ module XapiScraper
15
+ extend T::Sig
16
+
17
+ class Actions
18
+ extend T::Sig
19
+
20
+ sig { params(sdk_config: SDKConfiguration).void }
21
+ def initialize(sdk_config)
22
+ @sdk_configuration = sdk_config
23
+ end
24
+
25
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, T.any(String, T::Enum)])).returns(String) }
26
+ def get_url(base_url:, url_variables: nil)
27
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
28
+
29
+ if base_url.nil?
30
+ base_url = sd_base_url
31
+ end
32
+
33
+ if url_variables.nil?
34
+ url_variables = sd_options
35
+ end
36
+
37
+ return Utils.template_url(base_url, url_variables)
38
+ end
39
+
40
+ sig {
41
+ params(
42
+ request: Models::Operations::TweetsActionsLikeRequest,
43
+ retries: T.nilable(Utils::RetryConfig),
44
+ timeout_ms: T.nilable(Integer),
45
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
46
+ )
47
+ .returns(Models::Operations::TweetsActionsLikeResponse)
48
+ }
49
+ def like(request:, retries: nil, timeout_ms: nil, http_headers: nil)
50
+ # like - Like a Tweet
51
+ # Likes a specific tweet on behalf of the user associated with the provided cookie,$0.001 per call.
52
+ url, params = @sdk_configuration.get_server_details
53
+ base_url = Utils.template_url(url, params)
54
+ url = Utils.generate_url(
55
+ Models::Operations::TweetsActionsLikeRequest,
56
+ base_url,
57
+ "/twitter/tweets/{tweet_id}/like",
58
+ request
59
+ )
60
+ headers = {}
61
+ headers = T.cast(headers, T::Hash[String, String])
62
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
63
+ headers["content-type"] = req_content_type
64
+ raise StandardError, "request body is required" if data.nil? && form.nil?
65
+
66
+ if form && !form.empty?
67
+ body = Utils.encode_form(form)
68
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
69
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
70
+ else
71
+ body = data
72
+ end
73
+
74
+ headers["Accept"] = "application/json"
75
+ headers["user-agent"] = @sdk_configuration.user_agent
76
+ retries ||= @sdk_configuration.retry_config
77
+ retries ||= Utils::RetryConfig.new(
78
+ backoff: Utils::BackoffStrategy.new(
79
+ exponent: 1.5,
80
+ initial_interval: 500,
81
+ max_elapsed_time: 3_600_000,
82
+ max_interval: 60_000
83
+ ),
84
+ retry_connection_errors: true,
85
+ strategy: "backoff"
86
+ )
87
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
88
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
89
+
90
+ security = @sdk_configuration.security_source&.call
91
+
92
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
93
+ timeout ||= @sdk_configuration.timeout
94
+
95
+ connection = @sdk_configuration.client.dup
96
+ connection.use(Utils::RetryMiddleware, retry_options)
97
+
98
+ hook_ctx = SDKHooks::HookContext.new(
99
+ config: @sdk_configuration,
100
+ base_url: base_url,
101
+ oauth2_scopes: nil,
102
+ operation_id: "tweetsActionsLike",
103
+ security_source: @sdk_configuration.security_source
104
+ )
105
+
106
+ error = T.let(nil, T.nilable(StandardError))
107
+ http_response = T.let(nil, T.nilable(Faraday::Response))
108
+
109
+ begin
110
+ http_response = T.must(connection).post(url) do |req|
111
+ req.body = body
112
+ req.headers.merge!(headers)
113
+ req.options.timeout = timeout unless timeout.nil?
114
+ Utils.configure_request_security(req, security)
115
+ http_headers&.each do |key, value|
116
+ req.headers[key.to_s] = value
117
+ end
118
+
119
+ @sdk_configuration.hooks.before_request(
120
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
121
+ hook_ctx: hook_ctx
122
+ ),
123
+ request: req
124
+ )
125
+ end
126
+
127
+ rescue StandardError => e
128
+ error = e
129
+ ensure
130
+ if http_response.nil? || Utils.error_status?(http_response.status)
131
+ http_response = @sdk_configuration.hooks.after_error(
132
+ error: error,
133
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
134
+ hook_ctx: hook_ctx
135
+ ),
136
+ response: http_response
137
+ )
138
+ else
139
+ http_response = @sdk_configuration.hooks.after_success(
140
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
141
+ hook_ctx: hook_ctx
142
+ ),
143
+ response: http_response
144
+ )
145
+ end
146
+
147
+ if http_response.nil?
148
+ raise error if !error.nil?
149
+ raise "no response"
150
+ end
151
+ end
152
+
153
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
154
+ if Utils.match_status_code(http_response.status, ["200"])
155
+ if Utils.match_content_type(content_type, "application/json")
156
+ http_response = @sdk_configuration.hooks.after_success(
157
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
158
+ hook_ctx: hook_ctx
159
+ ),
160
+ response: http_response
161
+ )
162
+ response_data = http_response.env.response_body
163
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
164
+ response = Models::Operations::TweetsActionsLikeResponse.new(
165
+ status_code: http_response.status,
166
+ content_type: content_type,
167
+ raw_response: http_response,
168
+ tweet_action_response: T.unsafe(obj)
169
+ )
170
+
171
+ return response
172
+ else
173
+ raise(
174
+ ::XapiScraper::Models::Errors::APIError.new(
175
+ status_code: http_response.status,
176
+ body: http_response.env.response_body,
177
+ raw_response: http_response
178
+ ),
179
+ "Unknown content type received"
180
+ )
181
+ end
182
+ elsif Utils.match_status_code(http_response.status, ["422"])
183
+ if Utils.match_content_type(content_type, "application/json")
184
+ http_response = @sdk_configuration.hooks.after_success(
185
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
186
+ hook_ctx: hook_ctx
187
+ ),
188
+ response: http_response
189
+ )
190
+ response_data = http_response.env.response_body
191
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
192
+ obj.raw_response = http_response
193
+ raise obj
194
+ else
195
+ raise(
196
+ ::XapiScraper::Models::Errors::APIError.new(
197
+ status_code: http_response.status,
198
+ body: http_response.env.response_body,
199
+ raw_response: http_response
200
+ ),
201
+ "Unknown content type received"
202
+ )
203
+ end
204
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
205
+ raise(
206
+ ::XapiScraper::Models::Errors::APIError.new(
207
+ status_code: http_response.status,
208
+ body: http_response.env.response_body,
209
+ raw_response: http_response
210
+ ),
211
+ "API error occurred"
212
+ )
213
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
214
+ raise(
215
+ ::XapiScraper::Models::Errors::APIError.new(
216
+ status_code: http_response.status,
217
+ body: http_response.env.response_body,
218
+ raw_response: http_response
219
+ ),
220
+ "API error occurred"
221
+ )
222
+ else
223
+ raise(
224
+ ::XapiScraper::Models::Errors::APIError.new(
225
+ status_code: http_response.status,
226
+ body: http_response.env.response_body,
227
+ raw_response: http_response
228
+ ),
229
+ "Unknown status code received"
230
+ )
231
+
232
+ end
233
+ end
234
+
235
+ sig {
236
+ params(
237
+ request: Models::Operations::TweetsActionsUnlikeRequest,
238
+ retries: T.nilable(Utils::RetryConfig),
239
+ timeout_ms: T.nilable(Integer),
240
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
241
+ )
242
+ .returns(Models::Operations::TweetsActionsUnlikeResponse)
243
+ }
244
+ def unlike(request:, retries: nil, timeout_ms: nil, http_headers: nil)
245
+ # unlike - Unlike a Tweet
246
+ # Unlike a tweet, $0.001 per call.
247
+ url, params = @sdk_configuration.get_server_details
248
+ base_url = Utils.template_url(url, params)
249
+ url = Utils.generate_url(
250
+ Models::Operations::TweetsActionsUnlikeRequest,
251
+ base_url,
252
+ "/twitter/tweets/{tweet_id}/like",
253
+ request
254
+ )
255
+ headers = {}
256
+ headers = T.cast(headers, T::Hash[String, String])
257
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
258
+ headers["content-type"] = req_content_type
259
+ raise StandardError, "request body is required" if data.nil? && form.nil?
260
+
261
+ if form && !form.empty?
262
+ body = Utils.encode_form(form)
263
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
264
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
265
+ else
266
+ body = data
267
+ end
268
+
269
+ headers["Accept"] = "application/json"
270
+ headers["user-agent"] = @sdk_configuration.user_agent
271
+ retries ||= @sdk_configuration.retry_config
272
+ retries ||= Utils::RetryConfig.new(
273
+ backoff: Utils::BackoffStrategy.new(
274
+ exponent: 1.5,
275
+ initial_interval: 500,
276
+ max_elapsed_time: 3_600_000,
277
+ max_interval: 60_000
278
+ ),
279
+ retry_connection_errors: true,
280
+ strategy: "backoff"
281
+ )
282
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
283
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
284
+
285
+ security = @sdk_configuration.security_source&.call
286
+
287
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
288
+ timeout ||= @sdk_configuration.timeout
289
+
290
+ connection = @sdk_configuration.client.dup
291
+ connection.use(Utils::RetryMiddleware, retry_options)
292
+
293
+ hook_ctx = SDKHooks::HookContext.new(
294
+ config: @sdk_configuration,
295
+ base_url: base_url,
296
+ oauth2_scopes: nil,
297
+ operation_id: "tweetsActionsUnlike",
298
+ security_source: @sdk_configuration.security_source
299
+ )
300
+
301
+ error = T.let(nil, T.nilable(StandardError))
302
+ http_response = T.let(nil, T.nilable(Faraday::Response))
303
+
304
+ begin
305
+ http_response = T.must(connection).delete(url) do |req|
306
+ req.body = body
307
+ req.headers.merge!(headers)
308
+ req.options.timeout = timeout unless timeout.nil?
309
+ Utils.configure_request_security(req, security)
310
+ http_headers&.each do |key, value|
311
+ req.headers[key.to_s] = value
312
+ end
313
+
314
+ @sdk_configuration.hooks.before_request(
315
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
316
+ hook_ctx: hook_ctx
317
+ ),
318
+ request: req
319
+ )
320
+ end
321
+
322
+ rescue StandardError => e
323
+ error = e
324
+ ensure
325
+ if http_response.nil? || Utils.error_status?(http_response.status)
326
+ http_response = @sdk_configuration.hooks.after_error(
327
+ error: error,
328
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
329
+ hook_ctx: hook_ctx
330
+ ),
331
+ response: http_response
332
+ )
333
+ else
334
+ http_response = @sdk_configuration.hooks.after_success(
335
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
336
+ hook_ctx: hook_ctx
337
+ ),
338
+ response: http_response
339
+ )
340
+ end
341
+
342
+ if http_response.nil?
343
+ raise error if !error.nil?
344
+ raise "no response"
345
+ end
346
+ end
347
+
348
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
349
+ if Utils.match_status_code(http_response.status, ["200"])
350
+ if Utils.match_content_type(content_type, "application/json")
351
+ http_response = @sdk_configuration.hooks.after_success(
352
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
353
+ hook_ctx: hook_ctx
354
+ ),
355
+ response: http_response
356
+ )
357
+ response_data = http_response.env.response_body
358
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
359
+ response = Models::Operations::TweetsActionsUnlikeResponse.new(
360
+ status_code: http_response.status,
361
+ content_type: content_type,
362
+ raw_response: http_response,
363
+ tweet_action_response: T.unsafe(obj)
364
+ )
365
+
366
+ return response
367
+ else
368
+ raise(
369
+ ::XapiScraper::Models::Errors::APIError.new(
370
+ status_code: http_response.status,
371
+ body: http_response.env.response_body,
372
+ raw_response: http_response
373
+ ),
374
+ "Unknown content type received"
375
+ )
376
+ end
377
+ elsif Utils.match_status_code(http_response.status, ["422"])
378
+ if Utils.match_content_type(content_type, "application/json")
379
+ http_response = @sdk_configuration.hooks.after_success(
380
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
381
+ hook_ctx: hook_ctx
382
+ ),
383
+ response: http_response
384
+ )
385
+ response_data = http_response.env.response_body
386
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
387
+ obj.raw_response = http_response
388
+ raise obj
389
+ else
390
+ raise(
391
+ ::XapiScraper::Models::Errors::APIError.new(
392
+ status_code: http_response.status,
393
+ body: http_response.env.response_body,
394
+ raw_response: http_response
395
+ ),
396
+ "Unknown content type received"
397
+ )
398
+ end
399
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
400
+ raise(
401
+ ::XapiScraper::Models::Errors::APIError.new(
402
+ status_code: http_response.status,
403
+ body: http_response.env.response_body,
404
+ raw_response: http_response
405
+ ),
406
+ "API error occurred"
407
+ )
408
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
409
+ raise(
410
+ ::XapiScraper::Models::Errors::APIError.new(
411
+ status_code: http_response.status,
412
+ body: http_response.env.response_body,
413
+ raw_response: http_response
414
+ ),
415
+ "API error occurred"
416
+ )
417
+ else
418
+ raise(
419
+ ::XapiScraper::Models::Errors::APIError.new(
420
+ status_code: http_response.status,
421
+ body: http_response.env.response_body,
422
+ raw_response: http_response
423
+ ),
424
+ "Unknown status code received"
425
+ )
426
+
427
+ end
428
+ end
429
+
430
+ sig {
431
+ params(
432
+ request: Models::Operations::TweetsActionsRetweetRequest,
433
+ retries: T.nilable(Utils::RetryConfig),
434
+ timeout_ms: T.nilable(Integer),
435
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
436
+ )
437
+ .returns(Models::Operations::TweetsActionsRetweetResponse)
438
+ }
439
+ def retweet(request:, retries: nil, timeout_ms: nil, http_headers: nil)
440
+ # retweet - Retweet a Tweet
441
+ # Retweets a specific tweet on behalf of the user associated with the provided cookie,$0.001 per call.
442
+ url, params = @sdk_configuration.get_server_details
443
+ base_url = Utils.template_url(url, params)
444
+ url = Utils.generate_url(
445
+ Models::Operations::TweetsActionsRetweetRequest,
446
+ base_url,
447
+ "/twitter/tweets/{tweet_id}/retweet",
448
+ request
449
+ )
450
+ headers = {}
451
+ headers = T.cast(headers, T::Hash[String, String])
452
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
453
+ headers["content-type"] = req_content_type
454
+ raise StandardError, "request body is required" if data.nil? && form.nil?
455
+
456
+ if form && !form.empty?
457
+ body = Utils.encode_form(form)
458
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
459
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
460
+ else
461
+ body = data
462
+ end
463
+
464
+ headers["Accept"] = "application/json"
465
+ headers["user-agent"] = @sdk_configuration.user_agent
466
+ retries ||= @sdk_configuration.retry_config
467
+ retries ||= Utils::RetryConfig.new(
468
+ backoff: Utils::BackoffStrategy.new(
469
+ exponent: 1.5,
470
+ initial_interval: 500,
471
+ max_elapsed_time: 3_600_000,
472
+ max_interval: 60_000
473
+ ),
474
+ retry_connection_errors: true,
475
+ strategy: "backoff"
476
+ )
477
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
478
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
479
+
480
+ security = @sdk_configuration.security_source&.call
481
+
482
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
483
+ timeout ||= @sdk_configuration.timeout
484
+
485
+ connection = @sdk_configuration.client.dup
486
+ connection.use(Utils::RetryMiddleware, retry_options)
487
+
488
+ hook_ctx = SDKHooks::HookContext.new(
489
+ config: @sdk_configuration,
490
+ base_url: base_url,
491
+ oauth2_scopes: nil,
492
+ operation_id: "tweetsActionsRetweet",
493
+ security_source: @sdk_configuration.security_source
494
+ )
495
+
496
+ error = T.let(nil, T.nilable(StandardError))
497
+ http_response = T.let(nil, T.nilable(Faraday::Response))
498
+
499
+ begin
500
+ http_response = T.must(connection).post(url) do |req|
501
+ req.body = body
502
+ req.headers.merge!(headers)
503
+ req.options.timeout = timeout unless timeout.nil?
504
+ Utils.configure_request_security(req, security)
505
+ http_headers&.each do |key, value|
506
+ req.headers[key.to_s] = value
507
+ end
508
+
509
+ @sdk_configuration.hooks.before_request(
510
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
511
+ hook_ctx: hook_ctx
512
+ ),
513
+ request: req
514
+ )
515
+ end
516
+
517
+ rescue StandardError => e
518
+ error = e
519
+ ensure
520
+ if http_response.nil? || Utils.error_status?(http_response.status)
521
+ http_response = @sdk_configuration.hooks.after_error(
522
+ error: error,
523
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
524
+ hook_ctx: hook_ctx
525
+ ),
526
+ response: http_response
527
+ )
528
+ else
529
+ http_response = @sdk_configuration.hooks.after_success(
530
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
531
+ hook_ctx: hook_ctx
532
+ ),
533
+ response: http_response
534
+ )
535
+ end
536
+
537
+ if http_response.nil?
538
+ raise error if !error.nil?
539
+ raise "no response"
540
+ end
541
+ end
542
+
543
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
544
+ if Utils.match_status_code(http_response.status, ["200"])
545
+ if Utils.match_content_type(content_type, "application/json")
546
+ http_response = @sdk_configuration.hooks.after_success(
547
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
548
+ hook_ctx: hook_ctx
549
+ ),
550
+ response: http_response
551
+ )
552
+ response_data = http_response.env.response_body
553
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
554
+ response = Models::Operations::TweetsActionsRetweetResponse.new(
555
+ status_code: http_response.status,
556
+ content_type: content_type,
557
+ raw_response: http_response,
558
+ tweet_action_response: T.unsafe(obj)
559
+ )
560
+
561
+ return response
562
+ else
563
+ raise(
564
+ ::XapiScraper::Models::Errors::APIError.new(
565
+ status_code: http_response.status,
566
+ body: http_response.env.response_body,
567
+ raw_response: http_response
568
+ ),
569
+ "Unknown content type received"
570
+ )
571
+ end
572
+ elsif Utils.match_status_code(http_response.status, ["422"])
573
+ if Utils.match_content_type(content_type, "application/json")
574
+ http_response = @sdk_configuration.hooks.after_success(
575
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
576
+ hook_ctx: hook_ctx
577
+ ),
578
+ response: http_response
579
+ )
580
+ response_data = http_response.env.response_body
581
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
582
+ obj.raw_response = http_response
583
+ raise obj
584
+ else
585
+ raise(
586
+ ::XapiScraper::Models::Errors::APIError.new(
587
+ status_code: http_response.status,
588
+ body: http_response.env.response_body,
589
+ raw_response: http_response
590
+ ),
591
+ "Unknown content type received"
592
+ )
593
+ end
594
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
595
+ raise(
596
+ ::XapiScraper::Models::Errors::APIError.new(
597
+ status_code: http_response.status,
598
+ body: http_response.env.response_body,
599
+ raw_response: http_response
600
+ ),
601
+ "API error occurred"
602
+ )
603
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
604
+ raise(
605
+ ::XapiScraper::Models::Errors::APIError.new(
606
+ status_code: http_response.status,
607
+ body: http_response.env.response_body,
608
+ raw_response: http_response
609
+ ),
610
+ "API error occurred"
611
+ )
612
+ else
613
+ raise(
614
+ ::XapiScraper::Models::Errors::APIError.new(
615
+ status_code: http_response.status,
616
+ body: http_response.env.response_body,
617
+ raw_response: http_response
618
+ ),
619
+ "Unknown status code received"
620
+ )
621
+
622
+ end
623
+ end
624
+
625
+ sig {
626
+ params(
627
+ request: Models::Operations::TweetsActionsUnretweetRequest,
628
+ retries: T.nilable(Utils::RetryConfig),
629
+ timeout_ms: T.nilable(Integer),
630
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
631
+ )
632
+ .returns(Models::Operations::TweetsActionsUnretweetResponse)
633
+ }
634
+ def unretweet(request:, retries: nil, timeout_ms: nil, http_headers: nil)
635
+ # unretweet - Delete Retweet
636
+ # Delete a retweet, $0.001 per call.
637
+ url, params = @sdk_configuration.get_server_details
638
+ base_url = Utils.template_url(url, params)
639
+ url = Utils.generate_url(
640
+ Models::Operations::TweetsActionsUnretweetRequest,
641
+ base_url,
642
+ "/twitter/tweets/{tweet_id}/retweet",
643
+ request
644
+ )
645
+ headers = {}
646
+ headers = T.cast(headers, T::Hash[String, String])
647
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
648
+ headers["content-type"] = req_content_type
649
+ raise StandardError, "request body is required" if data.nil? && form.nil?
650
+
651
+ if form && !form.empty?
652
+ body = Utils.encode_form(form)
653
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
654
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
655
+ else
656
+ body = data
657
+ end
658
+
659
+ headers["Accept"] = "application/json"
660
+ headers["user-agent"] = @sdk_configuration.user_agent
661
+ retries ||= @sdk_configuration.retry_config
662
+ retries ||= Utils::RetryConfig.new(
663
+ backoff: Utils::BackoffStrategy.new(
664
+ exponent: 1.5,
665
+ initial_interval: 500,
666
+ max_elapsed_time: 3_600_000,
667
+ max_interval: 60_000
668
+ ),
669
+ retry_connection_errors: true,
670
+ strategy: "backoff"
671
+ )
672
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
673
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
674
+
675
+ security = @sdk_configuration.security_source&.call
676
+
677
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
678
+ timeout ||= @sdk_configuration.timeout
679
+
680
+ connection = @sdk_configuration.client.dup
681
+ connection.use(Utils::RetryMiddleware, retry_options)
682
+
683
+ hook_ctx = SDKHooks::HookContext.new(
684
+ config: @sdk_configuration,
685
+ base_url: base_url,
686
+ oauth2_scopes: nil,
687
+ operation_id: "tweetsActionsUnretweet",
688
+ security_source: @sdk_configuration.security_source
689
+ )
690
+
691
+ error = T.let(nil, T.nilable(StandardError))
692
+ http_response = T.let(nil, T.nilable(Faraday::Response))
693
+
694
+ begin
695
+ http_response = T.must(connection).delete(url) do |req|
696
+ req.body = body
697
+ req.headers.merge!(headers)
698
+ req.options.timeout = timeout unless timeout.nil?
699
+ Utils.configure_request_security(req, security)
700
+ http_headers&.each do |key, value|
701
+ req.headers[key.to_s] = value
702
+ end
703
+
704
+ @sdk_configuration.hooks.before_request(
705
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
706
+ hook_ctx: hook_ctx
707
+ ),
708
+ request: req
709
+ )
710
+ end
711
+
712
+ rescue StandardError => e
713
+ error = e
714
+ ensure
715
+ if http_response.nil? || Utils.error_status?(http_response.status)
716
+ http_response = @sdk_configuration.hooks.after_error(
717
+ error: error,
718
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
719
+ hook_ctx: hook_ctx
720
+ ),
721
+ response: http_response
722
+ )
723
+ else
724
+ http_response = @sdk_configuration.hooks.after_success(
725
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
726
+ hook_ctx: hook_ctx
727
+ ),
728
+ response: http_response
729
+ )
730
+ end
731
+
732
+ if http_response.nil?
733
+ raise error if !error.nil?
734
+ raise "no response"
735
+ end
736
+ end
737
+
738
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
739
+ if Utils.match_status_code(http_response.status, ["200"])
740
+ if Utils.match_content_type(content_type, "application/json")
741
+ http_response = @sdk_configuration.hooks.after_success(
742
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
743
+ hook_ctx: hook_ctx
744
+ ),
745
+ response: http_response
746
+ )
747
+ response_data = http_response.env.response_body
748
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
749
+ response = Models::Operations::TweetsActionsUnretweetResponse.new(
750
+ status_code: http_response.status,
751
+ content_type: content_type,
752
+ raw_response: http_response,
753
+ tweet_action_response: T.unsafe(obj)
754
+ )
755
+
756
+ return response
757
+ else
758
+ raise(
759
+ ::XapiScraper::Models::Errors::APIError.new(
760
+ status_code: http_response.status,
761
+ body: http_response.env.response_body,
762
+ raw_response: http_response
763
+ ),
764
+ "Unknown content type received"
765
+ )
766
+ end
767
+ elsif Utils.match_status_code(http_response.status, ["422"])
768
+ if Utils.match_content_type(content_type, "application/json")
769
+ http_response = @sdk_configuration.hooks.after_success(
770
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
771
+ hook_ctx: hook_ctx
772
+ ),
773
+ response: http_response
774
+ )
775
+ response_data = http_response.env.response_body
776
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
777
+ obj.raw_response = http_response
778
+ raise obj
779
+ else
780
+ raise(
781
+ ::XapiScraper::Models::Errors::APIError.new(
782
+ status_code: http_response.status,
783
+ body: http_response.env.response_body,
784
+ raw_response: http_response
785
+ ),
786
+ "Unknown content type received"
787
+ )
788
+ end
789
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
790
+ raise(
791
+ ::XapiScraper::Models::Errors::APIError.new(
792
+ status_code: http_response.status,
793
+ body: http_response.env.response_body,
794
+ raw_response: http_response
795
+ ),
796
+ "API error occurred"
797
+ )
798
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
799
+ raise(
800
+ ::XapiScraper::Models::Errors::APIError.new(
801
+ status_code: http_response.status,
802
+ body: http_response.env.response_body,
803
+ raw_response: http_response
804
+ ),
805
+ "API error occurred"
806
+ )
807
+ else
808
+ raise(
809
+ ::XapiScraper::Models::Errors::APIError.new(
810
+ status_code: http_response.status,
811
+ body: http_response.env.response_body,
812
+ raw_response: http_response
813
+ ),
814
+ "Unknown status code received"
815
+ )
816
+
817
+ end
818
+ end
819
+
820
+ sig {
821
+ params(
822
+ request: Models::Components::CreateThreadQuery,
823
+ retries: T.nilable(Utils::RetryConfig),
824
+ timeout_ms: T.nilable(Integer),
825
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
826
+ )
827
+ .returns(Models::Operations::TweetsActionsCreateThreadResponse)
828
+ }
829
+ def create_thread(request:, retries: nil, timeout_ms: nil, http_headers: nil)
830
+ # create_thread - Create a Tweet Thread
831
+ # Create a tweet thread from an ordered list of texts, $0.001 per call.
832
+ url, params = @sdk_configuration.get_server_details
833
+ base_url = Utils.template_url(url, params)
834
+ url = "#{base_url}/v3/twitter/tweets/create-thread"
835
+ headers = {}
836
+ headers = T.cast(headers, T::Hash[String, String])
837
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
838
+ headers["content-type"] = req_content_type
839
+ raise StandardError, "request body is required" if data.nil? && form.nil?
840
+
841
+ if form && !form.empty?
842
+ body = Utils.encode_form(form)
843
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
844
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
845
+ else
846
+ body = data
847
+ end
848
+
849
+ headers["Accept"] = "application/json"
850
+ headers["user-agent"] = @sdk_configuration.user_agent
851
+ retries ||= @sdk_configuration.retry_config
852
+ retries ||= Utils::RetryConfig.new(
853
+ backoff: Utils::BackoffStrategy.new(
854
+ exponent: 1.5,
855
+ initial_interval: 500,
856
+ max_elapsed_time: 3_600_000,
857
+ max_interval: 60_000
858
+ ),
859
+ retry_connection_errors: true,
860
+ strategy: "backoff"
861
+ )
862
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
863
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
864
+
865
+ security = @sdk_configuration.security_source&.call
866
+
867
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
868
+ timeout ||= @sdk_configuration.timeout
869
+
870
+ connection = @sdk_configuration.client.dup
871
+ connection.use(Utils::RetryMiddleware, retry_options)
872
+
873
+ hook_ctx = SDKHooks::HookContext.new(
874
+ config: @sdk_configuration,
875
+ base_url: base_url,
876
+ oauth2_scopes: nil,
877
+ operation_id: "tweetsActionsCreateThread",
878
+ security_source: @sdk_configuration.security_source
879
+ )
880
+
881
+ error = T.let(nil, T.nilable(StandardError))
882
+ http_response = T.let(nil, T.nilable(Faraday::Response))
883
+
884
+ begin
885
+ http_response = T.must(connection).post(url) do |req|
886
+ req.body = body
887
+ req.headers.merge!(headers)
888
+ req.options.timeout = timeout unless timeout.nil?
889
+ Utils.configure_request_security(req, security)
890
+ http_headers&.each do |key, value|
891
+ req.headers[key.to_s] = value
892
+ end
893
+
894
+ @sdk_configuration.hooks.before_request(
895
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
896
+ hook_ctx: hook_ctx
897
+ ),
898
+ request: req
899
+ )
900
+ end
901
+
902
+ rescue StandardError => e
903
+ error = e
904
+ ensure
905
+ if http_response.nil? || Utils.error_status?(http_response.status)
906
+ http_response = @sdk_configuration.hooks.after_error(
907
+ error: error,
908
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
909
+ hook_ctx: hook_ctx
910
+ ),
911
+ response: http_response
912
+ )
913
+ else
914
+ http_response = @sdk_configuration.hooks.after_success(
915
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
916
+ hook_ctx: hook_ctx
917
+ ),
918
+ response: http_response
919
+ )
920
+ end
921
+
922
+ if http_response.nil?
923
+ raise error if !error.nil?
924
+ raise "no response"
925
+ end
926
+ end
927
+
928
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
929
+ if Utils.match_status_code(http_response.status, ["200"])
930
+ if Utils.match_content_type(content_type, "application/json")
931
+ http_response = @sdk_configuration.hooks.after_success(
932
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
933
+ hook_ctx: hook_ctx
934
+ ),
935
+ response: http_response
936
+ )
937
+ response_data = http_response.env.response_body
938
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::CreateThreadResponse)
939
+ response = Models::Operations::TweetsActionsCreateThreadResponse.new(
940
+ status_code: http_response.status,
941
+ content_type: content_type,
942
+ raw_response: http_response,
943
+ create_thread_response: T.unsafe(obj)
944
+ )
945
+
946
+ return response
947
+ else
948
+ raise(
949
+ ::XapiScraper::Models::Errors::APIError.new(
950
+ status_code: http_response.status,
951
+ body: http_response.env.response_body,
952
+ raw_response: http_response
953
+ ),
954
+ "Unknown content type received"
955
+ )
956
+ end
957
+ elsif Utils.match_status_code(http_response.status, ["422"])
958
+ if Utils.match_content_type(content_type, "application/json")
959
+ http_response = @sdk_configuration.hooks.after_success(
960
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
961
+ hook_ctx: hook_ctx
962
+ ),
963
+ response: http_response
964
+ )
965
+ response_data = http_response.env.response_body
966
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
967
+ obj.raw_response = http_response
968
+ raise obj
969
+ else
970
+ raise(
971
+ ::XapiScraper::Models::Errors::APIError.new(
972
+ status_code: http_response.status,
973
+ body: http_response.env.response_body,
974
+ raw_response: http_response
975
+ ),
976
+ "Unknown content type received"
977
+ )
978
+ end
979
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
980
+ raise(
981
+ ::XapiScraper::Models::Errors::APIError.new(
982
+ status_code: http_response.status,
983
+ body: http_response.env.response_body,
984
+ raw_response: http_response
985
+ ),
986
+ "API error occurred"
987
+ )
988
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
989
+ raise(
990
+ ::XapiScraper::Models::Errors::APIError.new(
991
+ status_code: http_response.status,
992
+ body: http_response.env.response_body,
993
+ raw_response: http_response
994
+ ),
995
+ "API error occurred"
996
+ )
997
+ else
998
+ raise(
999
+ ::XapiScraper::Models::Errors::APIError.new(
1000
+ status_code: http_response.status,
1001
+ body: http_response.env.response_body,
1002
+ raw_response: http_response
1003
+ ),
1004
+ "Unknown status code received"
1005
+ )
1006
+
1007
+ end
1008
+ end
1009
+
1010
+ sig {
1011
+ params(
1012
+ request: Models::Components::PostTweetQuery,
1013
+ retries: T.nilable(Utils::RetryConfig),
1014
+ timeout_ms: T.nilable(Integer),
1015
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1016
+ )
1017
+ .returns(Models::Operations::TweetsActionsCreateResponse)
1018
+ }
1019
+ def create(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1020
+ # create - Create a Tweet or Reply
1021
+ # Posts a new tweet. To create a reply, provide the `reply_tweet_id`. This endpoint does not handle quote tweets,$0.001 per call.
1022
+ url, params = @sdk_configuration.get_server_details
1023
+ base_url = Utils.template_url(url, params)
1024
+ url = "#{base_url}/twitter/tweets/create"
1025
+ headers = {}
1026
+ headers = T.cast(headers, T::Hash[String, String])
1027
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
1028
+ headers["content-type"] = req_content_type
1029
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1030
+
1031
+ if form && !form.empty?
1032
+ body = Utils.encode_form(form)
1033
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1034
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1035
+ else
1036
+ body = data
1037
+ end
1038
+
1039
+ headers["Accept"] = "application/json"
1040
+ headers["user-agent"] = @sdk_configuration.user_agent
1041
+ retries ||= @sdk_configuration.retry_config
1042
+ retries ||= Utils::RetryConfig.new(
1043
+ backoff: Utils::BackoffStrategy.new(
1044
+ exponent: 1.5,
1045
+ initial_interval: 500,
1046
+ max_elapsed_time: 3_600_000,
1047
+ max_interval: 60_000
1048
+ ),
1049
+ retry_connection_errors: true,
1050
+ strategy: "backoff"
1051
+ )
1052
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
1053
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
1054
+
1055
+ security = @sdk_configuration.security_source&.call
1056
+
1057
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1058
+ timeout ||= @sdk_configuration.timeout
1059
+
1060
+ connection = @sdk_configuration.client.dup
1061
+ connection.use(Utils::RetryMiddleware, retry_options)
1062
+
1063
+ hook_ctx = SDKHooks::HookContext.new(
1064
+ config: @sdk_configuration,
1065
+ base_url: base_url,
1066
+ oauth2_scopes: nil,
1067
+ operation_id: "tweetsActionsCreate",
1068
+ security_source: @sdk_configuration.security_source
1069
+ )
1070
+
1071
+ error = T.let(nil, T.nilable(StandardError))
1072
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1073
+
1074
+ begin
1075
+ http_response = T.must(connection).post(url) do |req|
1076
+ req.body = body
1077
+ req.headers.merge!(headers)
1078
+ req.options.timeout = timeout unless timeout.nil?
1079
+ Utils.configure_request_security(req, security)
1080
+ http_headers&.each do |key, value|
1081
+ req.headers[key.to_s] = value
1082
+ end
1083
+
1084
+ @sdk_configuration.hooks.before_request(
1085
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1086
+ hook_ctx: hook_ctx
1087
+ ),
1088
+ request: req
1089
+ )
1090
+ end
1091
+
1092
+ rescue StandardError => e
1093
+ error = e
1094
+ ensure
1095
+ if http_response.nil? || Utils.error_status?(http_response.status)
1096
+ http_response = @sdk_configuration.hooks.after_error(
1097
+ error: error,
1098
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1099
+ hook_ctx: hook_ctx
1100
+ ),
1101
+ response: http_response
1102
+ )
1103
+ else
1104
+ http_response = @sdk_configuration.hooks.after_success(
1105
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1106
+ hook_ctx: hook_ctx
1107
+ ),
1108
+ response: http_response
1109
+ )
1110
+ end
1111
+
1112
+ if http_response.nil?
1113
+ raise error if !error.nil?
1114
+ raise "no response"
1115
+ end
1116
+ end
1117
+
1118
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1119
+ if Utils.match_status_code(http_response.status, ["200"])
1120
+ if Utils.match_content_type(content_type, "application/json")
1121
+ http_response = @sdk_configuration.hooks.after_success(
1122
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1123
+ hook_ctx: hook_ctx
1124
+ ),
1125
+ response: http_response
1126
+ )
1127
+ response_data = http_response.env.response_body
1128
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::PostTweetResponse)
1129
+ response = Models::Operations::TweetsActionsCreateResponse.new(
1130
+ status_code: http_response.status,
1131
+ content_type: content_type,
1132
+ raw_response: http_response,
1133
+ post_tweet_response: T.unsafe(obj)
1134
+ )
1135
+
1136
+ return response
1137
+ else
1138
+ raise(
1139
+ ::XapiScraper::Models::Errors::APIError.new(
1140
+ status_code: http_response.status,
1141
+ body: http_response.env.response_body,
1142
+ raw_response: http_response
1143
+ ),
1144
+ "Unknown content type received"
1145
+ )
1146
+ end
1147
+ elsif Utils.match_status_code(http_response.status, ["422"])
1148
+ if Utils.match_content_type(content_type, "application/json")
1149
+ http_response = @sdk_configuration.hooks.after_success(
1150
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1151
+ hook_ctx: hook_ctx
1152
+ ),
1153
+ response: http_response
1154
+ )
1155
+ response_data = http_response.env.response_body
1156
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
1157
+ obj.raw_response = http_response
1158
+ raise obj
1159
+ else
1160
+ raise(
1161
+ ::XapiScraper::Models::Errors::APIError.new(
1162
+ status_code: http_response.status,
1163
+ body: http_response.env.response_body,
1164
+ raw_response: http_response
1165
+ ),
1166
+ "Unknown content type received"
1167
+ )
1168
+ end
1169
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1170
+ raise(
1171
+ ::XapiScraper::Models::Errors::APIError.new(
1172
+ status_code: http_response.status,
1173
+ body: http_response.env.response_body,
1174
+ raw_response: http_response
1175
+ ),
1176
+ "API error occurred"
1177
+ )
1178
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1179
+ raise(
1180
+ ::XapiScraper::Models::Errors::APIError.new(
1181
+ status_code: http_response.status,
1182
+ body: http_response.env.response_body,
1183
+ raw_response: http_response
1184
+ ),
1185
+ "API error occurred"
1186
+ )
1187
+ else
1188
+ raise(
1189
+ ::XapiScraper::Models::Errors::APIError.new(
1190
+ status_code: http_response.status,
1191
+ body: http_response.env.response_body,
1192
+ raw_response: http_response
1193
+ ),
1194
+ "Unknown status code received"
1195
+ )
1196
+
1197
+ end
1198
+ end
1199
+
1200
+ sig {
1201
+ params(
1202
+ request: Models::Components::QuoteTweetQuery,
1203
+ retries: T.nilable(Utils::RetryConfig),
1204
+ timeout_ms: T.nilable(Integer),
1205
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1206
+ )
1207
+ .returns(Models::Operations::TweetsActionsQuoteResponse)
1208
+ }
1209
+ def quote(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1210
+ # quote - Create a Quote Tweet
1211
+ # Posts a new tweet that quotes an existing tweet. Requires the URL of the tweet to be quoted and the new content,$0.001 per call.
1212
+ url, params = @sdk_configuration.get_server_details
1213
+ base_url = Utils.template_url(url, params)
1214
+ url = "#{base_url}/twitter/tweets/quote"
1215
+ headers = {}
1216
+ headers = T.cast(headers, T::Hash[String, String])
1217
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
1218
+ headers["content-type"] = req_content_type
1219
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1220
+
1221
+ if form && !form.empty?
1222
+ body = Utils.encode_form(form)
1223
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1224
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1225
+ else
1226
+ body = data
1227
+ end
1228
+
1229
+ headers["Accept"] = "application/json"
1230
+ headers["user-agent"] = @sdk_configuration.user_agent
1231
+ retries ||= @sdk_configuration.retry_config
1232
+ retries ||= Utils::RetryConfig.new(
1233
+ backoff: Utils::BackoffStrategy.new(
1234
+ exponent: 1.5,
1235
+ initial_interval: 500,
1236
+ max_elapsed_time: 3_600_000,
1237
+ max_interval: 60_000
1238
+ ),
1239
+ retry_connection_errors: true,
1240
+ strategy: "backoff"
1241
+ )
1242
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
1243
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
1244
+
1245
+ security = @sdk_configuration.security_source&.call
1246
+
1247
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1248
+ timeout ||= @sdk_configuration.timeout
1249
+
1250
+ connection = @sdk_configuration.client.dup
1251
+ connection.use(Utils::RetryMiddleware, retry_options)
1252
+
1253
+ hook_ctx = SDKHooks::HookContext.new(
1254
+ config: @sdk_configuration,
1255
+ base_url: base_url,
1256
+ oauth2_scopes: nil,
1257
+ operation_id: "tweetsActionsQuote",
1258
+ security_source: @sdk_configuration.security_source
1259
+ )
1260
+
1261
+ error = T.let(nil, T.nilable(StandardError))
1262
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1263
+
1264
+ begin
1265
+ http_response = T.must(connection).post(url) do |req|
1266
+ req.body = body
1267
+ req.headers.merge!(headers)
1268
+ req.options.timeout = timeout unless timeout.nil?
1269
+ Utils.configure_request_security(req, security)
1270
+ http_headers&.each do |key, value|
1271
+ req.headers[key.to_s] = value
1272
+ end
1273
+
1274
+ @sdk_configuration.hooks.before_request(
1275
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1276
+ hook_ctx: hook_ctx
1277
+ ),
1278
+ request: req
1279
+ )
1280
+ end
1281
+
1282
+ rescue StandardError => e
1283
+ error = e
1284
+ ensure
1285
+ if http_response.nil? || Utils.error_status?(http_response.status)
1286
+ http_response = @sdk_configuration.hooks.after_error(
1287
+ error: error,
1288
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1289
+ hook_ctx: hook_ctx
1290
+ ),
1291
+ response: http_response
1292
+ )
1293
+ else
1294
+ http_response = @sdk_configuration.hooks.after_success(
1295
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1296
+ hook_ctx: hook_ctx
1297
+ ),
1298
+ response: http_response
1299
+ )
1300
+ end
1301
+
1302
+ if http_response.nil?
1303
+ raise error if !error.nil?
1304
+ raise "no response"
1305
+ end
1306
+ end
1307
+
1308
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1309
+ if Utils.match_status_code(http_response.status, ["200"])
1310
+ if Utils.match_content_type(content_type, "application/json")
1311
+ http_response = @sdk_configuration.hooks.after_success(
1312
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1313
+ hook_ctx: hook_ctx
1314
+ ),
1315
+ response: http_response
1316
+ )
1317
+ response_data = http_response.env.response_body
1318
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::PostTweetResponse)
1319
+ response = Models::Operations::TweetsActionsQuoteResponse.new(
1320
+ status_code: http_response.status,
1321
+ content_type: content_type,
1322
+ raw_response: http_response,
1323
+ post_tweet_response: T.unsafe(obj)
1324
+ )
1325
+
1326
+ return response
1327
+ else
1328
+ raise(
1329
+ ::XapiScraper::Models::Errors::APIError.new(
1330
+ status_code: http_response.status,
1331
+ body: http_response.env.response_body,
1332
+ raw_response: http_response
1333
+ ),
1334
+ "Unknown content type received"
1335
+ )
1336
+ end
1337
+ elsif Utils.match_status_code(http_response.status, ["422"])
1338
+ if Utils.match_content_type(content_type, "application/json")
1339
+ http_response = @sdk_configuration.hooks.after_success(
1340
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1341
+ hook_ctx: hook_ctx
1342
+ ),
1343
+ response: http_response
1344
+ )
1345
+ response_data = http_response.env.response_body
1346
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
1347
+ obj.raw_response = http_response
1348
+ raise obj
1349
+ else
1350
+ raise(
1351
+ ::XapiScraper::Models::Errors::APIError.new(
1352
+ status_code: http_response.status,
1353
+ body: http_response.env.response_body,
1354
+ raw_response: http_response
1355
+ ),
1356
+ "Unknown content type received"
1357
+ )
1358
+ end
1359
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1360
+ raise(
1361
+ ::XapiScraper::Models::Errors::APIError.new(
1362
+ status_code: http_response.status,
1363
+ body: http_response.env.response_body,
1364
+ raw_response: http_response
1365
+ ),
1366
+ "API error occurred"
1367
+ )
1368
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1369
+ raise(
1370
+ ::XapiScraper::Models::Errors::APIError.new(
1371
+ status_code: http_response.status,
1372
+ body: http_response.env.response_body,
1373
+ raw_response: http_response
1374
+ ),
1375
+ "API error occurred"
1376
+ )
1377
+ else
1378
+ raise(
1379
+ ::XapiScraper::Models::Errors::APIError.new(
1380
+ status_code: http_response.status,
1381
+ body: http_response.env.response_body,
1382
+ raw_response: http_response
1383
+ ),
1384
+ "Unknown status code received"
1385
+ )
1386
+
1387
+ end
1388
+ end
1389
+
1390
+ sig {
1391
+ params(
1392
+ request: Models::Components::PostTweetWithoutCookieQuery,
1393
+ retries: T.nilable(Utils::RetryConfig),
1394
+ timeout_ms: T.nilable(Integer),
1395
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1396
+ )
1397
+ .returns(Models::Operations::TweetsActionsCreateWithoutCookieResponse)
1398
+ }
1399
+ def create_without_cookie(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1400
+ # create_without_cookie - Post Tweet (Auto Cookie)
1401
+ # Post a tweet using a random cookie from the pool, [cookie management](https://twitterxapi.com/cookies/management)
1402
+ # $0.001 per call.
1403
+ url, params = @sdk_configuration.get_server_details
1404
+ base_url = Utils.template_url(url, params)
1405
+ url = "#{base_url}/twitter/post-tweet-without-cookie"
1406
+ headers = {}
1407
+ headers = T.cast(headers, T::Hash[String, String])
1408
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
1409
+ headers["content-type"] = req_content_type
1410
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1411
+
1412
+ if form && !form.empty?
1413
+ body = Utils.encode_form(form)
1414
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1415
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1416
+ else
1417
+ body = data
1418
+ end
1419
+
1420
+ headers["Accept"] = "application/json"
1421
+ headers["user-agent"] = @sdk_configuration.user_agent
1422
+ retries ||= @sdk_configuration.retry_config
1423
+ retries ||= Utils::RetryConfig.new(
1424
+ backoff: Utils::BackoffStrategy.new(
1425
+ exponent: 1.5,
1426
+ initial_interval: 500,
1427
+ max_elapsed_time: 3_600_000,
1428
+ max_interval: 60_000
1429
+ ),
1430
+ retry_connection_errors: true,
1431
+ strategy: "backoff"
1432
+ )
1433
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
1434
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
1435
+
1436
+ security = @sdk_configuration.security_source&.call
1437
+
1438
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1439
+ timeout ||= @sdk_configuration.timeout
1440
+
1441
+ connection = @sdk_configuration.client.dup
1442
+ connection.use(Utils::RetryMiddleware, retry_options)
1443
+
1444
+ hook_ctx = SDKHooks::HookContext.new(
1445
+ config: @sdk_configuration,
1446
+ base_url: base_url,
1447
+ oauth2_scopes: nil,
1448
+ operation_id: "tweetsActionsCreateWithoutCookie",
1449
+ security_source: @sdk_configuration.security_source
1450
+ )
1451
+
1452
+ error = T.let(nil, T.nilable(StandardError))
1453
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1454
+
1455
+ begin
1456
+ http_response = T.must(connection).post(url) do |req|
1457
+ req.body = body
1458
+ req.headers.merge!(headers)
1459
+ req.options.timeout = timeout unless timeout.nil?
1460
+ Utils.configure_request_security(req, security)
1461
+ http_headers&.each do |key, value|
1462
+ req.headers[key.to_s] = value
1463
+ end
1464
+
1465
+ @sdk_configuration.hooks.before_request(
1466
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1467
+ hook_ctx: hook_ctx
1468
+ ),
1469
+ request: req
1470
+ )
1471
+ end
1472
+
1473
+ rescue StandardError => e
1474
+ error = e
1475
+ ensure
1476
+ if http_response.nil? || Utils.error_status?(http_response.status)
1477
+ http_response = @sdk_configuration.hooks.after_error(
1478
+ error: error,
1479
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1480
+ hook_ctx: hook_ctx
1481
+ ),
1482
+ response: http_response
1483
+ )
1484
+ else
1485
+ http_response = @sdk_configuration.hooks.after_success(
1486
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1487
+ hook_ctx: hook_ctx
1488
+ ),
1489
+ response: http_response
1490
+ )
1491
+ end
1492
+
1493
+ if http_response.nil?
1494
+ raise error if !error.nil?
1495
+ raise "no response"
1496
+ end
1497
+ end
1498
+
1499
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1500
+ if Utils.match_status_code(http_response.status, ["200"])
1501
+ if Utils.match_content_type(content_type, "application/json")
1502
+ http_response = @sdk_configuration.hooks.after_success(
1503
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1504
+ hook_ctx: hook_ctx
1505
+ ),
1506
+ response: http_response
1507
+ )
1508
+ response_data = http_response.env.response_body
1509
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::PostTweetResponse)
1510
+ response = Models::Operations::TweetsActionsCreateWithoutCookieResponse.new(
1511
+ status_code: http_response.status,
1512
+ content_type: content_type,
1513
+ raw_response: http_response,
1514
+ post_tweet_response: T.unsafe(obj)
1515
+ )
1516
+
1517
+ return response
1518
+ else
1519
+ raise(
1520
+ ::XapiScraper::Models::Errors::APIError.new(
1521
+ status_code: http_response.status,
1522
+ body: http_response.env.response_body,
1523
+ raw_response: http_response
1524
+ ),
1525
+ "Unknown content type received"
1526
+ )
1527
+ end
1528
+ elsif Utils.match_status_code(http_response.status, ["422"])
1529
+ if Utils.match_content_type(content_type, "application/json")
1530
+ http_response = @sdk_configuration.hooks.after_success(
1531
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1532
+ hook_ctx: hook_ctx
1533
+ ),
1534
+ response: http_response
1535
+ )
1536
+ response_data = http_response.env.response_body
1537
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
1538
+ obj.raw_response = http_response
1539
+ raise obj
1540
+ else
1541
+ raise(
1542
+ ::XapiScraper::Models::Errors::APIError.new(
1543
+ status_code: http_response.status,
1544
+ body: http_response.env.response_body,
1545
+ raw_response: http_response
1546
+ ),
1547
+ "Unknown content type received"
1548
+ )
1549
+ end
1550
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1551
+ raise(
1552
+ ::XapiScraper::Models::Errors::APIError.new(
1553
+ status_code: http_response.status,
1554
+ body: http_response.env.response_body,
1555
+ raw_response: http_response
1556
+ ),
1557
+ "API error occurred"
1558
+ )
1559
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1560
+ raise(
1561
+ ::XapiScraper::Models::Errors::APIError.new(
1562
+ status_code: http_response.status,
1563
+ body: http_response.env.response_body,
1564
+ raw_response: http_response
1565
+ ),
1566
+ "API error occurred"
1567
+ )
1568
+ else
1569
+ raise(
1570
+ ::XapiScraper::Models::Errors::APIError.new(
1571
+ status_code: http_response.status,
1572
+ body: http_response.env.response_body,
1573
+ raw_response: http_response
1574
+ ),
1575
+ "Unknown status code received"
1576
+ )
1577
+
1578
+ end
1579
+ end
1580
+
1581
+ sig {
1582
+ params(
1583
+ request: Models::Operations::TweetsActionsBookmarkRequest,
1584
+ retries: T.nilable(Utils::RetryConfig),
1585
+ timeout_ms: T.nilable(Integer),
1586
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1587
+ )
1588
+ .returns(Models::Operations::TweetsActionsBookmarkResponse)
1589
+ }
1590
+ def bookmark(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1591
+ # bookmark - Bookmark a Tweet
1592
+ # Adds a specific tweet to the bookmarks of the user associated with the provided cookie,$0.001 per call.
1593
+ url, params = @sdk_configuration.get_server_details
1594
+ base_url = Utils.template_url(url, params)
1595
+ url = Utils.generate_url(
1596
+ Models::Operations::TweetsActionsBookmarkRequest,
1597
+ base_url,
1598
+ "/twitter/tweets/{tweet_id}/bookmark",
1599
+ request
1600
+ )
1601
+ headers = {}
1602
+ headers = T.cast(headers, T::Hash[String, String])
1603
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
1604
+ headers["content-type"] = req_content_type
1605
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1606
+
1607
+ if form && !form.empty?
1608
+ body = Utils.encode_form(form)
1609
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1610
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1611
+ else
1612
+ body = data
1613
+ end
1614
+
1615
+ headers["Accept"] = "application/json"
1616
+ headers["user-agent"] = @sdk_configuration.user_agent
1617
+ retries ||= @sdk_configuration.retry_config
1618
+ retries ||= Utils::RetryConfig.new(
1619
+ backoff: Utils::BackoffStrategy.new(
1620
+ exponent: 1.5,
1621
+ initial_interval: 500,
1622
+ max_elapsed_time: 3_600_000,
1623
+ max_interval: 60_000
1624
+ ),
1625
+ retry_connection_errors: true,
1626
+ strategy: "backoff"
1627
+ )
1628
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
1629
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
1630
+
1631
+ security = @sdk_configuration.security_source&.call
1632
+
1633
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1634
+ timeout ||= @sdk_configuration.timeout
1635
+
1636
+ connection = @sdk_configuration.client.dup
1637
+ connection.use(Utils::RetryMiddleware, retry_options)
1638
+
1639
+ hook_ctx = SDKHooks::HookContext.new(
1640
+ config: @sdk_configuration,
1641
+ base_url: base_url,
1642
+ oauth2_scopes: nil,
1643
+ operation_id: "tweetsActionsBookmark",
1644
+ security_source: @sdk_configuration.security_source
1645
+ )
1646
+
1647
+ error = T.let(nil, T.nilable(StandardError))
1648
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1649
+
1650
+ begin
1651
+ http_response = T.must(connection).post(url) do |req|
1652
+ req.body = body
1653
+ req.headers.merge!(headers)
1654
+ req.options.timeout = timeout unless timeout.nil?
1655
+ Utils.configure_request_security(req, security)
1656
+ http_headers&.each do |key, value|
1657
+ req.headers[key.to_s] = value
1658
+ end
1659
+
1660
+ @sdk_configuration.hooks.before_request(
1661
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1662
+ hook_ctx: hook_ctx
1663
+ ),
1664
+ request: req
1665
+ )
1666
+ end
1667
+
1668
+ rescue StandardError => e
1669
+ error = e
1670
+ ensure
1671
+ if http_response.nil? || Utils.error_status?(http_response.status)
1672
+ http_response = @sdk_configuration.hooks.after_error(
1673
+ error: error,
1674
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1675
+ hook_ctx: hook_ctx
1676
+ ),
1677
+ response: http_response
1678
+ )
1679
+ else
1680
+ http_response = @sdk_configuration.hooks.after_success(
1681
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1682
+ hook_ctx: hook_ctx
1683
+ ),
1684
+ response: http_response
1685
+ )
1686
+ end
1687
+
1688
+ if http_response.nil?
1689
+ raise error if !error.nil?
1690
+ raise "no response"
1691
+ end
1692
+ end
1693
+
1694
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1695
+ if Utils.match_status_code(http_response.status, ["200"])
1696
+ if Utils.match_content_type(content_type, "application/json")
1697
+ http_response = @sdk_configuration.hooks.after_success(
1698
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1699
+ hook_ctx: hook_ctx
1700
+ ),
1701
+ response: http_response
1702
+ )
1703
+ response_data = http_response.env.response_body
1704
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
1705
+ response = Models::Operations::TweetsActionsBookmarkResponse.new(
1706
+ status_code: http_response.status,
1707
+ content_type: content_type,
1708
+ raw_response: http_response,
1709
+ tweet_action_response: T.unsafe(obj)
1710
+ )
1711
+
1712
+ return response
1713
+ else
1714
+ raise(
1715
+ ::XapiScraper::Models::Errors::APIError.new(
1716
+ status_code: http_response.status,
1717
+ body: http_response.env.response_body,
1718
+ raw_response: http_response
1719
+ ),
1720
+ "Unknown content type received"
1721
+ )
1722
+ end
1723
+ elsif Utils.match_status_code(http_response.status, ["422"])
1724
+ if Utils.match_content_type(content_type, "application/json")
1725
+ http_response = @sdk_configuration.hooks.after_success(
1726
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1727
+ hook_ctx: hook_ctx
1728
+ ),
1729
+ response: http_response
1730
+ )
1731
+ response_data = http_response.env.response_body
1732
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
1733
+ obj.raw_response = http_response
1734
+ raise obj
1735
+ else
1736
+ raise(
1737
+ ::XapiScraper::Models::Errors::APIError.new(
1738
+ status_code: http_response.status,
1739
+ body: http_response.env.response_body,
1740
+ raw_response: http_response
1741
+ ),
1742
+ "Unknown content type received"
1743
+ )
1744
+ end
1745
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1746
+ raise(
1747
+ ::XapiScraper::Models::Errors::APIError.new(
1748
+ status_code: http_response.status,
1749
+ body: http_response.env.response_body,
1750
+ raw_response: http_response
1751
+ ),
1752
+ "API error occurred"
1753
+ )
1754
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1755
+ raise(
1756
+ ::XapiScraper::Models::Errors::APIError.new(
1757
+ status_code: http_response.status,
1758
+ body: http_response.env.response_body,
1759
+ raw_response: http_response
1760
+ ),
1761
+ "API error occurred"
1762
+ )
1763
+ else
1764
+ raise(
1765
+ ::XapiScraper::Models::Errors::APIError.new(
1766
+ status_code: http_response.status,
1767
+ body: http_response.env.response_body,
1768
+ raw_response: http_response
1769
+ ),
1770
+ "Unknown status code received"
1771
+ )
1772
+
1773
+ end
1774
+ end
1775
+
1776
+ sig {
1777
+ params(
1778
+ request: Models::Operations::TweetsActionsUnbookmarkRequest,
1779
+ retries: T.nilable(Utils::RetryConfig),
1780
+ timeout_ms: T.nilable(Integer),
1781
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1782
+ )
1783
+ .returns(Models::Operations::TweetsActionsUnbookmarkResponse)
1784
+ }
1785
+ def unbookmark(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1786
+ # unbookmark - Delete Bookmark
1787
+ # Delete a bookmark, $0.001 per call.
1788
+ url, params = @sdk_configuration.get_server_details
1789
+ base_url = Utils.template_url(url, params)
1790
+ url = Utils.generate_url(
1791
+ Models::Operations::TweetsActionsUnbookmarkRequest,
1792
+ base_url,
1793
+ "/twitter/tweets/{tweet_id}/bookmark",
1794
+ request
1795
+ )
1796
+ headers = {}
1797
+ headers = T.cast(headers, T::Hash[String, String])
1798
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
1799
+ headers["content-type"] = req_content_type
1800
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1801
+
1802
+ if form && !form.empty?
1803
+ body = Utils.encode_form(form)
1804
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1805
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1806
+ else
1807
+ body = data
1808
+ end
1809
+
1810
+ headers["Accept"] = "application/json"
1811
+ headers["user-agent"] = @sdk_configuration.user_agent
1812
+ retries ||= @sdk_configuration.retry_config
1813
+ retries ||= Utils::RetryConfig.new(
1814
+ backoff: Utils::BackoffStrategy.new(
1815
+ exponent: 1.5,
1816
+ initial_interval: 500,
1817
+ max_elapsed_time: 3_600_000,
1818
+ max_interval: 60_000
1819
+ ),
1820
+ retry_connection_errors: true,
1821
+ strategy: "backoff"
1822
+ )
1823
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
1824
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
1825
+
1826
+ security = @sdk_configuration.security_source&.call
1827
+
1828
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1829
+ timeout ||= @sdk_configuration.timeout
1830
+
1831
+ connection = @sdk_configuration.client.dup
1832
+ connection.use(Utils::RetryMiddleware, retry_options)
1833
+
1834
+ hook_ctx = SDKHooks::HookContext.new(
1835
+ config: @sdk_configuration,
1836
+ base_url: base_url,
1837
+ oauth2_scopes: nil,
1838
+ operation_id: "tweetsActionsUnbookmark",
1839
+ security_source: @sdk_configuration.security_source
1840
+ )
1841
+
1842
+ error = T.let(nil, T.nilable(StandardError))
1843
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1844
+
1845
+ begin
1846
+ http_response = T.must(connection).delete(url) do |req|
1847
+ req.body = body
1848
+ req.headers.merge!(headers)
1849
+ req.options.timeout = timeout unless timeout.nil?
1850
+ Utils.configure_request_security(req, security)
1851
+ http_headers&.each do |key, value|
1852
+ req.headers[key.to_s] = value
1853
+ end
1854
+
1855
+ @sdk_configuration.hooks.before_request(
1856
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1857
+ hook_ctx: hook_ctx
1858
+ ),
1859
+ request: req
1860
+ )
1861
+ end
1862
+
1863
+ rescue StandardError => e
1864
+ error = e
1865
+ ensure
1866
+ if http_response.nil? || Utils.error_status?(http_response.status)
1867
+ http_response = @sdk_configuration.hooks.after_error(
1868
+ error: error,
1869
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1870
+ hook_ctx: hook_ctx
1871
+ ),
1872
+ response: http_response
1873
+ )
1874
+ else
1875
+ http_response = @sdk_configuration.hooks.after_success(
1876
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1877
+ hook_ctx: hook_ctx
1878
+ ),
1879
+ response: http_response
1880
+ )
1881
+ end
1882
+
1883
+ if http_response.nil?
1884
+ raise error if !error.nil?
1885
+ raise "no response"
1886
+ end
1887
+ end
1888
+
1889
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1890
+ if Utils.match_status_code(http_response.status, ["200"])
1891
+ if Utils.match_content_type(content_type, "application/json")
1892
+ http_response = @sdk_configuration.hooks.after_success(
1893
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1894
+ hook_ctx: hook_ctx
1895
+ ),
1896
+ response: http_response
1897
+ )
1898
+ response_data = http_response.env.response_body
1899
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::TweetActionResponse)
1900
+ response = Models::Operations::TweetsActionsUnbookmarkResponse.new(
1901
+ status_code: http_response.status,
1902
+ content_type: content_type,
1903
+ raw_response: http_response,
1904
+ tweet_action_response: T.unsafe(obj)
1905
+ )
1906
+
1907
+ return response
1908
+ else
1909
+ raise(
1910
+ ::XapiScraper::Models::Errors::APIError.new(
1911
+ status_code: http_response.status,
1912
+ body: http_response.env.response_body,
1913
+ raw_response: http_response
1914
+ ),
1915
+ "Unknown content type received"
1916
+ )
1917
+ end
1918
+ elsif Utils.match_status_code(http_response.status, ["422"])
1919
+ if Utils.match_content_type(content_type, "application/json")
1920
+ http_response = @sdk_configuration.hooks.after_success(
1921
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1922
+ hook_ctx: hook_ctx
1923
+ ),
1924
+ response: http_response
1925
+ )
1926
+ response_data = http_response.env.response_body
1927
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
1928
+ obj.raw_response = http_response
1929
+ raise obj
1930
+ else
1931
+ raise(
1932
+ ::XapiScraper::Models::Errors::APIError.new(
1933
+ status_code: http_response.status,
1934
+ body: http_response.env.response_body,
1935
+ raw_response: http_response
1936
+ ),
1937
+ "Unknown content type received"
1938
+ )
1939
+ end
1940
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1941
+ raise(
1942
+ ::XapiScraper::Models::Errors::APIError.new(
1943
+ status_code: http_response.status,
1944
+ body: http_response.env.response_body,
1945
+ raw_response: http_response
1946
+ ),
1947
+ "API error occurred"
1948
+ )
1949
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1950
+ raise(
1951
+ ::XapiScraper::Models::Errors::APIError.new(
1952
+ status_code: http_response.status,
1953
+ body: http_response.env.response_body,
1954
+ raw_response: http_response
1955
+ ),
1956
+ "API error occurred"
1957
+ )
1958
+ else
1959
+ raise(
1960
+ ::XapiScraper::Models::Errors::APIError.new(
1961
+ status_code: http_response.status,
1962
+ body: http_response.env.response_body,
1963
+ raw_response: http_response
1964
+ ),
1965
+ "Unknown status code received"
1966
+ )
1967
+
1968
+ end
1969
+ end
1970
+
1971
+ sig {
1972
+ params(
1973
+ request: Models::Components::DeleteTweetQuery,
1974
+ retries: T.nilable(Utils::RetryConfig),
1975
+ timeout_ms: T.nilable(Integer),
1976
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1977
+ )
1978
+ .returns(Models::Operations::TweetsActionsDeleteBatchResponse)
1979
+ }
1980
+ def delete_batch(request:, retries: nil, timeout_ms: nil, http_headers: nil)
1981
+ # delete_batch - Delete One or More Tweets
1982
+ # Deletes one or more tweets from a specified user account. This endpoint supports two modes:
1983
+ #
1984
+ # 1. **Single Tweet Deletion**: Provide a `target_id` to delete a specific tweet.
1985
+ # 2. **Bulk Deletion**: Omit the `target_id` to delete **all** tweets from the user's account.
1986
+ #
1987
+ # **Warning**: The bulk deletion mode is irreversible and will permanently remove all tweets from the account. Use with extreme caution.
1988
+ url, params = @sdk_configuration.get_server_details
1989
+ base_url = Utils.template_url(url, params)
1990
+ url = "#{base_url}/twitter/tweets/delete-batch"
1991
+ headers = {}
1992
+ headers = T.cast(headers, T::Hash[String, String])
1993
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
1994
+ headers["content-type"] = req_content_type
1995
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1996
+
1997
+ if form && !form.empty?
1998
+ body = Utils.encode_form(form)
1999
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
2000
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
2001
+ else
2002
+ body = data
2003
+ end
2004
+
2005
+ headers["Accept"] = "application/json"
2006
+ headers["user-agent"] = @sdk_configuration.user_agent
2007
+ retries ||= @sdk_configuration.retry_config
2008
+ retries ||= Utils::RetryConfig.new(
2009
+ backoff: Utils::BackoffStrategy.new(
2010
+ exponent: 1.5,
2011
+ initial_interval: 500,
2012
+ max_elapsed_time: 3_600_000,
2013
+ max_interval: 60_000
2014
+ ),
2015
+ retry_connection_errors: true,
2016
+ strategy: "backoff"
2017
+ )
2018
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
2019
+ retry_options[:retry_statuses] = [408, 409, 429, 500, 501, 502, 503, 504, 505]
2020
+
2021
+ security = @sdk_configuration.security_source&.call
2022
+
2023
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
2024
+ timeout ||= @sdk_configuration.timeout
2025
+
2026
+ connection = @sdk_configuration.client.dup
2027
+ connection.use(Utils::RetryMiddleware, retry_options)
2028
+
2029
+ hook_ctx = SDKHooks::HookContext.new(
2030
+ config: @sdk_configuration,
2031
+ base_url: base_url,
2032
+ oauth2_scopes: nil,
2033
+ operation_id: "tweetsActionsDeleteBatch",
2034
+ security_source: @sdk_configuration.security_source
2035
+ )
2036
+
2037
+ error = T.let(nil, T.nilable(StandardError))
2038
+ http_response = T.let(nil, T.nilable(Faraday::Response))
2039
+
2040
+ begin
2041
+ http_response = T.must(connection).post(url) do |req|
2042
+ req.body = body
2043
+ req.headers.merge!(headers)
2044
+ req.options.timeout = timeout unless timeout.nil?
2045
+ Utils.configure_request_security(req, security)
2046
+ http_headers&.each do |key, value|
2047
+ req.headers[key.to_s] = value
2048
+ end
2049
+
2050
+ @sdk_configuration.hooks.before_request(
2051
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
2052
+ hook_ctx: hook_ctx
2053
+ ),
2054
+ request: req
2055
+ )
2056
+ end
2057
+
2058
+ rescue StandardError => e
2059
+ error = e
2060
+ ensure
2061
+ if http_response.nil? || Utils.error_status?(http_response.status)
2062
+ http_response = @sdk_configuration.hooks.after_error(
2063
+ error: error,
2064
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
2065
+ hook_ctx: hook_ctx
2066
+ ),
2067
+ response: http_response
2068
+ )
2069
+ else
2070
+ http_response = @sdk_configuration.hooks.after_success(
2071
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
2072
+ hook_ctx: hook_ctx
2073
+ ),
2074
+ response: http_response
2075
+ )
2076
+ end
2077
+
2078
+ if http_response.nil?
2079
+ raise error if !error.nil?
2080
+ raise "no response"
2081
+ end
2082
+ end
2083
+
2084
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
2085
+ if Utils.match_status_code(http_response.status, ["200"])
2086
+ if Utils.match_content_type(content_type, "application/json")
2087
+ http_response = @sdk_configuration.hooks.after_success(
2088
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
2089
+ hook_ctx: hook_ctx
2090
+ ),
2091
+ response: http_response
2092
+ )
2093
+ response_data = http_response.env.response_body
2094
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::DeleteTweetResponse)
2095
+ response = Models::Operations::TweetsActionsDeleteBatchResponse.new(
2096
+ status_code: http_response.status,
2097
+ content_type: content_type,
2098
+ raw_response: http_response,
2099
+ delete_tweet_response: T.unsafe(obj)
2100
+ )
2101
+
2102
+ return response
2103
+ else
2104
+ raise(
2105
+ ::XapiScraper::Models::Errors::APIError.new(
2106
+ status_code: http_response.status,
2107
+ body: http_response.env.response_body,
2108
+ raw_response: http_response
2109
+ ),
2110
+ "Unknown content type received"
2111
+ )
2112
+ end
2113
+ elsif Utils.match_status_code(http_response.status, ["422"])
2114
+ if Utils.match_content_type(content_type, "application/json")
2115
+ http_response = @sdk_configuration.hooks.after_success(
2116
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
2117
+ hook_ctx: hook_ctx
2118
+ ),
2119
+ response: http_response
2120
+ )
2121
+ response_data = http_response.env.response_body
2122
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::HTTPValidationError)
2123
+ obj.raw_response = http_response
2124
+ raise obj
2125
+ else
2126
+ raise(
2127
+ ::XapiScraper::Models::Errors::APIError.new(
2128
+ status_code: http_response.status,
2129
+ body: http_response.env.response_body,
2130
+ raw_response: http_response
2131
+ ),
2132
+ "Unknown content type received"
2133
+ )
2134
+ end
2135
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
2136
+ raise(
2137
+ ::XapiScraper::Models::Errors::APIError.new(
2138
+ status_code: http_response.status,
2139
+ body: http_response.env.response_body,
2140
+ raw_response: http_response
2141
+ ),
2142
+ "API error occurred"
2143
+ )
2144
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
2145
+ raise(
2146
+ ::XapiScraper::Models::Errors::APIError.new(
2147
+ status_code: http_response.status,
2148
+ body: http_response.env.response_body,
2149
+ raw_response: http_response
2150
+ ),
2151
+ "API error occurred"
2152
+ )
2153
+ else
2154
+ raise(
2155
+ ::XapiScraper::Models::Errors::APIError.new(
2156
+ status_code: http_response.status,
2157
+ body: http_response.env.response_body,
2158
+ raw_response: http_response
2159
+ ),
2160
+ "Unknown status code received"
2161
+ )
2162
+
2163
+ end
2164
+ end
2165
+ end
2166
+ end