x-twitter-scraper 0.4.5 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +8 -41
  4. data/lib/x_twitter_scraper/client.rb +1 -1
  5. data/lib/x_twitter_scraper/internal/type/union.rb +13 -0
  6. data/lib/x_twitter_scraper/models/account_retrieve_response.rb +4 -4
  7. data/lib/x_twitter_scraper/models/compose_create_params.rb +194 -122
  8. data/lib/x_twitter_scraper/models/compose_create_response.rb +326 -33
  9. data/lib/x_twitter_scraper/models/credit_retrieve_topup_status_params.rb +2 -2
  10. data/lib/x_twitter_scraper/models/error.rb +99 -3
  11. data/lib/x_twitter_scraper/models/extraction_estimate_cost_params.rb +8 -8
  12. data/lib/x_twitter_scraper/models/guest_wallet_create_params.rb +2 -2
  13. data/lib/x_twitter_scraper/models/guest_wallet_create_response.rb +27 -7
  14. data/lib/x_twitter_scraper/models/guest_wallet_topup_params.rb +2 -2
  15. data/lib/x_twitter_scraper/models/guest_wallet_topup_response.rb +27 -7
  16. data/lib/x_twitter_scraper/models/search_tweet.rb +12 -12
  17. data/lib/x_twitter_scraper/models/support/ticket_create_params.rb +7 -1
  18. data/lib/x_twitter_scraper/models/support/ticket_create_response.rb +40 -3
  19. data/lib/x_twitter_scraper/models/support/ticket_reply_params.rb +7 -1
  20. data/lib/x_twitter_scraper/models/support/ticket_reply_response.rb +40 -3
  21. data/lib/x_twitter_scraper/models/support/ticket_retrieve_response.rb +114 -1
  22. data/lib/x_twitter_scraper/models/x/communities/join_create_params.rb +8 -1
  23. data/lib/x_twitter_scraper/models/x/communities/join_create_response.rb +577 -4
  24. data/lib/x_twitter_scraper/models/x/communities/join_delete_all_params.rb +8 -1
  25. data/lib/x_twitter_scraper/models/x/communities/join_delete_all_response.rb +585 -4
  26. data/lib/x_twitter_scraper/models/x/community_create_params.rb +8 -1
  27. data/lib/x_twitter_scraper/models/x/community_create_response.rb +568 -8
  28. data/lib/x_twitter_scraper/models/x/community_delete_params.rb +8 -1
  29. data/lib/x_twitter_scraper/models/x/community_delete_response.rb +576 -4
  30. data/lib/x_twitter_scraper/models/x/dm_send_params.rb +8 -1
  31. data/lib/x_twitter_scraper/models/x/dm_send_response.rb +573 -7
  32. data/lib/x_twitter_scraper/models/x/media_upload_params.rb +8 -1
  33. data/lib/x_twitter_scraper/models/x/media_upload_response.rb +568 -11
  34. data/lib/x_twitter_scraper/models/x/profile_update_avatar_params.rb +8 -1
  35. data/lib/x_twitter_scraper/models/x/profile_update_avatar_response.rb +576 -4
  36. data/lib/x_twitter_scraper/models/x/profile_update_banner_params.rb +8 -1
  37. data/lib/x_twitter_scraper/models/x/profile_update_banner_response.rb +576 -4
  38. data/lib/x_twitter_scraper/models/x/profile_update_params.rb +8 -1
  39. data/lib/x_twitter_scraper/models/x/profile_update_response.rb +576 -4
  40. data/lib/x_twitter_scraper/models/x/tweet_author.rb +1 -14
  41. data/lib/x_twitter_scraper/models/x/tweet_create_params.rb +5 -5
  42. data/lib/x_twitter_scraper/models/x/tweet_create_response.rb +551 -12
  43. data/lib/x_twitter_scraper/models/x/tweet_delete_params.rb +8 -1
  44. data/lib/x_twitter_scraper/models/x/tweet_delete_response.rb +576 -4
  45. data/lib/x_twitter_scraper/models/x/tweets/like_create_params.rb +8 -1
  46. data/lib/x_twitter_scraper/models/x/tweets/like_create_response.rb +576 -4
  47. data/lib/x_twitter_scraper/models/x/tweets/like_delete_params.rb +8 -1
  48. data/lib/x_twitter_scraper/models/x/tweets/like_delete_response.rb +576 -4
  49. data/lib/x_twitter_scraper/models/x/tweets/retweet_create_params.rb +8 -1
  50. data/lib/x_twitter_scraper/models/x/tweets/retweet_create_response.rb +576 -4
  51. data/lib/x_twitter_scraper/models/x/tweets/retweet_delete_params.rb +8 -1
  52. data/lib/x_twitter_scraper/models/x/tweets/retweet_delete_response.rb +576 -4
  53. data/lib/x_twitter_scraper/models/x/user_remove_follower_params.rb +8 -1
  54. data/lib/x_twitter_scraper/models/x/user_remove_follower_response.rb +576 -4
  55. data/lib/x_twitter_scraper/models/x/user_retrieve_following_params.rb +2 -2
  56. data/lib/x_twitter_scraper/models/x/user_retrieve_replies_params.rb +2 -2
  57. data/lib/x_twitter_scraper/models/x/users/follow_create_params.rb +8 -1
  58. data/lib/x_twitter_scraper/models/x/users/follow_create_response.rb +576 -4
  59. data/lib/x_twitter_scraper/models/x/users/follow_delete_all_params.rb +8 -1
  60. data/lib/x_twitter_scraper/models/x/users/follow_delete_all_response.rb +576 -4
  61. data/lib/x_twitter_scraper/models/x/write_action_retrieve_response.rb +469 -52
  62. data/lib/x_twitter_scraper/models/x/x_account.rb +7 -7
  63. data/lib/x_twitter_scraper/models/x/x_account_detail.rb +1 -1
  64. data/lib/x_twitter_scraper/resources/compose.rb +8 -26
  65. data/lib/x_twitter_scraper/resources/credits.rb +1 -1
  66. data/lib/x_twitter_scraper/resources/extractions.rb +4 -4
  67. data/lib/x_twitter_scraper/resources/guest_wallets.rb +2 -2
  68. data/lib/x_twitter_scraper/resources/monitors/keywords.rb +4 -5
  69. data/lib/x_twitter_scraper/resources/monitors.rb +3 -3
  70. data/lib/x_twitter_scraper/resources/support/tickets.rb +24 -8
  71. data/lib/x_twitter_scraper/resources/trends.rb +1 -1
  72. data/lib/x_twitter_scraper/resources/x/communities/join.rb +22 -8
  73. data/lib/x_twitter_scraper/resources/x/communities.rb +25 -11
  74. data/lib/x_twitter_scraper/resources/x/dm.rb +13 -6
  75. data/lib/x_twitter_scraper/resources/x/media.rb +17 -7
  76. data/lib/x_twitter_scraper/resources/x/profile.rb +46 -17
  77. data/lib/x_twitter_scraper/resources/x/tweets/like.rb +22 -8
  78. data/lib/x_twitter_scraper/resources/x/tweets/retweet.rb +22 -8
  79. data/lib/x_twitter_scraper/resources/x/tweets.rb +31 -16
  80. data/lib/x_twitter_scraper/resources/x/users/follow.rb +22 -8
  81. data/lib/x_twitter_scraper/resources/x/users.rb +16 -9
  82. data/lib/x_twitter_scraper/resources/x.rb +1 -2
  83. data/lib/x_twitter_scraper/version.rb +1 -1
  84. data/rbi/x_twitter_scraper/client.rbi +1 -1
  85. data/rbi/x_twitter_scraper/models/account_retrieve_response.rbi +4 -4
  86. data/rbi/x_twitter_scraper/models/compose_create_params.rbi +392 -215
  87. data/rbi/x_twitter_scraper/models/compose_create_response.rbi +537 -48
  88. data/rbi/x_twitter_scraper/models/credit_retrieve_topup_status_params.rbi +2 -2
  89. data/rbi/x_twitter_scraper/models/error.rbi +379 -13
  90. data/rbi/x_twitter_scraper/models/extraction_estimate_cost_params.rbi +8 -8
  91. data/rbi/x_twitter_scraper/models/guest_wallet_create_params.rbi +2 -2
  92. data/rbi/x_twitter_scraper/models/guest_wallet_create_response.rbi +87 -5
  93. data/rbi/x_twitter_scraper/models/guest_wallet_topup_params.rbi +2 -2
  94. data/rbi/x_twitter_scraper/models/guest_wallet_topup_response.rbi +87 -5
  95. data/rbi/x_twitter_scraper/models/search_tweet.rbi +12 -12
  96. data/rbi/x_twitter_scraper/models/support/ticket_create_params.rbi +9 -1
  97. data/rbi/x_twitter_scraper/models/support/ticket_create_response.rbi +113 -7
  98. data/rbi/x_twitter_scraper/models/support/ticket_reply_params.rbi +9 -1
  99. data/rbi/x_twitter_scraper/models/support/ticket_reply_response.rbi +113 -7
  100. data/rbi/x_twitter_scraper/models/support/ticket_retrieve_response.rbi +276 -5
  101. data/rbi/x_twitter_scraper/models/x/communities/join_create_params.rbi +6 -0
  102. data/rbi/x_twitter_scraper/models/x/communities/join_create_response.rbi +1154 -3
  103. data/rbi/x_twitter_scraper/models/x/communities/join_delete_all_params.rbi +6 -0
  104. data/rbi/x_twitter_scraper/models/x/communities/join_delete_all_response.rbi +1154 -3
  105. data/rbi/x_twitter_scraper/models/x/community_create_params.rbi +6 -0
  106. data/rbi/x_twitter_scraper/models/x/community_create_response.rbi +1127 -5
  107. data/rbi/x_twitter_scraper/models/x/community_delete_params.rbi +6 -0
  108. data/rbi/x_twitter_scraper/models/x/community_delete_response.rbi +1148 -3
  109. data/rbi/x_twitter_scraper/models/x/dm_send_params.rbi +6 -0
  110. data/rbi/x_twitter_scraper/models/x/dm_send_response.rbi +1112 -6
  111. data/rbi/x_twitter_scraper/models/x/media_upload_params.rbi +6 -0
  112. data/rbi/x_twitter_scraper/models/x/media_upload_response.rbi +1124 -9
  113. data/rbi/x_twitter_scraper/models/x/profile_update_avatar_params.rbi +6 -0
  114. data/rbi/x_twitter_scraper/models/x/profile_update_avatar_response.rbi +1152 -3
  115. data/rbi/x_twitter_scraper/models/x/profile_update_banner_params.rbi +6 -0
  116. data/rbi/x_twitter_scraper/models/x/profile_update_banner_response.rbi +1152 -3
  117. data/rbi/x_twitter_scraper/models/x/profile_update_params.rbi +6 -0
  118. data/rbi/x_twitter_scraper/models/x/profile_update_response.rbi +1144 -3
  119. data/rbi/x_twitter_scraper/models/x/tweet_author.rbi +3 -13
  120. data/rbi/x_twitter_scraper/models/x/tweet_create_params.rbi +5 -8
  121. data/rbi/x_twitter_scraper/models/x/tweet_create_response.rbi +1108 -14
  122. data/rbi/x_twitter_scraper/models/x/tweet_delete_params.rbi +6 -0
  123. data/rbi/x_twitter_scraper/models/x/tweet_delete_response.rbi +1140 -3
  124. data/rbi/x_twitter_scraper/models/x/tweets/like_create_params.rbi +6 -0
  125. data/rbi/x_twitter_scraper/models/x/tweets/like_create_response.rbi +1154 -3
  126. data/rbi/x_twitter_scraper/models/x/tweets/like_delete_params.rbi +6 -0
  127. data/rbi/x_twitter_scraper/models/x/tweets/like_delete_response.rbi +1154 -3
  128. data/rbi/x_twitter_scraper/models/x/tweets/retweet_create_params.rbi +6 -0
  129. data/rbi/x_twitter_scraper/models/x/tweets/retweet_create_response.rbi +1154 -3
  130. data/rbi/x_twitter_scraper/models/x/tweets/retweet_delete_params.rbi +6 -0
  131. data/rbi/x_twitter_scraper/models/x/tweets/retweet_delete_response.rbi +1154 -3
  132. data/rbi/x_twitter_scraper/models/x/user_remove_follower_params.rbi +6 -0
  133. data/rbi/x_twitter_scraper/models/x/user_remove_follower_response.rbi +1152 -3
  134. data/rbi/x_twitter_scraper/models/x/user_retrieve_following_params.rbi +2 -2
  135. data/rbi/x_twitter_scraper/models/x/user_retrieve_replies_params.rbi +2 -2
  136. data/rbi/x_twitter_scraper/models/x/users/follow_create_params.rbi +6 -0
  137. data/rbi/x_twitter_scraper/models/x/users/follow_create_response.rbi +1154 -3
  138. data/rbi/x_twitter_scraper/models/x/users/follow_delete_all_params.rbi +6 -0
  139. data/rbi/x_twitter_scraper/models/x/users/follow_delete_all_response.rbi +1154 -3
  140. data/rbi/x_twitter_scraper/models/x/write_action_retrieve_response.rbi +930 -66
  141. data/rbi/x_twitter_scraper/models/x/x_account.rbi +9 -9
  142. data/rbi/x_twitter_scraper/models/x/x_account_detail.rbi +1 -1
  143. data/rbi/x_twitter_scraper/resources/compose.rbi +12 -38
  144. data/rbi/x_twitter_scraper/resources/credits.rbi +1 -1
  145. data/rbi/x_twitter_scraper/resources/extractions.rbi +4 -4
  146. data/rbi/x_twitter_scraper/resources/guest_wallets.rbi +2 -2
  147. data/rbi/x_twitter_scraper/resources/monitors/keywords.rbi +4 -5
  148. data/rbi/x_twitter_scraper/resources/monitors.rbi +3 -3
  149. data/rbi/x_twitter_scraper/resources/support/tickets.rbi +17 -2
  150. data/rbi/x_twitter_scraper/resources/trends.rbi +1 -1
  151. data/rbi/x_twitter_scraper/resources/x/communities/join.rbi +16 -4
  152. data/rbi/x_twitter_scraper/resources/x/communities.rbi +19 -7
  153. data/rbi/x_twitter_scraper/resources/x/dm.rbi +10 -3
  154. data/rbi/x_twitter_scraper/resources/x/media.rbi +9 -4
  155. data/rbi/x_twitter_scraper/resources/x/profile.rbi +27 -8
  156. data/rbi/x_twitter_scraper/resources/x/tweets/like.rbi +16 -4
  157. data/rbi/x_twitter_scraper/resources/x/tweets/retweet.rbi +16 -4
  158. data/rbi/x_twitter_scraper/resources/x/tweets.rbi +31 -12
  159. data/rbi/x_twitter_scraper/resources/x/users/follow.rbi +16 -4
  160. data/rbi/x_twitter_scraper/resources/x/users.rbi +13 -7
  161. data/rbi/x_twitter_scraper/resources/x.rbi +1 -2
  162. data/sig/x_twitter_scraper/models/compose_create_params.rbs +150 -90
  163. data/sig/x_twitter_scraper/models/compose_create_response.rbs +249 -27
  164. data/sig/x_twitter_scraper/models/error.rbs +170 -7
  165. data/sig/x_twitter_scraper/models/guest_wallet_create_response.rbs +35 -5
  166. data/sig/x_twitter_scraper/models/guest_wallet_topup_response.rbs +35 -5
  167. data/sig/x_twitter_scraper/models/support/ticket_create_params.rbs +7 -1
  168. data/sig/x_twitter_scraper/models/support/ticket_create_response.rbs +49 -5
  169. data/sig/x_twitter_scraper/models/support/ticket_reply_params.rbs +7 -1
  170. data/sig/x_twitter_scraper/models/support/ticket_reply_response.rbs +49 -5
  171. data/sig/x_twitter_scraper/models/support/ticket_retrieve_response.rbs +113 -2
  172. data/sig/x_twitter_scraper/models/x/communities/join_create_params.rbs +5 -1
  173. data/sig/x_twitter_scraper/models/x/communities/join_create_response.rbs +540 -4
  174. data/sig/x_twitter_scraper/models/x/communities/join_delete_all_params.rbs +5 -1
  175. data/sig/x_twitter_scraper/models/x/communities/join_delete_all_response.rbs +540 -4
  176. data/sig/x_twitter_scraper/models/x/community_create_params.rbs +10 -1
  177. data/sig/x_twitter_scraper/models/x/community_create_response.rbs +528 -7
  178. data/sig/x_twitter_scraper/models/x/community_delete_params.rbs +10 -1
  179. data/sig/x_twitter_scraper/models/x/community_delete_response.rbs +540 -4
  180. data/sig/x_twitter_scraper/models/x/dm_send_params.rbs +5 -0
  181. data/sig/x_twitter_scraper/models/x/dm_send_response.rbs +539 -5
  182. data/sig/x_twitter_scraper/models/x/media_upload_params.rbs +5 -1
  183. data/sig/x_twitter_scraper/models/x/media_upload_response.rbs +534 -7
  184. data/sig/x_twitter_scraper/models/x/profile_update_avatar_params.rbs +5 -1
  185. data/sig/x_twitter_scraper/models/x/profile_update_avatar_response.rbs +540 -4
  186. data/sig/x_twitter_scraper/models/x/profile_update_banner_params.rbs +5 -1
  187. data/sig/x_twitter_scraper/models/x/profile_update_banner_response.rbs +540 -4
  188. data/sig/x_twitter_scraper/models/x/profile_update_params.rbs +5 -0
  189. data/sig/x_twitter_scraper/models/x/profile_update_response.rbs +540 -4
  190. data/sig/x_twitter_scraper/models/x/tweet_author.rbs +3 -11
  191. data/sig/x_twitter_scraper/models/x/tweet_create_params.rbs +4 -6
  192. data/sig/x_twitter_scraper/models/x/tweet_create_response.rbs +518 -11
  193. data/sig/x_twitter_scraper/models/x/tweet_delete_params.rbs +5 -1
  194. data/sig/x_twitter_scraper/models/x/tweet_delete_response.rbs +540 -4
  195. data/sig/x_twitter_scraper/models/x/tweets/like_create_params.rbs +5 -1
  196. data/sig/x_twitter_scraper/models/x/tweets/like_create_response.rbs +540 -4
  197. data/sig/x_twitter_scraper/models/x/tweets/like_delete_params.rbs +5 -1
  198. data/sig/x_twitter_scraper/models/x/tweets/like_delete_response.rbs +540 -4
  199. data/sig/x_twitter_scraper/models/x/tweets/retweet_create_params.rbs +5 -1
  200. data/sig/x_twitter_scraper/models/x/tweets/retweet_create_response.rbs +540 -4
  201. data/sig/x_twitter_scraper/models/x/tweets/retweet_delete_params.rbs +5 -1
  202. data/sig/x_twitter_scraper/models/x/tweets/retweet_delete_response.rbs +540 -4
  203. data/sig/x_twitter_scraper/models/x/user_remove_follower_params.rbs +5 -1
  204. data/sig/x_twitter_scraper/models/x/user_remove_follower_response.rbs +540 -4
  205. data/sig/x_twitter_scraper/models/x/users/follow_create_params.rbs +5 -1
  206. data/sig/x_twitter_scraper/models/x/users/follow_create_response.rbs +540 -4
  207. data/sig/x_twitter_scraper/models/x/users/follow_delete_all_params.rbs +5 -1
  208. data/sig/x_twitter_scraper/models/x/users/follow_delete_all_response.rbs +540 -4
  209. data/sig/x_twitter_scraper/models/x/write_action_retrieve_response.rbs +428 -54
  210. data/sig/x_twitter_scraper/resources/compose.rbs +2 -12
  211. data/sig/x_twitter_scraper/resources/support/tickets.rbs +2 -0
  212. data/sig/x_twitter_scraper/resources/x/communities/join.rbs +2 -0
  213. data/sig/x_twitter_scraper/resources/x/communities.rbs +2 -0
  214. data/sig/x_twitter_scraper/resources/x/dm.rbs +1 -0
  215. data/sig/x_twitter_scraper/resources/x/media.rbs +1 -0
  216. data/sig/x_twitter_scraper/resources/x/profile.rbs +3 -0
  217. data/sig/x_twitter_scraper/resources/x/tweets/like.rbs +2 -0
  218. data/sig/x_twitter_scraper/resources/x/tweets/retweet.rbs +2 -0
  219. data/sig/x_twitter_scraper/resources/x/tweets.rbs +2 -1
  220. data/sig/x_twitter_scraper/resources/x/users/follow.rbs +2 -0
  221. data/sig/x_twitter_scraper/resources/x/users.rbs +1 -0
  222. metadata +17 -26
