x-twitter-scraper 0.5.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +1 -1
  4. data/lib/x_twitter_scraper/internal/type/union.rb +25 -9
  5. data/lib/x_twitter_scraper/models/compose_create_response.rb +62 -1
  6. data/lib/x_twitter_scraper/models/content_disclosure.rb +1 -9
  7. data/lib/x_twitter_scraper/models/embedded_tweet.rb +389 -1
  8. data/lib/x_twitter_scraper/models/paginated_tweets.rb +4 -5
  9. data/lib/x_twitter_scraper/models/radar_item.rb +144 -7
  10. data/lib/x_twitter_scraper/models/search_tweet.rb +371 -1
  11. data/lib/x_twitter_scraper/models/support/ticket_list_response.rb +30 -17
  12. data/lib/x_twitter_scraper/models/support/ticket_retrieve_response.rb +49 -24
  13. data/lib/x_twitter_scraper/models/support/ticket_update_response.rb +18 -6
  14. data/lib/x_twitter_scraper/models/trend_list_response.rb +28 -1
  15. data/lib/x_twitter_scraper/models/tweet_media.rb +213 -1
  16. data/lib/x_twitter_scraper/models/user_profile.rb +211 -21
  17. data/lib/x_twitter_scraper/models/x/account_connection_attempt_retrieve_params.rb +22 -0
  18. data/lib/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rb +224 -0
  19. data/lib/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rb +4 -4
  20. data/lib/x_twitter_scraper/models/x/account_create_params.rb +9 -9
  21. data/lib/x_twitter_scraper/models/x/account_create_response.rb +146 -54
  22. data/lib/x_twitter_scraper/models/x/account_reauth_params.rb +2 -2
  23. data/lib/x_twitter_scraper/models/x/account_reauth_response.rb +4 -4
  24. data/lib/x_twitter_scraper/models/x/communities/tweet_list_by_community_params.rb +3 -5
  25. data/lib/x_twitter_scraper/models/x/communities/tweet_list_params.rb +3 -5
  26. data/lib/x_twitter_scraper/models/x/community_retrieve_info_response.rb +1 -17
  27. data/lib/x_twitter_scraper/models/x/community_retrieve_search_params.rb +3 -5
  28. data/lib/x_twitter_scraper/models/x/list_retrieve_tweets_params.rb +3 -5
  29. data/lib/x_twitter_scraper/models/x/tweet_author.rb +14 -1
  30. data/lib/x_twitter_scraper/models/x/tweet_detail.rb +373 -1
  31. data/lib/x_twitter_scraper/models/x/tweet_get_quotes_params.rb +3 -5
  32. data/lib/x_twitter_scraper/models/x/tweet_get_replies_params.rb +34 -6
  33. data/lib/x_twitter_scraper/models/x/tweet_get_replies_response.rb +345 -0
  34. data/lib/x_twitter_scraper/models/x/tweet_get_thread_params.rb +3 -5
  35. data/lib/x_twitter_scraper/models/x/user_retrieve_likes_params.rb +3 -5
  36. data/lib/x_twitter_scraper/models/x/user_retrieve_media_params.rb +3 -5
  37. data/lib/x_twitter_scraper/models/x/user_retrieve_mentions_params.rb +3 -5
  38. data/lib/x_twitter_scraper/models/x/user_retrieve_replies_params.rb +3 -5
  39. data/lib/x_twitter_scraper/models/x/user_retrieve_tweets_params.rb +3 -5
  40. data/lib/x_twitter_scraper/models/x/x_account.rb +9 -9
  41. data/lib/x_twitter_scraper/models/x_get_article_response.rb +1 -7
  42. data/lib/x_twitter_scraper/models/x_get_trends_response.rb +28 -1
  43. data/lib/x_twitter_scraper/resources/compose.rb +4 -4
  44. data/lib/x_twitter_scraper/resources/x/account_connection_attempts.rb +37 -0
  45. data/lib/x_twitter_scraper/resources/x/accounts.rb +5 -5
  46. data/lib/x_twitter_scraper/resources/x/communities/tweets.rb +2 -2
  47. data/lib/x_twitter_scraper/resources/x/communities.rb +1 -1
  48. data/lib/x_twitter_scraper/resources/x/lists.rb +1 -1
  49. data/lib/x_twitter_scraper/resources/x/tweets.rb +14 -11
  50. data/lib/x_twitter_scraper/resources/x/users.rb +5 -5
  51. data/lib/x_twitter_scraper/resources/x.rb +6 -0
  52. data/lib/x_twitter_scraper/version.rb +1 -1
  53. data/lib/x_twitter_scraper.rb +5 -1
  54. data/rbi/x_twitter_scraper/models/compose_create_response.rbi +142 -0
  55. data/rbi/x_twitter_scraper/models/content_disclosure.rbi +1 -15
  56. data/rbi/x_twitter_scraper/models/embedded_tweet.rbi +708 -3
  57. data/rbi/x_twitter_scraper/models/paginated_tweets.rbi +4 -5
  58. data/rbi/x_twitter_scraper/models/radar_item.rbi +245 -8
  59. data/rbi/x_twitter_scraper/models/search_tweet.rbi +674 -3
  60. data/rbi/x_twitter_scraper/models/support/ticket_list_response.rbi +75 -55
  61. data/rbi/x_twitter_scraper/models/support/ticket_retrieve_response.rbi +129 -87
  62. data/rbi/x_twitter_scraper/models/support/ticket_update_response.rbi +62 -13
  63. data/rbi/x_twitter_scraper/models/trend_list_response.rbi +40 -3
  64. data/rbi/x_twitter_scraper/models/tweet_media.rbi +313 -3
  65. data/rbi/x_twitter_scraper/models/user_profile.rbi +340 -29
  66. data/rbi/x_twitter_scraper/models/x/account_connection_attempt_retrieve_params.rbi +40 -0
  67. data/rbi/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rbi +295 -0
  68. data/rbi/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rbi +6 -6
  69. data/rbi/x_twitter_scraper/models/x/account_create_params.rbi +8 -11
  70. data/rbi/x_twitter_scraper/models/x/account_create_response.rbi +232 -91
  71. data/rbi/x_twitter_scraper/models/x/account_reauth_params.rbi +2 -2
  72. data/rbi/x_twitter_scraper/models/x/account_reauth_response.rbi +6 -6
  73. data/rbi/x_twitter_scraper/models/x/communities/tweet_list_by_community_params.rbi +4 -8
  74. data/rbi/x_twitter_scraper/models/x/communities/tweet_list_params.rbi +4 -8
  75. data/rbi/x_twitter_scraper/models/x/community_retrieve_info_response.rbi +0 -22
  76. data/rbi/x_twitter_scraper/models/x/community_retrieve_search_params.rbi +4 -8
  77. data/rbi/x_twitter_scraper/models/x/list_retrieve_tweets_params.rbi +4 -8
  78. data/rbi/x_twitter_scraper/models/x/tweet_author.rbi +13 -3
  79. data/rbi/x_twitter_scraper/models/x/tweet_detail.rbi +690 -3
  80. data/rbi/x_twitter_scraper/models/x/tweet_get_quotes_params.rbi +4 -8
  81. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_params.rbi +68 -8
  82. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_response.rbi +527 -0
  83. data/rbi/x_twitter_scraper/models/x/tweet_get_thread_params.rbi +4 -8
  84. data/rbi/x_twitter_scraper/models/x/user_retrieve_likes_params.rbi +4 -8
  85. data/rbi/x_twitter_scraper/models/x/user_retrieve_media_params.rbi +4 -8
  86. data/rbi/x_twitter_scraper/models/x/user_retrieve_mentions_params.rbi +4 -8
  87. data/rbi/x_twitter_scraper/models/x/user_retrieve_replies_params.rbi +4 -8
  88. data/rbi/x_twitter_scraper/models/x/user_retrieve_tweets_params.rbi +4 -8
  89. data/rbi/x_twitter_scraper/models/x/x_account.rbi +12 -12
  90. data/rbi/x_twitter_scraper/models/x_get_article_response.rbi +0 -9
  91. data/rbi/x_twitter_scraper/models/x_get_trends_response.rbi +40 -3
  92. data/rbi/x_twitter_scraper/resources/compose.rbi +4 -4
  93. data/rbi/x_twitter_scraper/resources/x/account_connection_attempts.rbi +33 -0
  94. data/rbi/x_twitter_scraper/resources/x/accounts.rbi +5 -5
  95. data/rbi/x_twitter_scraper/resources/x/communities/tweets.rbi +4 -8
  96. data/rbi/x_twitter_scraper/resources/x/communities.rbi +2 -4
  97. data/rbi/x_twitter_scraper/resources/x/lists.rbi +2 -4
  98. data/rbi/x_twitter_scraper/resources/x/tweets.rbi +20 -18
  99. data/rbi/x_twitter_scraper/resources/x/users.rbi +10 -20
  100. data/rbi/x_twitter_scraper/resources/x.rbi +4 -0
  101. data/sig/x_twitter_scraper/models/compose_create_response.rbs +60 -0
  102. data/sig/x_twitter_scraper/models/content_disclosure.rbs +1 -11
  103. data/sig/x_twitter_scraper/models/embedded_tweet.rbs +343 -62
  104. data/sig/x_twitter_scraper/models/radar_item.rbs +100 -4
  105. data/sig/x_twitter_scraper/models/search_tweet.rbs +333 -70
  106. data/sig/x_twitter_scraper/models/support/ticket_list_response.rbs +29 -32
  107. data/sig/x_twitter_scraper/models/support/ticket_retrieve_response.rbs +49 -48
  108. data/sig/x_twitter_scraper/models/support/ticket_update_response.rbs +25 -7
  109. data/sig/x_twitter_scraper/models/trend_list_response.rbs +16 -20
  110. data/sig/x_twitter_scraper/models/tweet_media.rbs +146 -15
  111. data/sig/x_twitter_scraper/models/user_profile.rbs +164 -86
  112. data/sig/x_twitter_scraper/models/x/account_connection_attempt_retrieve_params.rbs +25 -0
  113. data/sig/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rbs +199 -0
  114. data/sig/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rbs +5 -5
  115. data/sig/x_twitter_scraper/models/x/account_create_params.rbs +6 -8
  116. data/sig/x_twitter_scraper/models/x/account_create_response.rbs +144 -59
  117. data/sig/x_twitter_scraper/models/x/account_reauth_response.rbs +5 -5
  118. data/sig/x_twitter_scraper/models/x/community_retrieve_info_response.rbs +0 -14
  119. data/sig/x_twitter_scraper/models/x/tweet_author.rbs +11 -3
  120. data/sig/x_twitter_scraper/models/x/tweet_detail.rbs +333 -70
  121. data/sig/x_twitter_scraper/models/x/tweet_get_replies_params.rbs +26 -0
  122. data/sig/x_twitter_scraper/models/x/tweet_get_replies_response.rbs +274 -0
  123. data/sig/x_twitter_scraper/models/x_get_article_response.rbs +0 -7
  124. data/sig/x_twitter_scraper/models/x_get_trends_response.rbs +25 -3
  125. data/sig/x_twitter_scraper/resources/x/account_connection_attempts.rbs +14 -0
  126. data/sig/x_twitter_scraper/resources/x/accounts.rbs +2 -2
  127. data/sig/x_twitter_scraper/resources/x/tweets.rbs +3 -1
  128. data/sig/x_twitter_scraper/resources/x.rbs +2 -0
  129. metadata +14 -2
