tweetapi 1.1.0__py3-none-any.whl
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.
- tweetapi/__init__.py +40 -0
- tweetapi/client.py +232 -0
- tweetapi/errors.py +122 -0
- tweetapi/pagination.py +64 -0
- tweetapi/py.typed +0 -0
- tweetapi/resources/__init__.py +0 -0
- tweetapi/resources/auth.py +19 -0
- tweetapi/resources/community.py +75 -0
- tweetapi/resources/explore.py +22 -0
- tweetapi/resources/interaction.py +91 -0
- tweetapi/resources/list_.py +32 -0
- tweetapi/resources/post.py +53 -0
- tweetapi/resources/space.py +20 -0
- tweetapi/resources/tweet.py +37 -0
- tweetapi/resources/unencrypted_dm.py +64 -0
- tweetapi/resources/user.py +84 -0
- tweetapi/resources/xchat.py +45 -0
- tweetapi/types.py +563 -0
- tweetapi-1.1.0.dist-info/METADATA +345 -0
- tweetapi-1.1.0.dist-info/RECORD +21 -0
- tweetapi-1.1.0.dist-info/WHEEL +4 -0
tweetapi/types.py
ADDED
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
"""Response types for TweetAPI.
|
|
2
|
+
|
|
3
|
+
Uses TypedDict for lightweight, JSON-compatible type hints.
|
|
4
|
+
All types mirror the API's JSON response shapes exactly.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Any, List as TypingList, Optional, TypedDict
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# ─── Response Wrappers ───────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ApiResponse(TypedDict):
|
|
16
|
+
data: Any
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Pagination(TypedDict):
|
|
20
|
+
nextCursor: Optional[str]
|
|
21
|
+
prevCursor: Optional[str]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PaginatedResponse(TypedDict):
|
|
25
|
+
data: list[Any]
|
|
26
|
+
pagination: Pagination
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SearchMeta(TypedDict):
|
|
30
|
+
query: str
|
|
31
|
+
resultType: str
|
|
32
|
+
resultCount: int
|
|
33
|
+
completedIn: int
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class SearchResponse(TypedDict):
|
|
37
|
+
data: list[Any]
|
|
38
|
+
pagination: Pagination
|
|
39
|
+
meta: SearchMeta
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ActionData(TypedDict, total=False):
|
|
43
|
+
id: str
|
|
44
|
+
action: str
|
|
45
|
+
timestamp: str
|
|
46
|
+
success: bool
|
|
47
|
+
message: str
|
|
48
|
+
metadata: dict[str, Any]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class ActionResponse(TypedDict):
|
|
52
|
+
data: ActionData
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# ─── User ────────────────────────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class Professional(TypedDict, total=False):
|
|
59
|
+
type: Optional[str]
|
|
60
|
+
category: list[str]
|
|
61
|
+
restId: Optional[str]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class BusinessAccount(TypedDict):
|
|
65
|
+
affiliatesCount: int
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class HighlightsInfo(TypedDict):
|
|
69
|
+
canHighlight: bool
|
|
70
|
+
highlightedTweetsCount: str
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class User(TypedDict, total=False):
|
|
74
|
+
id: str
|
|
75
|
+
username: str
|
|
76
|
+
name: str
|
|
77
|
+
bio: str
|
|
78
|
+
location: Optional[str]
|
|
79
|
+
website: Optional[str]
|
|
80
|
+
pinnedTweetIds: list[str]
|
|
81
|
+
avatar: Optional[str]
|
|
82
|
+
banner: Optional[str]
|
|
83
|
+
profileImageShape: Optional[str]
|
|
84
|
+
verified: bool
|
|
85
|
+
isBlueVerified: bool
|
|
86
|
+
verifiedType: Optional[str]
|
|
87
|
+
verifiedSince: Optional[str]
|
|
88
|
+
isIdentityVerified: bool
|
|
89
|
+
isProtected: bool
|
|
90
|
+
possiblySensitive: bool
|
|
91
|
+
profileInterstitialType: Optional[str]
|
|
92
|
+
withheldInCountries: list[str]
|
|
93
|
+
professional: Optional[Professional]
|
|
94
|
+
businessAccount: Optional[BusinessAccount]
|
|
95
|
+
creatorSubscriptionsCount: int
|
|
96
|
+
hasHiddenSubscriptions: bool
|
|
97
|
+
highlightsInfo: Optional[HighlightsInfo]
|
|
98
|
+
hasGraduatedAccess: bool
|
|
99
|
+
isProfileTranslatable: bool
|
|
100
|
+
hasCustomTimelines: bool
|
|
101
|
+
isTranslator: bool
|
|
102
|
+
affiliatesHighlightedLabel: Optional[dict[str, Any]]
|
|
103
|
+
defaultProfile: bool
|
|
104
|
+
defaultProfileImage: bool
|
|
105
|
+
followerCount: int
|
|
106
|
+
followingCount: int
|
|
107
|
+
tweetCount: int
|
|
108
|
+
listedCount: int
|
|
109
|
+
mediaCount: int
|
|
110
|
+
favoritesCount: int
|
|
111
|
+
createdAt: Optional[str]
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class UserRelationship(TypedDict, total=False):
|
|
115
|
+
sourceId: str
|
|
116
|
+
targetId: str
|
|
117
|
+
following: bool
|
|
118
|
+
followedBy: bool
|
|
119
|
+
blocking: bool
|
|
120
|
+
blockedBy: bool
|
|
121
|
+
muting: bool
|
|
122
|
+
notificationsEnabled: bool
|
|
123
|
+
canDm: bool
|
|
124
|
+
canMediaTag: bool
|
|
125
|
+
wantRetweets: bool
|
|
126
|
+
markedSpam: bool
|
|
127
|
+
followRequestSent: bool
|
|
128
|
+
followRequestReceived: bool
|
|
129
|
+
allReplies: bool
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class UserAnalytics(TypedDict, total=False):
|
|
133
|
+
userId: str
|
|
134
|
+
period: str
|
|
135
|
+
impressions: int
|
|
136
|
+
engagements: int
|
|
137
|
+
engagementRate: float
|
|
138
|
+
linkClicks: int
|
|
139
|
+
profileVisits: int
|
|
140
|
+
mentions: int
|
|
141
|
+
newFollowers: int
|
|
142
|
+
topTweet: Optional[str]
|
|
143
|
+
detailedMetrics: dict[str, int]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# ─── Media ───────────────────────────────────────────────────────────────────
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
class MediaSize(TypedDict, total=False):
|
|
150
|
+
width: int
|
|
151
|
+
height: int
|
|
152
|
+
resize: str
|
|
153
|
+
url: str
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class VideoVariant(TypedDict, total=False):
|
|
157
|
+
bitrate: Optional[int]
|
|
158
|
+
contentType: str
|
|
159
|
+
url: str
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class MediaAvailability(TypedDict):
|
|
163
|
+
status: str
|
|
164
|
+
reason: Optional[str]
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class Media(TypedDict, total=False):
|
|
168
|
+
id: str
|
|
169
|
+
key: str
|
|
170
|
+
type: str # "photo" | "video" | "animated_gif"
|
|
171
|
+
url: str
|
|
172
|
+
displayUrl: str
|
|
173
|
+
expandedUrl: str
|
|
174
|
+
thumbnailUrl: Optional[str]
|
|
175
|
+
width: int
|
|
176
|
+
height: int
|
|
177
|
+
aspectRatio: list[int]
|
|
178
|
+
sizes: dict[str, MediaSize]
|
|
179
|
+
duration: Optional[float]
|
|
180
|
+
bitrate: Optional[int]
|
|
181
|
+
videoInfo: Optional[dict[str, Any]]
|
|
182
|
+
altText: Optional[str]
|
|
183
|
+
sensitiveMedia: bool
|
|
184
|
+
mediaAvailability: MediaAvailability
|
|
185
|
+
allowDownload: bool
|
|
186
|
+
mediaStats: Optional[dict[str, int]]
|
|
187
|
+
sourceStatusId: Optional[str]
|
|
188
|
+
sourceUserId: Optional[str]
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
# ─── Poll ────────────────────────────────────────────────────────────────────
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class PollOption(TypedDict):
|
|
195
|
+
position: int
|
|
196
|
+
label: str
|
|
197
|
+
voteCount: int
|
|
198
|
+
percentage: float
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
class Poll(TypedDict, total=False):
|
|
202
|
+
id: str
|
|
203
|
+
options: list[PollOption]
|
|
204
|
+
endDatetime: str
|
|
205
|
+
durationMinutes: int
|
|
206
|
+
votingStatus: str
|
|
207
|
+
totalVotes: int
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# ─── Card ────────────────────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class CardBindingValues(TypedDict, total=False):
|
|
214
|
+
title: str
|
|
215
|
+
description: str
|
|
216
|
+
domain: str
|
|
217
|
+
thumbnailImageUrl: Optional[str]
|
|
218
|
+
thumbnailImageColor: Optional[str]
|
|
219
|
+
playerUrl: Optional[str]
|
|
220
|
+
playerWidth: Optional[int]
|
|
221
|
+
playerHeight: Optional[int]
|
|
222
|
+
appId: Optional[str]
|
|
223
|
+
appName: Optional[str]
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class Card(TypedDict, total=False):
|
|
227
|
+
name: str
|
|
228
|
+
url: str
|
|
229
|
+
cardType: str
|
|
230
|
+
type: str
|
|
231
|
+
bindingValues: CardBindingValues
|
|
232
|
+
vanityUrl: Optional[str]
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
# ─── Place ───────────────────────────────────────────────────────────────────
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class Place(TypedDict, total=False):
|
|
239
|
+
id: str
|
|
240
|
+
fullName: str
|
|
241
|
+
name: str
|
|
242
|
+
country: str
|
|
243
|
+
countryCode: str
|
|
244
|
+
placeType: str
|
|
245
|
+
url: str
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
# ─── Tweet ───────────────────────────────────────────────────────────────────
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class ReplyTo(TypedDict):
|
|
252
|
+
tweetId: str
|
|
253
|
+
userId: str
|
|
254
|
+
username: str
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class Mention(TypedDict):
|
|
258
|
+
id: str
|
|
259
|
+
username: str
|
|
260
|
+
name: str
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
class EditControl(TypedDict, total=False):
|
|
264
|
+
editTweetIds: list[str]
|
|
265
|
+
editableUntil: str
|
|
266
|
+
isEditEligible: bool
|
|
267
|
+
editsRemaining: int
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class BirdwatchPivot(TypedDict, total=False):
|
|
271
|
+
calloutText: str
|
|
272
|
+
shortTitle: str
|
|
273
|
+
noteId: str
|
|
274
|
+
iconType: str
|
|
275
|
+
destinationUrl: str
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
class ConversationControl(TypedDict, total=False):
|
|
279
|
+
policy: str
|
|
280
|
+
allowedUserIds: list[str]
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class Tweet(TypedDict, total=False):
|
|
284
|
+
id: str
|
|
285
|
+
conversationId: Optional[str]
|
|
286
|
+
text: str
|
|
287
|
+
displayTextRange: list[int]
|
|
288
|
+
author: User
|
|
289
|
+
source: Optional[str]
|
|
290
|
+
type: str # "tweet" | "reply" | "quote" | "retweet" | "thread"
|
|
291
|
+
replyTo: Optional[ReplyTo]
|
|
292
|
+
quotedTweet: Optional[Any] # recursive Tweet
|
|
293
|
+
retweetedTweet: Optional[Any]
|
|
294
|
+
likeCount: int
|
|
295
|
+
retweetCount: int
|
|
296
|
+
replyCount: int
|
|
297
|
+
quoteCount: int
|
|
298
|
+
bookmarkCount: int
|
|
299
|
+
viewCount: Optional[int]
|
|
300
|
+
media: Optional[list[Media]]
|
|
301
|
+
poll: Optional[Poll]
|
|
302
|
+
card: Optional[Card]
|
|
303
|
+
hashtags: list[str]
|
|
304
|
+
mentions: list[Mention]
|
|
305
|
+
urls: list[str]
|
|
306
|
+
symbols: list[str]
|
|
307
|
+
possiblySensitive: bool
|
|
308
|
+
limitedActions: Optional[str]
|
|
309
|
+
hasAIGeneratedMedia: bool
|
|
310
|
+
isPaidPromotion: bool
|
|
311
|
+
isEdited: bool
|
|
312
|
+
editControl: Optional[EditControl]
|
|
313
|
+
isTranslatable: bool
|
|
314
|
+
lang: str
|
|
315
|
+
translatedText: Optional[str]
|
|
316
|
+
hasBirdwatchNotes: bool
|
|
317
|
+
birdwatchPivot: Optional[BirdwatchPivot]
|
|
318
|
+
conversationControl: Optional[ConversationControl]
|
|
319
|
+
isPromoted: bool
|
|
320
|
+
communityId: Optional[str]
|
|
321
|
+
createdAt: Optional[str]
|
|
322
|
+
place: Optional[Place]
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class TweetTranslation(TypedDict):
|
|
326
|
+
text: str
|
|
327
|
+
lang: str
|
|
328
|
+
sourceLanguage: str
|
|
329
|
+
destinationLanguage: str
|
|
330
|
+
translationSource: str
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
# ─── List ────────────────────────────────────────────────────────────────────
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
class List(TypedDict, total=False):
|
|
337
|
+
id: str
|
|
338
|
+
name: str
|
|
339
|
+
description: str
|
|
340
|
+
mode: str # "public" | "private"
|
|
341
|
+
owner: User
|
|
342
|
+
bannerUrl: Optional[str]
|
|
343
|
+
facepileUrls: list[str]
|
|
344
|
+
memberCount: int
|
|
345
|
+
subscriberCount: int
|
|
346
|
+
createdAt: Optional[str]
|
|
347
|
+
slug: str
|
|
348
|
+
uri: str
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
# ─── Community ───────────────────────────────────────────────────────────────
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
class CommunityRule(TypedDict):
|
|
355
|
+
id: str
|
|
356
|
+
name: str
|
|
357
|
+
description: str
|
|
358
|
+
order: int
|
|
359
|
+
createdAt: str
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
class Community(TypedDict, total=False):
|
|
363
|
+
id: str
|
|
364
|
+
name: str
|
|
365
|
+
description: str
|
|
366
|
+
bannerUrl: Optional[str]
|
|
367
|
+
avatarUrl: Optional[str]
|
|
368
|
+
rules: list[CommunityRule]
|
|
369
|
+
memberCount: int
|
|
370
|
+
moderatorCount: int
|
|
371
|
+
adminCount: int
|
|
372
|
+
isPrivate: bool
|
|
373
|
+
pinnedTweetId: Optional[str]
|
|
374
|
+
createdAt: Optional[str]
|
|
375
|
+
isMember: bool
|
|
376
|
+
isAdmin: bool
|
|
377
|
+
isModerator: bool
|
|
378
|
+
canPost: bool
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
class CommunityMember(TypedDict, total=False):
|
|
382
|
+
user: User
|
|
383
|
+
role: str # "member" | "moderator" | "admin"
|
|
384
|
+
joinedAt: str
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
class CommunitySearchResult(TypedDict, total=False):
|
|
388
|
+
id: str
|
|
389
|
+
name: str
|
|
390
|
+
memberCount: int
|
|
391
|
+
topic: Optional[str]
|
|
392
|
+
isNsfw: bool
|
|
393
|
+
bannerUrl: Optional[str]
|
|
394
|
+
defaultBannerUrl: Optional[str]
|
|
395
|
+
membersFacepile: list[str]
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
# ─── Space ───────────────────────────────────────────────────────────────────
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class SpaceParticipant(TypedDict, total=False):
|
|
402
|
+
periscopeUserId: str
|
|
403
|
+
twitterUserId: str
|
|
404
|
+
username: str
|
|
405
|
+
displayName: str
|
|
406
|
+
avatarUrl: str
|
|
407
|
+
isVerified: bool
|
|
408
|
+
isBlueVerified: bool
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
class SpaceTopic(TypedDict):
|
|
412
|
+
id: str
|
|
413
|
+
name: str
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
class SpaceParticipants(TypedDict, total=False):
|
|
417
|
+
admins: list[SpaceParticipant]
|
|
418
|
+
speakers: list[SpaceParticipant]
|
|
419
|
+
listeners: list[SpaceParticipant]
|
|
420
|
+
total: int
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
class Space(TypedDict, total=False):
|
|
424
|
+
id: str
|
|
425
|
+
title: str
|
|
426
|
+
state: str # "Running" | "Ended" | "Scheduled" | "Canceled"
|
|
427
|
+
mediaKey: str
|
|
428
|
+
createdAt: int
|
|
429
|
+
scheduledStart: Optional[int]
|
|
430
|
+
startedAt: Optional[int]
|
|
431
|
+
endedAt: Optional[int]
|
|
432
|
+
updatedAt: Optional[int]
|
|
433
|
+
creator: Optional[User]
|
|
434
|
+
totalLiveListeners: int
|
|
435
|
+
totalReplayWatched: int
|
|
436
|
+
participants: SpaceParticipants
|
|
437
|
+
isAvailableForReplay: bool
|
|
438
|
+
topics: list[SpaceTopic]
|
|
439
|
+
tweetId: Optional[str]
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
class SpaceStreamInfo(TypedDict, total=False):
|
|
443
|
+
hlsUrl: str
|
|
444
|
+
status: str
|
|
445
|
+
streamType: str
|
|
446
|
+
shareUrl: Optional[str]
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
# ─── Notification ────────────────────────────────────────────────────────────
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
class Notification(TypedDict, total=False):
|
|
453
|
+
id: str
|
|
454
|
+
type: str
|
|
455
|
+
createdAt: str
|
|
456
|
+
message: str
|
|
457
|
+
icon: str
|
|
458
|
+
fromUsers: list[str]
|
|
459
|
+
targetTweetId: Optional[str]
|
|
460
|
+
targetUserId: Optional[str]
|
|
461
|
+
seen: bool
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
# ─── Auth ────────────────────────────────────────────────────────────────────
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
class LoginCookies(TypedDict):
|
|
468
|
+
auth_token: str
|
|
469
|
+
ct0: str
|
|
470
|
+
twid: str
|
|
471
|
+
kdt: str
|
|
472
|
+
__cf_bm: str
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class LoginUser(TypedDict):
|
|
476
|
+
id: str
|
|
477
|
+
username: str
|
|
478
|
+
name: str
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
class LoginResponse(TypedDict):
|
|
482
|
+
cookies: LoginCookies
|
|
483
|
+
user: LoginUser
|
|
484
|
+
timestamp: str
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
# ─── Typed Response Wrappers ────────────────────────────────────────────────
|
|
488
|
+
# Specific wrappers that give better IDE autocomplete than the generic
|
|
489
|
+
# ``ApiResponse`` / ``PaginatedResponse`` with ``data: Any``.
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
class UserResponse(TypedDict):
|
|
493
|
+
data: User
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
class UsersResponse(TypedDict):
|
|
497
|
+
data: list[User]
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
class UserPaginatedResponse(TypedDict):
|
|
501
|
+
data: list[User]
|
|
502
|
+
pagination: Pagination
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
class TweetResponse(TypedDict):
|
|
506
|
+
data: Tweet
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
class TweetsPaginatedResponse(TypedDict):
|
|
510
|
+
data: list[Tweet]
|
|
511
|
+
pagination: Pagination
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
class TweetTranslationResponse(TypedDict):
|
|
515
|
+
data: TweetTranslation
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
class UserRelationshipResponse(TypedDict):
|
|
519
|
+
data: UserRelationship
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
class UserAnalyticsResponse(TypedDict):
|
|
523
|
+
data: UserAnalytics
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
class ListResponse(TypedDict):
|
|
527
|
+
data: List
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
class ListPaginatedResponse(TypedDict):
|
|
531
|
+
data: list[Any]
|
|
532
|
+
pagination: Pagination
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
class CommunityResponse(TypedDict):
|
|
536
|
+
data: Community
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
class CommunityMemberPaginatedResponse(TypedDict):
|
|
540
|
+
data: list[CommunityMember]
|
|
541
|
+
pagination: Pagination
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
class CommunitySearchPaginatedResponse(TypedDict):
|
|
545
|
+
data: list[CommunitySearchResult]
|
|
546
|
+
pagination: Pagination
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
class SpaceResponse(TypedDict):
|
|
550
|
+
data: Space
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
class SpaceStreamResponse(TypedDict):
|
|
554
|
+
data: SpaceStreamInfo
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
class NotificationPaginatedResponse(TypedDict):
|
|
558
|
+
data: list[Notification]
|
|
559
|
+
pagination: Pagination
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
class LoginApiResponse(TypedDict):
|
|
563
|
+
data: LoginResponse
|