@@ -13,35 +13,128 @@ module XTwitterScraper
13
13
  end
14
14
 
15
15
  sig { returns(String) }
16
+ attr_accessor :id
17
+
18
+ # Connected account selected for the write.
19
+ sig do
20
+ returns(
21
+ T.nilable(
22
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Account
23
+ )
24
+ )
25
+ end
26
+ attr_reader :account
27
+
28
+ sig do
29
+ params(
30
+ account:
31
+ T.nilable(
32
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Account::OrHash
33
+ )
34
+ ).void
35
+ end
36
+ attr_writer :account
37
+
38
+ sig do
39
+ returns(
40
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
41
+ )
42
+ end
16
43
  attr_accessor :action
17
44
 
45
+ # plannedCredits is the approved maximum. chargedCredits comes from the settled
46
+ # credit ledger. Pending or failed writes are not charged.
47
+ sig do
48
+ returns(
49
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing
50
+ )
51
+ end
52
+ attr_reader :billing
53
+
54
+ sig do
55
+ params(
56
+ billing:
57
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::OrHash
58
+ ).void
59
+ end
60
+ attr_writer :billing
61
+
18
62
  sig { returns(T::Boolean) }
19
63
  attr_accessor :charged
20
64
 
21
65
  sig { returns(String) }