@@ -7,128 +7,269 @@
7
7
  module XTwitterScraper
8
8
  module Models
9
9
  module X
10
- class AccountCreateResponse < XTwitterScraper::Internal::Type::BaseModel
11
- OrHash =
10
+ # Sanitized X account summary returned by connect and reauth.
11
+ module AccountCreateResponse
12
+ extend XTwitterScraper::Internal::Type::Union
13
+
14
+ Variants =
12
15
  T.type_alias do
13
16
  T.any(
14
- XTwitterScraper::Models::X::AccountCreateResponse,
15
- XTwitterScraper::Internal::AnyHash
17
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount,
18
+ XTwitterScraper::Models::X::AccountCreateResponse::XAccountConnectionAttemptPending,
19
+ XTwitterScraper::Models::X::AccountCreateResponse::XAccountConnectionChallenge
16
20
  )
17
21
  end
18
22
 
19
- sig { returns(String) }
20
- attr_accessor :id
23
+ class SanitizedXAccount < XTwitterScraper::Internal::Type::BaseModel
24
+ OrHash =
25
+ T.type_alias do
26
+ T.any(
27
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount,
28
+ XTwitterScraper::Internal::AnyHash
29
+ )
30
+ end
21
31
 
22
- sig { returns(Time) }
23
- attr_accessor :created_at
32
+ sig { returns(String) }
33
+ attr_accessor :id
24
34
 
