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