22
66
  attr_accessor :charged_credits
23
67
 
24
- sig { returns(Time) }
25
- attr_accessor :created_at
68
+ # Exact follow-up an API client or agent should perform.
69
+ sig do
70
+ returns(
71
+ T.nilable(
72
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction
73
+ )
74
+ )
75
+ end
76
+ attr_reader :next_action
77
+
78
+ sig do
79
+ params(
80
+ next_action:
81
+ T.nilable(
82
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::OrHash
83
+ )
84
+ ).void
85
+ end
86
+ attr_writer :next_action
87
+
88
+ sig { returns(Symbol) }
89
+ attr_accessor :object
26
90
 
91
+ sig { returns(T.nilable(Integer)) }
92
+ attr_accessor :poll_after_ms
93
+
94
+ # Stable fingerprint and sanitized payload for replay checks.
27
95
  sig do
28
96
  returns(
29
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media
97
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Request
30
98
  )
31
99
  end
32
- attr_reader :media
100
+ attr_reader :request
33
101
 
34
102
  sig do
35
103
  params(
36
- media:
37
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::OrHash
104
+ request:
105
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Request::OrHash
38
106
  ).void
39
107
  end
40
- attr_writer :media
108
+ attr_writer :request
109
+
110
+ # Confirmed result produced by the write, when available.
111
+ sig do
112
+ returns(
113
+ T.nilable(
114
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result
115
+ )
116
+ )
117
+ end
118
+ attr_reader :result
41
119
 