25
- sig do
26
- returns(
27
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
28
- )
29
- end
30
- attr_accessor :health
35
+ sig { returns(Time) }
36
+ attr_accessor :created_at
31
37
 
32
- sig { returns(String) }
33
- attr_accessor :status
38
+ sig do
39
+ returns(
40
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
41
+ )
42
+ end
43
+ attr_accessor :health
34
44
 
35
- sig { returns(String) }
36
- attr_accessor :x_user_id
45
+ sig { returns(Symbol) }
46
+ attr_accessor :status
37
47
 
38
- sig { returns(String) }
39
- attr_accessor :x_username
48
+ sig { returns(String) }
49
+ attr_accessor :x_user_id
40
50
 
41
- # Sanitized X account summary returned by connect and reauth.
42
- sig do
43
- params(
44
- id: String,
45
- created_at: Time,
46
- health:
47
- XTwitterScraper::Models::X::AccountCreateResponse::Health::OrSymbol,
48
- status: String,
49
- x_user_id: String,
50
- x_username: String
51
- ).returns(T.attached_class)
52
- end
53
- def self.new(
54
- id:,
55
- created_at:,
56
- health:,
57
- status:,
58
- x_user_id:,
59
- x_username:
60
- )
61
- end
51
+ sig { returns(String) }
52
+ attr_accessor :x_username
62
53
 