120
+ sig do
121
+ params(
122
+ result:
123
+ T.nilable(
124
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::OrHash
125
+ )
126
+ ).void
127
+ end
128
+ attr_writer :result
129
+
130
+ # True only when a new attempt can reasonably succeed.
42
131
  sig { returns(T::Boolean) }
43
132
  attr_accessor :retryable
44
133
 
134
+ # True only when no write was dispatched and a new idempotency key may be used.
135
+ sig { returns(T::Boolean) }
136
+ attr_accessor :safe_to_retry
137
+
45
138
  sig { returns(T::Boolean) }
46
139
  attr_accessor :send_dispatched
47
140
 
@@ -52,9 +145,61 @@ module XTwitterScraper
52
145
  end
53
146
  attr_accessor :status
54
147
 
148
+ sig { returns(String) }
149
+ attr_accessor :status_url
150
+
151
+ sig { returns(T::Boolean) }
152
+ attr_accessor :success
153
+
154
+ # Existing X resource targeted by the write, when applicable.
155
+ sig do
156
+ returns(
157
+ T.nilable(
158
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target
159
+ )
160
+ )
161
+ end
162
+ attr_reader :target
163
+
164
+ sig do
165
+ params(
166
+ target:
167
+ T.nilable(
168
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::OrHash
169
+ )
170
+ ).void
171
+ end
172
+ attr_writer :target
173
+
174
+ sig { returns(T.nilable(String)) }
175
+ attr_accessor :target_id
176
+
177
+ sig { returns(T::Boolean) }
178
+ attr_accessor :terminal
179
+
55
180
  sig { returns(String) }
56
181
  attr_accessor :write_action_id
57
182
 
183
+ # Compatibility field for a confirmed community ID.
184
+ sig { returns(T.nilable(String)) }
185
+ attr_reader :community_id
186
+
187
+ sig { params(community_id: String).void }
188
+ attr_writer :community_id
189
+
190
+ # Confirmed community name when available.
191
+ sig { returns(T.nilable(String)) }
192
+ attr_reader :community_name
193
+
194
+ sig { params(community_name: String).void }
195
+ attr_writer :community_name
196
+
197
+ sig { returns(T.nilable(Time)) }
198
+ attr_reader :completed_at
199
+
200
+ sig { params(completed_at: Time).void }
201
+ attr_writer :completed_at
202
+
58
203
  sig { returns(T.nilable(Integer)) }
59
204
  attr_reader :confirmation_attempts
60
205
 
@@ -67,200 +212,822 @@ module XTwitterScraper
67
212
  sig { params(confirmation_checked_at: Time).void }
68
213
  attr_writer :confirmation_checked_at
69
214
 
70
- sig { returns(T.nilable(String)) }
71
- attr_accessor :confirmation_source
72
-
73
215
  sig { returns(T.nilable(Time)) }
74
216
  attr_reader :confirmed_at
75
217
 
76
218
  sig { params(confirmed_at: Time).void }
77
219
  attr_writer :confirmed_at
78
220
 