63
- sig do
64
- override.returns(
65
- {
54
+ # Sanitized X account summary returned by connect and reauth.
55
+ sig do
56
+ params(
66
57
  id: String,
67
58
  created_at: Time,
68
59
  health:
69
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol,
70
- status: String,
60
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::OrSymbol,
71
61
  x_user_id: String,
72
- x_username: String
73
- }
62
+ x_username: String,
63
+ status: Symbol
64
+ ).returns(T.attached_class)
65
+ end
66
+ def self.new(
67
+ id:,
68
+ created_at:,
69
+ health:,
70
+ x_user_id:,
71
+ x_username:,
72
+ status: :active
74
73
  )
75
- end
76
- def to_hash
77
- end
74
+ end
78
75
 
79
- module Health
80
- extend XTwitterScraper::Internal::Type::Enum
76
+ sig do
77
+ override.returns(
78
+ {
79
+ id: String,
80
+ created_at: Time,
81
+ health:
82
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol,
83
+ status: Symbol,
84
+ x_user_id: String,
85
+ x_username: String
86
+ }
87
+ )
88
+ end
89
+ def to_hash
90
+ end
91
+
92
+ module Health
93
+ extend XTwitterScraper::Internal::Type::Enum
94
+
95
+ TaggedSymbol =
96
+ T.type_alias do
97
+ T.all(
98
+ Symbol,
99
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health
100
+ )
101
+ end
102
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
103
+
104
+ HEALTHY =
105
+ T.let(
106
+ :healthy,
107
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
108
+ )
109
+ LOCKED =
110
+ T.let(
111
+ :locked,
112
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
113
+ )
114
+ NEEDS_REAUTH =
115
+ T.let(
116
+ :needsReauth,
117
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
118
+ )
119
+ RECOVERING =
120
+ T.let(
121
+ :recovering,
122
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
123
+ )
124
+ SUSPENDED =
125
+ T.let(
126
+ :suspended,
127
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
128
+ )
129
+ TEMPORARY_ISSUE =
130
+ T.let(
131
+ :temporaryIssue,
132
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
133
+ )
134
+
135
+ sig do
136
+ override.returns(
137
+ T::Array[
138
+ XTwitterScraper::Models::X::AccountCreateResponse::SanitizedXAccount::Health::TaggedSymbol
139
+ ]
140
+ )
141
+ end
142
+ def self.values
143
+ end
144
+ end
145
+ end
81
146
 
82
- TaggedSymbol =
147
+ class XAccountConnectionAttemptPending < XTwitterScraper::Internal::Type::BaseModel
148
+ OrHash =
83
149
  T.type_alias do
84
- T.all(
85
- Symbol,
86
- XTwitterScraper::Models::X::AccountCreateResponse::Health
150
+ T.any(
151
+ XTwitterScraper::Models::X::AccountCreateResponse::XAccountConnectionAttemptPending,
152
+ XTwitterScraper::Internal::AnyHash
87
153
  )
88
154
  end
89
- OrSymbol = T.type_alias { T.any(Symbol, String) }
90
155
 
91
- HEALTHY =
92
- T.let(
93
- :healthy,
94
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
95
- )
96
- LOCKED =
97
- T.let(
98
- :locked,
99
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
100
- )
101
- NEEDS_REAUTH =
102
- T.let(
103
- :needsReauth,
104
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
105
- )
106
- RECOVERING =
107
- T.let(
108
- :recovering,
109
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
110
- )
111
- SUSPENDED =
112
- T.let(
113
- :suspended,
114
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
115
- )
116
- TEMPORARY_ISSUE =
117
- T.let(
118
- :temporaryIssue,
119
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
156
+ sig { returns(String) }
157
+ attr_accessor :id
158
+
159
+ sig { returns(Symbol) }
160
+ attr_accessor :object
161
+
162
+ sig { returns(Integer) }
163
+ attr_accessor :poll_after_ms
164
+
165
+ sig { returns(Symbol) }
166
+ attr_accessor :status
167
+
168
+ # The connection is still in progress.
169
+ sig do
170
+ params(
171
+ id: String,
172
+ poll_after_ms: Integer,
173
+ object: Symbol,
174
+ status: Symbol
175
+ ).returns(T.attached_class)
176
+ end
177
+ def self.new(
178
+ id:,
179
+ poll_after_ms:,
180
+ object: :x_account_connection_attempt,
181
+ status: :pending
182
+ )
183
+ end
184
+
185
+ sig do
186
+ override.returns(
187
+ {
188
+ id: String,
189
+ object: Symbol,
190
+ poll_after_ms: Integer,
191
+ status: Symbol
192
+ }
120
193
  )
194
+ end
195
+ def to_hash
196
+ end
197
+ end
198
+
199
+ class XAccountConnectionChallenge < XTwitterScraper::Internal::Type::BaseModel
200
+ OrHash =
201
+ T.type_alias do
202
+ T.any(
203
+ XTwitterScraper::Models::X::AccountCreateResponse::XAccountConnectionChallenge,
204
+ XTwitterScraper::Internal::AnyHash
205
+ )
206
+ end
207
+
208
+ sig { returns(String) }
209
+ attr_accessor :id
210
+
211
+ sig { returns(Time) }
212
+ attr_accessor :expires_at
213
+
214
+ sig { returns(String) }
215
+ attr_accessor :message
216
+
217
+ sig { returns(Symbol) }
218
+ attr_accessor :object
219
+
220
+ sig { returns(Symbol) }
221
+ attr_accessor :status
222
+
223
+ sig { returns(String) }
224
+ attr_accessor :username
225
+
226
+ # Resumable account connection challenge. Submit the email code to finish the same
227
+ # connection attempt.
228
+ sig do
229
+ params(
230
+ id: String,
231
+ expires_at: Time,
232
+ message: String,
233
+ username: String,
234
+ object: Symbol,
235
+ status: Symbol
236
+ ).returns(T.attached_class)
237
+ end
238
+ def self.new(
239
+ id:,
240
+ expires_at:,
241
+ message:,
242
+ username:,
243
+ object: :x_account_connection_challenge,
244
+ status: :requires_email_code
245
+ )
246
+ end
121
247
 
122
248
  sig do
123
249
  override.returns(
124
- T::Array[
125
- XTwitterScraper::Models::X::AccountCreateResponse::Health::TaggedSymbol
126
- ]
250
+ {
251
+ id: String,
252
+ expires_at: Time,
253
+ message: String,
254
+ object: Symbol,
255
+ status: Symbol,
256
+ username: String
257
+ }
127
258
  )
128
259
  end
129
- def self.values
260
+ def to_hash
130
261
  end
131
262
  end
263
+
264
+ sig do
265
+ override.returns(
266
+ T::Array[
267
+ XTwitterScraper::Models::X::AccountCreateResponse::Variants
268
+ ]
269
+ )
270
+ end
271
+ def self.variants
272
+ end
132
273
  end
133
274
  end
134
275
  end
@@ -33,7 +33,7 @@ module XTwitterScraper
33
33
  sig { params(email: String).void }
34
34
  attr_writer :email
35
35
 
36
- # TOTP secret for 2FA re-authentication
36
+ # Replacement Authenticator App TOTP secret. Omit it to reuse the saved secret.
37
37
  sig { returns(T.nilable(String)) }
38
38
  attr_reader :totp_secret
39
39
 
@@ -55,7 +55,7 @@ module XTwitterScraper
55
55
  password:,
56
56
  # Email for the X account (updates stored email)
57
57
  email: nil,
58
- # TOTP secret for 2FA re-authentication
58
+ # Replacement Authenticator App TOTP secret. Omit it to reuse the saved secret.
59
59
  totp_secret: nil,
60
60
  request_options: {}
61
61
  )
@@ -29,7 +29,7 @@ module XTwitterScraper
29
29
  end
30
30
  attr_accessor :health
31
31
 
32
- sig { returns(String) }
32
+ sig { returns(Symbol) }
33
33
  attr_accessor :status
34
34
 
35
35
  sig { returns(String) }
@@ -45,18 +45,18 @@ module XTwitterScraper
45
45
  created_at: Time,
46
46
  health:
47
47
  XTwitterScraper::Models::X::AccountReauthResponse::Health::OrSymbol,
48
- status: String,
49
48
  x_user_id: String,
50
- x_username: String
49
+ x_username: String,
50
+ status: Symbol
51
51
  ).returns(T.attached_class)
52
52
  end
53
53
  def self.new(
54
54
  id:,
55
55
  created_at:,
56
56
  health:,
57
- status:,
58
57
  x_user_id:,
59
- x_username:
58
+ x_username:,
59
+ status: :active
60
60
  )
61
61
  end
62
62
 
@@ -67,7 +67,7 @@ module XTwitterScraper
67
67
  created_at: Time,
68
68
  health:
69
69
  XTwitterScraper::Models::X::AccountReauthResponse::Health::TaggedSymbol,
70
- status: String,
70
+ status: Symbol,
71
71
  x_user_id: String,
72
72
  x_username: String
73
73
  }