221
+ sig { returns(T.nilable(Time)) }
222
+ attr_reader :created_at
223
+
224
+ sig { params(created_at: Time).void }
225
+ attr_writer :created_at
226
+
227
+ # Structured recovery context for a failed write.
228
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
229
+ attr_reader :details
230
+
231
+ sig { params(details: T::Hash[Symbol, T.anything]).void }
232
+ attr_writer :details
233
+
234
+ sig { returns(T.nilable(String)) }
235
+ attr_reader :error
236
+
237
+ sig { params(error: String).void }
238
+ attr_writer :error
239
+
240
+ # Deadline for resolving a non-terminal write. This is not the Idempotency-Key
241
+ # retention deadline.
242
+ sig { returns(T.nilable(Time)) }
243
+ attr_reader :expires_at
244
+
245
+ sig { params(expires_at: Time).void }
246
+ attr_writer :expires_at
247
+
248
+ sig { returns(T.nilable(T::Boolean)) }
249
+ attr_reader :idempotent
250
+
251
+ sig { params(idempotent: T::Boolean).void }
252
+ attr_writer :idempotent
253
+
254
+ # Media count, kind, size, and billing details when used.
255
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
256
+ attr_reader :media
257
+
258
+ sig { params(media: T::Hash[Symbol, T.anything]).void }
259
+ attr_writer :media
260
+
261
+ # Compatibility field for a confirmed media upload ID.
262
+ sig { returns(T.nilable(String)) }
263
+ attr_reader :media_id
264
+
265
+ sig { params(media_id: String).void }
266
+ attr_writer :media_id
267
+
268
+ # Public media URL when the upload creates one.
269
+ sig { returns(T.nilable(String)) }
270
+ attr_reader :media_url
271
+
272
+ sig { params(media_url: String).void }
273
+ attr_writer :media_url
274
+
79
275
  sig { returns(T.nilable(String)) }
80
276
  attr_reader :message
81
277
 
82
278
  sig { params(message: String).void }
83
279
  attr_writer :message
84
280
 
281
+ # Compatibility field for a confirmed direct message ID.
85
282
  sig { returns(T.nilable(String)) }
86
283
  attr_reader :message_id
87
284
 
88
285
  sig { params(message_id: String).void }
89
286
  attr_writer :message_id
90
287
 
288
+ sig { returns(T.nilable(String)) }
289
+ attr_reader :request_hash
290
+
291
+ sig { params(request_hash: String).void }
292
+ attr_writer :request_hash
293
+
294
+ sig { returns(T.nilable(String)) }
295
+ attr_reader :request_id
296
+
297
+ sig { params(request_id: String).void }
298
+ attr_writer :request_id
299
+
300
+ # Compatibility result ID for other write actions.
301
+ sig { returns(T.nilable(String)) }
302
+ attr_reader :result_id
303
+
304
+ sig { params(result_id: String).void }
305
+ attr_writer :result_id
306
+
307
+ # Dispatch timestamp when the write reached execution.
91
308
  sig { returns(T.nilable(Time)) }
92
309
  attr_reader :send_dispatched_at
93
310
 
94
311
  sig { params(send_dispatched_at: Time).void }
95
312
  attr_writer :send_dispatched_at
96
313
 
97
- sig { returns(T.nilable(String)) }
98
- attr_accessor :target_id
99
-
314
+ # Compatibility field for a confirmed tweet result ID.
100
315
  sig { returns(T.nilable(String)) }
101
316
  attr_reader :tweet_id
102
317
 
103
318
  sig { params(tweet_id: String).void }
104
319
  attr_writer :tweet_id
105
320
 
321
+ sig { returns(T.nilable(Time)) }
322
+ attr_reader :updated_at
323
+
324
+ sig { params(updated_at: Time).void }
325
+ attr_writer :updated_at
326
+
327
+ # Durable write lifecycle record. Poll statusUrl until terminal is true. Reusing
328
+ # the original Idempotency-Key returns this same record. Submit a new write only
329
+ # when safeToRetry is true, using a new key.
106
330
  sig do
107
331
  params(
108
- action: String,
332
+ id: String,
333
+ account:
334
+ T.nilable(
335
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Account::OrHash
336
+ ),
337
+ action:
338
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::OrSymbol,
339
+ billing:
340
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::OrHash,
109
341
  charged: T::Boolean,
110
342
  charged_credits: String,
111
- created_at: Time,
112
- media:
113
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::OrHash,
343
+ next_action:
344
+ T.nilable(
345
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::OrHash
346
+ ),
347
+ poll_after_ms: T.nilable(Integer),
348
+ request:
349
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Request::OrHash,
350
+ result:
351
+ T.nilable(
352
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::OrHash
353
+ ),
354
+ retryable: T::Boolean,
355
+ safe_to_retry: T::Boolean,
114
356
  send_dispatched: T::Boolean,
115
357
  status:
116
358
  XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::OrSymbol,
359
+ status_url: String,
360
+ success: T::Boolean,
361
+ target:
362
+ T.nilable(
363
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::OrHash
364
+ ),
365
+ target_id: T.nilable(String),
366
+ terminal: T::Boolean,
117
367
  write_action_id: String,
368
+ community_id: String,
369
+ community_name: String,
370
+ completed_at: Time,
118
371
  confirmation_attempts: Integer,
119
372
  confirmation_checked_at: Time,
120
- confirmation_source: T.nilable(String),
121
373
  confirmed_at: Time,
374
+ created_at: Time,
375
+ details: T::Hash[Symbol, T.anything],
376
+ error: String,
377
+ expires_at: Time,
378
+ idempotent: T::Boolean,
379
+ media: T::Hash[Symbol, T.anything],
380
+ media_id: String,
381
+ media_url: String,
122
382
  message: String,
123
383
  message_id: String,
384
+ request_hash: String,
385
+ request_id: String,
386
+ result_id: String,
124
387
  send_dispatched_at: Time,
125
- target_id: T.nilable(String),
126
388
  tweet_id: String,
127
- retryable: T::Boolean
389
+ updated_at: Time,
390
+ object: Symbol
128
391
  ).returns(T.attached_class)
129
392
  end