@@ -30,10 +30,8 @@ module XTwitterScraper
30
30
  sig { params(cursor: String).void }
31
31
  attr_writer :cursor
32
32
 
33
- # Maximum items requested from this page (1-100, default 20). The response can
34
- # contain fewer items because the source returned fewer, filters removed items, or
35
- # remaining credits cover fewer results. Keep requesting next_cursor while
36
- # has_next_page is true, even when a page is empty. The deprecated limit and count
33
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
34
+ # results. Continue while has_next_page is true. Deprecated limit and count
37
35
  # aliases remain accepted.
38
36
  sig { returns(T.nilable(Integer)) }
39
37
  attr_reader :page_size
@@ -53,10 +51,8 @@ module XTwitterScraper
53
51
  id:,
54
52
  # Pagination cursor for community tweets
55
53
  cursor: nil,
56
- # Maximum items requested from this page (1-100, default 20). The response can
57
- # contain fewer items because the source returned fewer, filters removed items, or
58
- # remaining credits cover fewer results. Keep requesting next_cursor while
59
- # has_next_page is true, even when a page is empty. The deprecated limit and count
54
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
55
+ # results. Continue while has_next_page is true. Deprecated limit and count
60
56
  # aliases remain accepted.
61
57
  page_size: nil,
62
58
  request_options: {}
@@ -35,10 +35,8 @@ module XTwitterScraper
35
35
  sig { params(cursor: String).void }
36
36
  attr_writer :cursor
37
37
 
38
- # Maximum items requested from this page (1-100, default 20). The response can
39
- # contain fewer items because the source returned fewer, filters removed items, or
40
- # remaining credits cover fewer results. Keep requesting next_cursor while
41
- # has_next_page is true, even when a page is empty. The deprecated limit and count
38
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
39
+ # results. Continue while has_next_page is true. Deprecated limit and count
42
40
  # aliases remain accepted.
43
41
  sig { returns(T.nilable(Integer)) }
44
42
  attr_reader :page_size
@@ -82,10 +80,8 @@ module XTwitterScraper
82
80
  q:,
83
81
  # Pagination cursor for community results
84
82
  cursor: nil,
85
- # Maximum items requested from this page (1-100, default 20). The response can
86
- # contain fewer items because the source returned fewer, filters removed items, or
87
- # remaining credits cover fewer results. Keep requesting next_cursor while
88
- # has_next_page is true, even when a page is empty. The deprecated limit and count
83
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
84
+ # results. Continue while has_next_page is true. Deprecated limit and count
89
85
  # aliases remain accepted.
90
86
  page_size: nil,
91
87
  # Sort order for community results (Latest or Top)