130
393
  def self.new(
394
+ id:,
395
+ # Connected account selected for the write.
396
+ account:,
131
397
  action:,
398
+ # plannedCredits is the approved maximum. chargedCredits comes from the settled
399
+ # credit ledger. Pending or failed writes are not charged.
400
+ billing:,
132
401
  charged:,
133
402
  charged_credits:,
134
- created_at:,
135
- media:,
403
+ # Exact follow-up an API client or agent should perform.
404
+ next_action:,
405
+ poll_after_ms:,
406
+ # Stable fingerprint and sanitized payload for replay checks.
407
+ request:,
408
+ # Confirmed result produced by the write, when available.
409
+ result:,
410
+ # True only when a new attempt can reasonably succeed.
411
+ retryable:,
412
+ # True only when no write was dispatched and a new idempotency key may be used.
413
+ safe_to_retry:,
136
414
  send_dispatched:,
137
415
  status:,
416
+ status_url:,
417
+ success:,
418
+ # Existing X resource targeted by the write, when applicable.
419
+ target:,
420
+ target_id:,
421
+ terminal:,
138
422
  write_action_id:,
423
+ # Compatibility field for a confirmed community ID.
424
+ community_id: nil,
425
+ # Confirmed community name when available.
426
+ community_name: nil,
427
+ completed_at: nil,
139
428
  confirmation_attempts: nil,
140
429
  confirmation_checked_at: nil,
141
- confirmation_source: nil,
142
430
  confirmed_at: nil,
431
+ created_at: nil,
432
+ # Structured recovery context for a failed write.
433
+ details: nil,
434
+ error: nil,
435
+ # Deadline for resolving a non-terminal write. This is not the Idempotency-Key
436
+ # retention deadline.
437
+ expires_at: nil,
438
+ idempotent: nil,
439
+ # Media count, kind, size, and billing details when used.
440
+ media: nil,
441
+ # Compatibility field for a confirmed media upload ID.
442
+ media_id: nil,
443
+ # Public media URL when the upload creates one.
444
+ media_url: nil,
143
445
  message: nil,
446
+ # Compatibility field for a confirmed direct message ID.
144
447
  message_id: nil,
448
+ request_hash: nil,
449
+ request_id: nil,
450
+ # Compatibility result ID for other write actions.
451
+ result_id: nil,
452
+ # Dispatch timestamp when the write reached execution.
145
453
  send_dispatched_at: nil,
146
- target_id: nil,
454
+ # Compatibility field for a confirmed tweet result ID.
147
455
  tweet_id: nil,
148
- retryable: false
456
+ updated_at: nil,
457
+ object: :x_write_action
149
458
  )
150
459
  end
151
460
 
152
461
  sig do
153
462
  override.returns(
154
463
  {
155
- action: String,
464
+ id: String,
465
+ account:
466
+ T.nilable(
467
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Account
468
+ ),
469
+ action:
470
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol,
471
+ billing:
472
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing,
156
473
  charged: T::Boolean,
157
474
  charged_credits: String,
158
- created_at: Time,
159
- media:
160
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media,
475
+ next_action:
476
+ T.nilable(
477
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction
478
+ ),
479
+ object: Symbol,
480
+ poll_after_ms: T.nilable(Integer),
481
+ request:
482
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Request,
483
+ result:
484
+ T.nilable(
485
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result
486
+ ),
161
487
  retryable: T::Boolean,
488
+ safe_to_retry: T::Boolean,
162
489
  send_dispatched: T::Boolean,
163
490
  status:
164
491
  XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol,
492
+ status_url: String,
493
+ success: T::Boolean,
494
+ target:
495
+ T.nilable(
496
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target
497
+ ),
498
+ target_id: T.nilable(String),
499
+ terminal: T::Boolean,
165
500
  write_action_id: String,
501
+ community_id: String,
502
+ community_name: String,
503
+ completed_at: Time,
166
504
  confirmation_attempts: Integer,
167
505
  confirmation_checked_at: Time,
168
- confirmation_source: T.nilable(String),
169
506
  confirmed_at: Time,
507
+ created_at: Time,
508
+ details: T::Hash[Symbol, T.anything],
509
+ error: String,
510
+ expires_at: Time,
511
+ idempotent: T::Boolean,
512
+ media: T::Hash[Symbol, T.anything],
513
+ media_id: String,
514
+ media_url: String,
170
515
  message: String,
171
516
  message_id: String,
517
+ request_hash: String,
518
+ request_id: String,
519
+ result_id: String,
172
520
  send_dispatched_at: Time,
173
- target_id: T.nilable(String),
174
- tweet_id: String
521
+ tweet_id: String,
522
+ updated_at: Time
175
523
  }
176
524
  )
177
525
  end
178
526
  def to_hash
179
527
  end
180
528
 
181
- class Media < XTwitterScraper::Internal::Type::BaseModel
529
+ class Account < XTwitterScraper::Internal::Type::BaseModel
182
530
  OrHash =
183
531
  T.type_alias do
184
532
  T.any(
185
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media,
533
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Account,
186
534
  XTwitterScraper::Internal::AnyHash
187
535
  )
188
536
  end
189
537
 
190
- sig { returns(Integer) }
191
- attr_accessor :count
538
+ sig { returns(String) }
539
+ attr_accessor :id
192
540
 
193
541
  sig { returns(String) }
194
- attr_accessor :credits
542
+ attr_accessor :username
543
+
544
+ # Connected account selected for the write.
545
+ sig { params(id: String, username: String).returns(T.attached_class) }
546
+ def self.new(id:, username:)
547
+ end
548
+
549
+ sig { override.returns({ id: String, username: String }) }
550
+ def to_hash
551
+ end
552
+ end
553
+
554
+ module Action
555
+ extend XTwitterScraper::Internal::Type::Enum
556
+
557
+ TaggedSymbol =
558
+ T.type_alias do
559
+ T.all(
560
+ Symbol,
561
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action
562
+ )
563
+ end
564
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
565
+
566
+ CREATE_TWEET =
567
+ T.let(
568
+ :create_tweet,
569
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
570
+ )
571
+ DELETE_TWEET =
572
+ T.let(
573
+ :delete_tweet,
574
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
575
+ )
576
+ LIKE =
577
+ T.let(
578
+ :like,
579
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
580
+ )
581
+ UNLIKE =
582
+ T.let(
583
+ :unlike,
584
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
585
+ )
586
+ RETWEET =
587
+ T.let(
588
+ :retweet,
589
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
590
+ )
591
+ UNRETWEET =
592
+ T.let(
593
+ :unretweet,
594
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
595
+ )
596
+ FOLLOW =
597
+ T.let(
598
+ :follow,
599
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
600
+ )
601
+ UNFOLLOW =
602
+ T.let(
603
+ :unfollow,
604
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
605
+ )
606
+ REMOVE_FOLLOWER =
607
+ T.let(
608
+ :remove_follower,
609
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
610
+ )
611
+ SEND_DM =
612
+ T.let(
613
+ :send_dm,
614
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
615
+ )
616
+ UPLOAD_MEDIA =
617
+ T.let(
618
+ :upload_media,
619
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
620
+ )
621
+ UPDATE_PROFILE =
622
+ T.let(
623
+ :update_profile,
624
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
625
+ )
626
+ UPDATE_AVATAR =
627
+ T.let(
628
+ :update_avatar,
629
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
630
+ )
631
+ UPDATE_BANNER =
632
+ T.let(
633
+ :update_banner,
634
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
635
+ )
636
+ CREATE_COMMUNITY =
637
+ T.let(
638
+ :create_community,
639
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
640
+ )
641
+ DELETE_COMMUNITY =
642
+ T.let(
643
+ :delete_community,
644
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
645
+ )
646
+ JOIN_COMMUNITY =
647
+ T.let(
648
+ :join_community,
649
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
650
+ )
651
+ LEAVE_COMMUNITY =
652
+ T.let(
653
+ :leave_community,
654
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
655
+ )
195
656
 
196
657
  sig do
197
- returns(
198
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol
658
+ override.returns(
659
+ T::Array[
660
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Action::TaggedSymbol
661
+ ]
199
662
  )
200
663
  end
201
- attr_accessor :kind
664
+ def self.values
665
+ end
666
+ end
667
+
668
+ class Billing < XTwitterScraper::Internal::Type::BaseModel
669
+ OrHash =
670
+ T.type_alias do
671
+ T.any(
672
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing,
673
+ XTwitterScraper::Internal::AnyHash
674
+ )
675
+ end
676
+
677
+ sig { returns(T::Boolean) }
678
+ attr_accessor :charged
679
+
680
+ sig { returns(String) }
681
+ attr_accessor :charged_credits
202
682
 
203
683
  sig { returns(String) }
204
- attr_accessor :total_bytes
684
+ attr_accessor :planned_credits
685
+
686
+ sig do
687
+ returns(
688
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
689
+ )
690
+ end
691
+ attr_accessor :status
692
+
693
+ # plannedCredits is the approved maximum. chargedCredits comes from the settled
694
+ # credit ledger. Pending or failed writes are not charged.
695
+ sig do
696
+ params(
697
+ charged: T::Boolean,
698
+ charged_credits: String,
699
+ planned_credits: String,
700
+ status:
701
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::OrSymbol
702
+ ).returns(T.attached_class)
703
+ end
704
+ def self.new(charged:, charged_credits:, planned_credits:, status:)
705
+ end
706
+
707
+ sig do
708
+ override.returns(
709
+ {
710
+ charged: T::Boolean,
711
+ charged_credits: String,
712
+ planned_credits: String,
713
+ status:
714
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
715
+ }
716
+ )
717
+ end
718
+ def to_hash
719
+ end
720
+
721
+ module Status
722
+ extend XTwitterScraper::Internal::Type::Enum
723
+
724
+ TaggedSymbol =
725
+ T.type_alias do
726
+ T.all(
727
+ Symbol,
728
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status
729
+ )
730
+ end
731
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
732
+
733
+ NOT_CHARGED =
734
+ T.let(
735
+ :not_charged,
736
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
737
+ )
738
+ PENDING =
739
+ T.let(
740
+ :pending,
741
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
742
+ )
743
+ CHARGED =
744
+ T.let(
745
+ :charged,
746
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
747
+ )
748
+ CHARGE_FAILED =
749
+ T.let(
750
+ :charge_failed,
751
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
752
+ )
753
+ REFUNDED =
754
+ T.let(
755
+ :refunded,
756
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
757
+ )
758
+
759
+ sig do
760
+ override.returns(
761
+ T::Array[
762
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Billing::Status::TaggedSymbol
763
+ ]
764
+ )
765
+ end
766
+ def self.values
767
+ end
768
+ end
769
+ end
770
+
771
+ class NextAction < XTwitterScraper::Internal::Type::BaseModel
772
+ OrHash =
773
+ T.type_alias do
774
+ T.any(
775
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction,
776
+ XTwitterScraper::Internal::AnyHash
777
+ )
778
+ end
779
+
780
+ sig do
781
+ returns(
782
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
783
+ )
784
+ end
785
+ attr_accessor :type
786
+
787
+ sig { returns(T.nilable(Integer)) }
788
+ attr_reader :after_ms
789
+
790
+ sig { params(after_ms: Integer).void }
791
+ attr_writer :after_ms
792
+
793
+ sig { returns(T.nilable(T::Boolean)) }
794
+ attr_reader :requires_new_idempotency_key
795
+
796
+ sig { params(requires_new_idempotency_key: T::Boolean).void }
797
+ attr_writer :requires_new_idempotency_key
798
+
799
+ sig { returns(T.nilable(String)) }
800
+ attr_reader :url
801
+
802
+ sig { params(url: String).void }
803
+ attr_writer :url
205
804
 
805
+ # Exact follow-up an API client or agent should perform.
206
806
  sig do
207
807
  params(
208
- count: Integer,
209
- credits: String,
210
- kind:
211
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::OrSymbol,
212
- total_bytes: String
808
+ type:
809
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::OrSymbol,
810
+ after_ms: Integer,
811
+ requires_new_idempotency_key: T::Boolean,
812
+ url: String
213
813
  ).returns(T.attached_class)
214
814
  end
215
- def self.new(count:, credits:, kind:, total_bytes:)
815
+ def self.new(
816
+ type:,
817
+ after_ms: nil,
818
+ requires_new_idempotency_key: nil,
819
+ url: nil
820
+ )
216
821
  end
217
822
 
218
823
  sig do
219
824
  override.returns(
220
825
  {
221
- count: Integer,
222
- credits: String,
223
- kind:
224
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol,
225
- total_bytes: String
826
+ type:
827
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol,
828
+ after_ms: Integer,
829
+ requires_new_idempotency_key: T::Boolean,
830
+ url: String
226
831
  }
227
832
  )
228
833
  end
229
834
  def to_hash
230
835
  end
231
836
 
232
- module Kind
837
+ module Type
233
838
  extend XTwitterScraper::Internal::Type::Enum
234
839
 
235
840
  TaggedSymbol =
236
841
  T.type_alias do
237
842
  T.all(
238
843
  Symbol,
239
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind
844
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type
240
845
  )
241
846
  end
242
847
  OrSymbol = T.type_alias { T.any(Symbol, String) }
243
848
 
244
- NONE =
849
+ POLL =
850
+ T.let(
851
+ :poll,
852
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
853
+ )
854
+ RETRY =
245
855
  T.let(
246
- :none,
247
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol
856
+ :retry,
857
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
248
858
  )
249
- IMAGE =
859
+ VERIFY_RESULT =
250
860
  T.let(
251
- :image,
252
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol
861
+ :verify_result,
862
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
253
863
  )
254
- VIDEO =
864
+ FIX_REQUEST =
255
865
  T.let(
256
- :video,
257
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol
866
+ :fix_request,
867
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
258
868
  )
259
869
 
260
870
  sig do
261
871
  override.returns(
262
872
  T::Array[
263
- XTwitterScraper::Models::X::WriteActionRetrieveResponse::Media::Kind::TaggedSymbol
873
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::NextAction::Type::TaggedSymbol
874
+ ]
875
+ )
876
+ end
877
+ def self.values
878
+ end
879
+ end
880
+ end
881
+
882
+ class Request < XTwitterScraper::Internal::Type::BaseModel
883
+ OrHash =
884
+ T.type_alias do
885
+ T.any(
886
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Request,
887
+ XTwitterScraper::Internal::AnyHash
888
+ )
889
+ end
890
+
891
+ # Stable hash of account, action, target, and payload.
892
+ sig { returns(T.nilable(String)) }
893
+ attr_accessor :hash_
894
+
895
+ # Exact sanitized payload dispatched for this action.
896
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
897
+ attr_accessor :payload
898
+
899
+ # Stable fingerprint and sanitized payload for replay checks.
900
+ sig do
901
+ params(
902
+ hash_: T.nilable(String),
903
+ payload: T.nilable(T::Hash[Symbol, T.anything])
904
+ ).returns(T.attached_class)
905
+ end
906
+ def self.new(
907
+ # Stable hash of account, action, target, and payload.
908
+ hash_:,
909
+ # Exact sanitized payload dispatched for this action.
910
+ payload:
911
+ )
912
+ end
913
+
914
+ sig do
915
+ override.returns(
916
+ {
917
+ hash_: T.nilable(String),
918
+ payload: T.nilable(T::Hash[Symbol, T.anything])
919
+ }
920
+ )
921
+ end
922
+ def to_hash
923
+ end
924
+ end
925
+
926
+ class Result < XTwitterScraper::Internal::Type::BaseModel
927
+ OrHash =
928
+ T.type_alias do
929
+ T.any(
930
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result,
931
+ XTwitterScraper::Internal::AnyHash
932
+ )
933
+ end
934
+
935
+ sig { returns(T.nilable(String)) }
936
+ attr_reader :id
937
+
938
+ sig { params(id: String).void }
939
+ attr_writer :id
940
+
941
+ sig { returns(T.nilable(String)) }
942
+ attr_reader :state
943
+
944
+ sig { params(state: String).void }
945
+ attr_writer :state
946
+
947
+ sig do
948
+ returns(
949
+ T.nilable(
950
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
951
+ )
952
+ )
953
+ end
954
+ attr_reader :type
955
+
956
+ sig do
957
+ params(
958
+ type:
959
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::OrSymbol
960
+ ).void
961
+ end
962
+ attr_writer :type
963
+
964
+ # Confirmed result produced by the write, when available.
965
+ sig do
966
+ params(
967
+ id: String,
968
+ state: String,
969
+ type:
970
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::OrSymbol
971
+ ).returns(T.attached_class)
972
+ end
973
+ def self.new(id: nil, state: nil, type: nil)
974
+ end
975
+
976
+ sig do
977
+ override.returns(
978
+ {
979
+ id: String,
980
+ state: String,
981
+ type:
982
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
983
+ }
984
+ )
985
+ end
986
+ def to_hash
987
+ end
988
+
989
+ module Type
990
+ extend XTwitterScraper::Internal::Type::Enum
991
+
992
+ TaggedSymbol =
993
+ T.type_alias do
994
+ T.all(
995
+ Symbol,
996
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type
997
+ )
998
+ end
999
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1000
+
1001
+ TWEET =
1002
+ T.let(
1003
+ :tweet,
1004
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
1005
+ )
1006
+ DIRECT_MESSAGE =
1007
+ T.let(
1008
+ :direct_message,
1009
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
1010
+ )
1011
+ MEDIA =
1012
+ T.let(
1013
+ :media,
1014
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
1015
+ )
1016
+ COMMUNITY =
1017
+ T.let(
1018
+ :community,
1019
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
1020
+ )
1021
+ STATE_CHANGE =
1022
+ T.let(
1023
+ :state_change,
1024
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
1025
+ )
1026
+
1027
+ sig do
1028
+ override.returns(
1029
+ T::Array[
1030
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Result::Type::TaggedSymbol
264
1031
  ]
265
1032
  )
266
1033
  end
@@ -281,6 +1048,21 @@ module XTwitterScraper
281
1048
  end
282
1049
  OrSymbol = T.type_alias { T.any(Symbol, String) }
283
1050
 
1051
+ ACCEPTED =
1052
+ T.let(
1053
+ :accepted,
1054
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol
1055
+ )
1056
+ DISPATCHING =
1057
+ T.let(
1058
+ :dispatching,
1059
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol
1060
+ )
1061
+ PENDING_CONFIRMATION =
1062
+ T.let(
1063
+ :pending_confirmation,
1064
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol
1065
+ )
284
1066
  SUCCESS =
285
1067
  T.let(
286
1068
  :success,
@@ -291,9 +1073,9 @@ module XTwitterScraper
291
1073
  :failed,
292
1074
  XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol
293
1075
  )
294
- PENDING_CONFIRMATION =
1076
+ EXPIRED =
295
1077
  T.let(
296
- :pending_confirmation,
1078
+ :expired,
297
1079
  XTwitterScraper::Models::X::WriteActionRetrieveResponse::Status::TaggedSymbol
298
1080
  )
299
1081
 
@@ -307,6 +1089,88 @@ module XTwitterScraper
307
1089
  def self.values
308
1090
  end
309
1091
  end
1092
+
1093
+ class Target < XTwitterScraper::Internal::Type::BaseModel
1094
+ OrHash =
1095
+ T.type_alias do
1096
+ T.any(
1097
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target,
1098
+ XTwitterScraper::Internal::AnyHash
1099
+ )
1100
+ end
1101
+
1102
+ sig { returns(String) }
1103
+ attr_accessor :id
1104
+
1105
+ sig do
1106
+ returns(
1107
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1108
+ )
1109
+ end
1110
+ attr_accessor :type
1111
+
1112
+ # Existing X resource targeted by the write, when applicable.
1113
+ sig do
1114
+ params(
1115
+ id: String,
1116
+ type:
1117
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::OrSymbol
1118
+ ).returns(T.attached_class)
1119
+ end
1120
+ def self.new(id:, type:)
1121
+ end
1122
+
1123
+ sig do
1124
+ override.returns(
1125
+ {
1126
+ id: String,
1127
+ type:
1128
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1129
+ }
1130
+ )
1131
+ end
1132
+ def to_hash
1133
+ end
1134
+
1135
+ module Type
1136
+ extend XTwitterScraper::Internal::Type::Enum
1137
+
1138
+ TaggedSymbol =
1139
+ T.type_alias do
1140
+ T.all(
1141
+ Symbol,
1142
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type
1143
+ )
1144
+ end
1145
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1146
+
1147
+ TWEET =
1148
+ T.let(
1149
+ :tweet,
1150
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1151
+ )
1152
+ USER =
1153
+ T.let(
1154
+ :user,
1155
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1156
+ )
1157
+ COMMUNITY =
1158
+ T.let(
1159
+ :community,
1160
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1161
+ )
1162
+
1163
+ sig do
1164
+ override.returns(
1165
+ T::Array[
1166
+ XTwitterScraper::Models::X::WriteActionRetrieveResponse::Target::Type::TaggedSymbol
1167
+ ]
1168
+ )
1169
+ end
1170
+ def self.values
1171
+ end
1172
+ end
1173
+ end
310
1174
  end
311
1175
  end
312
1176
  end