@@ -113,13 +113,6 @@ module XTwitterScraper
113
113
  sig { params(invites_policy: String).void }
114
114
  attr_writer :invites_policy
115
115
 
116
- # Whether the authenticated viewer is a member
117
- sig { returns(T.nilable(T::Boolean)) }
118
- attr_reader :is_member
119
-
120
- sig { params(is_member: T::Boolean).void }
121
- attr_writer :is_member
122
-
123
116
  # Whether the community is marked sensitive
124
117
  sig { returns(T.nilable(T::Boolean)) }
125
118
  attr_reader :is_nsfw
@@ -173,13 +166,6 @@ module XTwitterScraper
173
166
  end
174
167
  attr_writer :primary_topic
175
168
 
176
- # Authenticated viewer's community role
177
- sig { returns(T.nilable(String)) }
178
- attr_reader :role
179
-
180
- sig { params(role: String).void }
181
- attr_writer :role
182
-
183
169
  # Community rules
184
170
  sig do
185
171
  returns(
@@ -212,7 +198,6 @@ module XTwitterScraper
212
198
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::Creator::OrHash,
213
199
  description: String,
214
200
  invites_policy: String,
215
- is_member: T::Boolean,
216
201
  is_nsfw: T::Boolean,
217
202
  join_policy: String,
218
203
  member_count: Integer,
@@ -220,7 +205,6 @@ module XTwitterScraper
220
205
  name: String,
221
206
  primary_topic:
222
207
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::PrimaryTopic::OrHash,
223
- role: String,
224
208
  rules:
225
209
  T::Array[
226
210
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::Rule::OrHash
@@ -239,8 +223,6 @@ module XTwitterScraper
239
223
  description: nil,
240
224
  # Invitation policy
241
225
  invites_policy: nil,
242
- # Whether the authenticated viewer is a member
243
- is_member: nil,
244
226
  # Whether the community is marked sensitive
245
227
  is_nsfw: nil,
246
228
  # Join policy (open or restricted)
@@ -253,8 +235,6 @@ module XTwitterScraper
253
235
  name: nil,
254
236
  # Primary topic
255
237
  primary_topic: nil,
256
- # Authenticated viewer's community role
257
- role: nil,
258
238
  # Community rules
259
239
  rules: nil
260
240
  )
@@ -270,7 +250,6 @@ module XTwitterScraper
270
250
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::Creator,
271
251
  description: String,
272
252
  invites_policy: String,
273
- is_member: T::Boolean,
274
253
  is_nsfw: T::Boolean,
275
254
  join_policy: String,
276
255
  member_count: Integer,
@@ -278,7 +257,6 @@ module XTwitterScraper
278
257
  name: String,
279
258
  primary_topic:
280
259
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::PrimaryTopic,
281
- role: String,
282
260
  rules:
283
261
  T::Array[
284
262
  XTwitterScraper::Models::X::CommunityRetrieveInfoResponse::Community::Rule
@@ -34,10 +34,8 @@ module XTwitterScraper
34
34
  sig { params(cursor: String).void }
35
35
  attr_writer :cursor
36
36
 
37
- # Maximum items requested from this page (1-100, default 20). The response can
38
- # contain fewer items because the source returned fewer, filters removed items, or
39
- # remaining credits cover fewer results. Keep requesting next_cursor while
40
- # has_next_page is true, even when a page is empty. The deprecated limit and count
37
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
38
+ # results. Continue while has_next_page is true. Deprecated limit and count
41
39
  # aliases remain accepted.
42
40
  sig { returns(T.nilable(Integer)) }
43
41
  attr_reader :page_size
@@ -81,10 +79,8 @@ module XTwitterScraper
81
79
  q:,
82
80
  # Pagination cursor for community search
83
81
  cursor: nil,
84
- # Maximum items requested from this page (1-100, default 20). The response can
85
- # contain fewer items because the source returned fewer, filters removed items, or
86
- # remaining credits cover fewer results. Keep requesting next_cursor while
87
- # has_next_page is true, even when a page is empty. The deprecated limit and count
82
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
83
+ # results. Continue while has_next_page is true. Deprecated limit and count
88
84
  # aliases remain accepted.
89
85
  page_size: nil,
90
86
  # Sort order (Latest or Top)
@@ -36,10 +36,8 @@ module XTwitterScraper
36
36
  sig { params(include_replies: T::Boolean).void }
37
37
  attr_writer :include_replies
38
38
 
39
- # Maximum items requested from this page (1-100, default 20). The response can
40
- # contain fewer items because the source returned fewer, filters removed items, or
41
- # remaining credits cover fewer results. Keep requesting next_cursor while
42
- # has_next_page is true, even when a page is empty. The deprecated limit and count
39
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
40
+ # results. Continue while has_next_page is true. Deprecated limit and count
43
41
  # aliases remain accepted.
44
42
  sig { returns(T.nilable(Integer)) }
45
43
  attr_reader :page_size
@@ -78,10 +76,8 @@ module XTwitterScraper
78
76
  cursor: nil,
79
77
  # Include replies (default false)
80
78
  include_replies: nil,
81
- # Maximum items requested from this page (1-100, default 20). The response can
82
- # contain fewer items because the source returned fewer, filters removed items, or
83
- # remaining credits cover fewer results. Keep requesting next_cursor while
84
- # has_next_page is true, even when a page is empty. The deprecated limit and count
79
+ # Maximum page items (1-100, default 20). Source, filters, or credits can reduce
80
+ # results. Continue while has_next_page is true. Deprecated limit and count
85
81
  # aliases remain accepted.
86
82
  page_size: nil,
87
83
  # Unix timestamp - filter after
@@ -16,13 +16,23 @@ module XTwitterScraper
16
16
  )
17
17
  end
18
18
 
19
+ sig { returns(Integer) }
20
+ attr_accessor :followers
21
+
22
+ sig { returns(T::Boolean) }
23
+ attr_accessor :verified
24
+
19
25
  # Tweet author profile. The lookup route always includes follower count and
20
26
  # verification state. Other profile fields appear when available.
21
- sig { returns(T.attached_class) }
22
- def self.new
27
+ sig do
28
+ params(followers: Integer, verified: T::Boolean).returns(
29
+ T.attached_class
30
+ )
31
+ end
32
+ def self.new(followers:, verified:)
23
33
  end
24
34
 
25
- sig { override.returns({}) }
35
+ sig { override.returns({ followers: Integer, verified: T::Boolean }) }
26
36
  def to_hash
27
37
  end
28
38
  end