Documentation
¶
Index ¶
- Constants
- Variables
- func SanitizeReport(ev *ReportEvent)
- func ValidateReport(ev ReportEvent) error
- type AddFilterKeywordEvent
- type BlockEvent
- type BookmarkEvent
- type BookmarkItem
- type ChallengeEvent
- type ChallengeResponse
- type ChallengeSample
- type ChallengeSolution
- type ChatCreatedResponse
- type ChatMessageResponse
- type ChatMessagesResponse
- type ChatsResponse
- type DeleteChatEvent
- type DeleteFilterEvent
- type DeleteFilterKeywordEvent
- type DeleteMessageEvent
- type DeleteReplyEvent
- type DeleteTweetEvent
- type EditTweetEvent
- type EditTweetResponse
- type ErrorEvent
- type FollowRequestActionEvent
- type FollowersResponse
- type FollowingsResponse
- type GetAllChatsEvent
- type GetAllMessagesEvent
- type GetAllRepliesEvent
- type GetAllTweetsEvent
- type GetAllUsersEvent
- type GetBlocksEvent
- type GetBlocksResponse
- type GetBookmarksEvent
- type GetBookmarksResponse
- type GetChatEvent
- type GetChatResponse
- type GetFilterEvent
- type GetFilterResponse
- type GetFiltersEvent
- type GetFiltersResponse
- type GetFollowRequestsEvent
- type GetFollowRequestsResponse
- type GetFollowersEvent
- type GetFollowingsEvent
- type GetImageEvent
- type GetImageResponse
- type GetIsFollowerEvent
- type GetIsFollowingEvent
- type GetLikersResponse
- type GetLikesCountEvent
- type GetMediaEvent
- type GetMediaResponse
- type GetMessageEvent
- type GetMutesEvent
- type GetMutesResponse
- type GetNotificationEvent
- type GetNotificationResponse
- type GetNotificationsEvent
- type GetNotificationsResponse
- type GetReTweetsCountEvent
- type GetReplyEvent
- type GetRetweetersResponse
- type GetTimelineEvent
- type GetTweetEvent
- type GetTweetLikersEvent
- type GetTweetRetweetersEvent
- type GetTweetStatsEvent
- type GetUserEvent
- type IDsResponse
- type ImportTwitterArchiveEvent
- type ImportTwitterArchiveResponse
- type IsFollowerResponse
- type IsFollowingResponse
- type LikeEvent
- type LikesCountResponse
- type LoginEvent
- type LoginResponse
- type LogoutEvent
- type MarkNotificationReadEvent
- type Message
- type MessageBody
- type ModerationEvent
- type ModerationResultEvent
- type MuteEvent
- type NewChatEvent
- type NewFilterEvent
- type NewFollowEvent
- type NewMessageEvent
- type NewMessageResponse
- type NewReplyEvent
- type NewReplyResponse
- type NewRetweetEvent
- type NewTweetEvent
- type NewUnfollowEvent
- type NewUserEvent
- type Owner
- type PinTweetEvent
- type ReTweetsCountResponse
- type RepliesResponse
- type ReportEvent
- type ResponseError
- type SearchUsersEvent
- type SearchUsersResponse
- type SubscribeUserEvent
- type TweetStatsResponse
- type TweetsResponse
- type UnblockEvent
- type UnbookmarkEvent
- type UnlikeEvent
- type UnmuteEvent
- type UnpinTweetEvent
- type UnretweetEvent
- type UnsubscribeUserEvent
- type UpdateFilterEvent
- type UpdateFilterKeywordEvent
- type UpdateMediaMetaEvent
- type UploadImageEvent
- type UploadImageResponse
- type UsersResponse
- type ValidationEvent
- type ValidationResult
- type ValidationResultEvent
- type ViewEvent
- type ViewsCountResponse
Constants ¶
const ( // Accepted is the verbatim JSON body the middleware writes when a // handler signals plain success. Plain string (not a named type) so // the middleware's response type switch hits the `case string` arm // and writes the bytes as-is; with a named type it would fall through // to the JSON encoder and be re-emitted as a quoted string literal. Accepted string = `{"code":0,"message":"Accepted"}` InternalRoutePrefix string = "/internal" EndCursor string = "end" )
const ( // admin PRIVATE_POST_PAIR = "/private/post/admin/pair/0.0.0" PUBLIC_POST_NODE_CHALLENGE = "/public/post/admin/challenge/0.0.0" PRIVATE_GET_STATS = "/private/get/admin/stats/0.0.0" // moderation PUBLIC_POST_MODERATION_RESULT = "/public/post/moderate/result/0.0.0" PUBLIC_POST_REPORT = "/public/post/report/0.0.0" // application PRIVATE_DELETE_CHAT = "/private/delete/chat/0.0.0" PRIVATE_DELETE_MESSAGE = "/private/delete/message/0.0.0" PRIVATE_DELETE_TWEET = "/private/delete/tweet/0.0.0" PRIVATE_GET_CHAT = "/private/get/chat/0.0.0" PRIVATE_GET_CHATS = "/private/get/chats/0.0.0" PRIVATE_GET_NOTIFICATION = "/private/get/notification/0.0.0" PRIVATE_GET_NOTIFICATIONS = "/private/get/notifications/0.0.0" PRIVATE_POST_NOTIFICATION_READ = "/private/post/notification/read/0.0.0" PRIVATE_GET_MESSAGE = "/private/get/message/0.0.0" PRIVATE_GET_MESSAGES = "/private/get/messages/0.0.0" PRIVATE_GET_TIMELINE = "/private/get/timeline/0.0.0" PRIVATE_POST_LOGIN = "/private/post/login/0.0.0" PRIVATE_POST_LOGOUT = "/private/post/logout/0.0.0" PRIVATE_POST_TWEET = "/private/post/tweet/0.0.0" PRIVATE_POST_IMPORT_TWITTER = "/private/post/import/twitter/0.0.0" PRIVATE_POST_USER = "/private/post/user/0.0.0" PUBLIC_DELETE_REPLY = "/public/delete/reply/0.0.0" PUBLIC_GET_FOLLOWINGS = "/public/get/followings/0.0.0" PUBLIC_GET_FOLLOWERS = "/public/get/followers/0.0.0" PUBLIC_GET_INFO = "/public/get/info/0.0.0" PUBLIC_GET_REPLIES = "/public/get/replies/0.0.0" PUBLIC_GET_REPLY = "/public/get/reply/0.0.0" PUBLIC_GET_TWEET = "/public/get/tweet/0.0.0" PUBLIC_GET_TWEET_STATS = "/public/get/tweetstats/0.0.0" PUBLIC_GET_TWEETS = "/public/get/tweets/0.0.0" PUBLIC_GET_USER = "/public/get/user/0.0.0" PUBLIC_GET_USERS = "/public/get/users/0.0.0" PUBLIC_GET_WHOTOFOLLOW = "/public/get/whotofollow/0.0.0" PUBLIC_POST_CHAT = "/public/post/chat/0.0.0" PUBLIC_POST_FOLLOW = "/public/post/follow/0.0.0" PUBLIC_POST_LIKE = "/public/post/like/0.0.0" PUBLIC_POST_MESSAGE = "/public/post/message/0.0.0" PUBLIC_POST_REPLY = "/public/post/reply/0.0.0" PUBLIC_POST_RETWEET = "/public/post/retweet/0.0.0" PUBLIC_POST_IS_FOLLOWING = "/public/post/isfollowing/0.0.0" PUBLIC_POST_IS_FOLLOWER = "/public/post/isfollower/0.0.0" PUBLIC_POST_UNFOLLOW = "/public/post/unfollow/0.0.0" PUBLIC_POST_UNLIKE = "/public/post/unlike/0.0.0" PUBLIC_POST_UNRETWEET = "/public/post/unretweet/0.0.0" PUBLIC_POST_VIEW = "/public/post/view/0.0.0" PRIVATE_POST_UPLOAD_IMAGE = "/private/post/image/0.0.0" PUBLIC_GET_IMAGE = "/public/get/image/0.0.0" PRIVATE_POST_BOOKMARK = "/private/post/bookmark/0.0.0" PRIVATE_POST_UNBOOKMARK = "/private/post/unbookmark/0.0.0" PRIVATE_GET_BOOKMARKS = "/private/get/bookmarks/0.0.0" PUBLIC_POST_PIN = "/public/post/pin/0.0.0" PUBLIC_POST_UNPIN = "/public/post/unpin/0.0.0" PRIVATE_POST_BLOCK = "/private/post/block/0.0.0" PRIVATE_POST_UNBLOCK = "/private/post/unblock/0.0.0" PRIVATE_GET_BLOCKS = "/private/get/blocks/0.0.0" PRIVATE_POST_MUTE = "/private/post/mute/0.0.0" PRIVATE_POST_UNMUTE = "/private/post/unmute/0.0.0" PRIVATE_GET_MUTES = "/private/get/mutes/0.0.0" PUBLIC_GET_TWEET_LIKERS = "/public/get/tweet/likers/0.0.0" PUBLIC_GET_TWEET_RETWEETERS = "/public/get/tweet/retweeters/0.0.0" PRIVATE_POST_SUBSCRIBE_USER = "/private/post/subscribe/user/0.0.0" PRIVATE_POST_UNSUBSCRIBE_USER = "/private/post/unsubscribe/user/0.0.0" PRIVATE_POST_MEDIA_META = "/private/post/media/meta/0.0.0" PRIVATE_GET_MEDIA = "/private/get/media/0.0.0" PUBLIC_GET_USERS_SEARCH = "/public/get/users/search/0.0.0" PRIVATE_POST_TWEET_EDIT = "/private/post/tweet/edit/0.0.0" PRIVATE_GET_FOLLOW_REQUESTS = "/private/get/follow/requests/0.0.0" PRIVATE_POST_FOLLOW_REQUEST_AUTHORIZE = "/private/post/follow/request/authorize/0.0.0" PRIVATE_POST_FOLLOW_REQUEST_REJECT = "/private/post/follow/request/reject/0.0.0" PRIVATE_GET_FILTER = "/private/get/filter/0.0.0" PRIVATE_GET_FILTERS = "/private/get/filters/0.0.0" PRIVATE_POST_FILTER = "/private/post/filter/0.0.0" PRIVATE_POST_FILTER_UPDATE = "/private/post/filter/update/0.0.0" PRIVATE_DELETE_FILTER = "/private/delete/filter/0.0.0" PRIVATE_POST_FILTER_KEYWORD = "/private/post/filter/keyword/0.0.0" PRIVATE_POST_FILTER_KEYWORD_UPDATE = "/private/post/filter/keyword/update/0.0.0" PRIVATE_DELETE_FILTER_KEYWORD = "/private/delete/filter/keyword/0.0.0" )
const MaxReportReasonLen = 256
MaxReportReasonLen caps the free-form reason on the wire. Reports are gossiped network-wide, so an unbounded reason field is a cheap way to bloat the topic and spam logs.
const ReportsTopic = "/warpnet/reports/1.0.0"
ReportsTopic is the global gossip topic that carries Report events from members to moderators. Single source of truth: both cmd/node/member/pubsub and cmd/node/moderator/pubsub must use this constant so they cannot drift.
Variables ¶
var ( ErrReportNoTargetUser = errors.New("report: empty target_user_id") ErrReportNoTargetNode = errors.New("report: empty target_node_id") ErrReportNoReason = errors.New("report: empty reason") ErrReportReasonLong = errors.New("report: reason too long") ErrReportNoObjectID = errors.New("report: empty object_id for tweet") ErrReportBadType = errors.New("report: unsupported moderation object type") )
Errors are exported so callers can match against them with errors.Is — useful both in the publishing handler (which returns 4xx-style errors to the UI) and in the moderator consumer (which drops bad messages silently).
Functions ¶
func SanitizeReport ¶ added in v0.7.59
func SanitizeReport(ev *ReportEvent)
SanitizeReport normalizes the user-typed fields of a ReportEvent so that Validate (and downstream logs) see a canonical value. Mutates in place. Idempotent.
func ValidateReport ¶ added in v0.7.59
func ValidateReport(ev ReportEvent) error
ValidateReport returns nil if the event is shape-acceptable. Run SanitizeReport first so whitespace-only fields are caught.
Called both by the member-side publishing handler (to reject bad client input) and by the moderator-side consumer (because the reports topic is open — a signed message is still untrusted content). Keep the two paths in sync by sharing this function.
Types ¶
type AddFilterKeywordEvent ¶ added in v0.7.26
type AddFilterKeywordEvent struct {
UserId domain.ID `json:"user_id"`
FilterId domain.ID `json:"filter_id"`
Keyword string `json:"keyword"`
WholeWord bool `json:"whole_word"`
}
AddFilterKeywordEvent defines model for AddFilterKeywordEvent.
type BlockEvent ¶ added in v0.7.26
type BlockEvent struct {
BlockerId domain.ID `json:"blocker_id"`
BlockeeId domain.ID `json:"blockee_id"`
}
BlockEvent defines model for BlockEvent.
type BookmarkEvent ¶ added in v0.7.26
type BookmarkEvent struct {
UserId domain.ID `json:"user_id"`
TweetId domain.ID `json:"tweet_id"`
OwnerUserId domain.ID `json:"owner_user_id"`
}
BookmarkEvent defines model for BookmarkEvent.
type BookmarkItem ¶ added in v0.7.26
type BookmarkItem struct {
UserId domain.ID `json:"user_id"`
TweetId domain.ID `json:"tweet_id"`
OwnerUserId domain.ID `json:"owner_user_id"`
CreatedAt time.Time `json:"created_at"`
}
BookmarkItem mirrors database.Bookmark on the wire.
type ChallengeEvent ¶ added in v0.5.2
type ChallengeEvent struct {
Coordinates []ChallengeSample `json:"samples"`
}
type ChallengeResponse ¶ added in v0.5.2
type ChallengeResponse struct {
Solutions []ChallengeSolution `json:"solutions"`
}
type ChallengeSample ¶ added in v0.5.129
type ChallengeSolution ¶ added in v0.5.129
type ChatCreatedResponse ¶
ChatCreatedResponse defines model for ChatCreatedResponse.
type ChatMessageResponse ¶
type ChatMessageResponse = domain.ChatMessage
ChatMessageResponse defines model for ChatMessageResponse.
type ChatMessagesResponse ¶
type ChatMessagesResponse struct {
ChatId domain.ID `json:"chat_id"`
Cursor string `json:"cursor"`
Messages []domain.ChatMessage `json:"messages"`
}
ChatMessagesResponse defines model for ChatMessagesResponse.
type ChatsResponse ¶
type ChatsResponse struct {
Chats []domain.Chat `json:"chats"`
Cursor string `json:"cursor"`
UserId domain.ID `json:"user_id"`
}
ChatsResponse defines model for ChatsResponse.
type DeleteChatEvent ¶
DeleteChatEvent defines model for DeleteChatEvent.
type DeleteFilterEvent ¶ added in v0.7.26
type DeleteFilterEvent struct {
UserId domain.ID `json:"user_id"`
FilterId domain.ID `json:"filter_id"`
}
DeleteFilterEvent defines model for DeleteFilterEvent.
type DeleteFilterKeywordEvent ¶ added in v0.7.26
type DeleteFilterKeywordEvent struct {
UserId domain.ID `json:"user_id"`
KeywordId domain.ID `json:"keyword_id"`
}
DeleteFilterKeywordEvent defines model for DeleteFilterKeywordEvent.
type DeleteMessageEvent ¶
type DeleteMessageEvent = GetMessageEvent
DeleteMessageEvent defines model for DeleteMessageEvent.
type DeleteReplyEvent ¶
type DeleteReplyEvent = GetReplyEvent
DeleteReplyEvent defines model for DeleteReplyEvent.
type DeleteTweetEvent ¶
type DeleteTweetEvent = GetTweetEvent
DeleteTweetEvent defines model for DeleteTweetEvent.
type EditTweetEvent ¶ added in v0.7.26
type EditTweetEvent struct {
TweetId domain.ID `json:"tweet_id"`
UserId domain.ID `json:"user_id"`
Text string `json:"text"`
}
EditTweetEvent defines model for EditTweetEvent.
type EditTweetResponse ¶ added in v0.7.26
EditTweetResponse defines model for EditTweetResponse.
type ErrorEvent ¶
ErrorEvent defines model for ErrorEvent.
type FollowRequestActionEvent ¶ added in v0.7.26
type FollowRequestActionEvent struct {
UserId domain.ID `json:"user_id"`
FollowerId domain.ID `json:"follower_id"`
}
FollowRequestActionEvent defines model for FollowRequestActionEvent. Used for both authorize and reject — the verb is in the path.
type FollowersResponse ¶
type FollowingsResponse ¶ added in v0.5.83
type FollowingsResponse struct {
Cursor string `json:"cursor"`
Followings []domain.ID `json:"followings"`
FollowerId domain.ID `json:"follower_id"`
}
FollowingsResponse defines model for FollowingsResponse.
type GetAllChatsEvent ¶
type GetAllChatsEvent struct {
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
UserId domain.ID `json:"user_id"`
}
GetAllChatsEvent defines model for GetAllChatsEvent.
type GetAllMessagesEvent ¶
type GetAllMessagesEvent struct {
OwnerId domain.ID `json:"owner_id"`
ChatId domain.ID `json:"chat_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetAllMessagesEvent defines model for GetAllMessagesEvent.
type GetAllRepliesEvent ¶
type GetAllRepliesEvent struct {
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
ParentId domain.ID `json:"parent_id"`
RootId domain.ID `json:"root_id"`
}
GetAllRepliesEvent defines model for GetAllRepliesEvent.
ParentId is the parent TWEET id (not a user id) — it selects which subtree of replies inside RootId to return. Empty means "top-level replies of the thread"; the handler treats that as ParentId = RootId. RootId is the root tweet of the thread.
type GetAllTweetsEvent ¶
type GetAllTweetsEvent struct {
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
UserId domain.ID `json:"user_id"`
}
GetAllTweetsEvent defines model for GetAllTweetsEvent.
type GetAllUsersEvent ¶
type GetAllUsersEvent struct {
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
// UserId default owner
UserId domain.ID `json:"user_id"`
}
GetAllUsersEvent defines model for GetAllUsersEvent.
type GetBlocksEvent ¶ added in v0.7.26
type GetBlocksEvent struct {
UserId domain.ID `json:"user_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetBlocksEvent defines model for GetBlocksEvent.
type GetBlocksResponse ¶ added in v0.7.26
GetBlocksResponse defines model for GetBlocksResponse.
type GetBookmarksEvent ¶ added in v0.7.26
type GetBookmarksEvent struct {
UserId domain.ID `json:"user_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetBookmarksEvent defines model for GetBookmarksEvent.
type GetBookmarksResponse ¶ added in v0.7.26
type GetBookmarksResponse struct {
Items []BookmarkItem `json:"items"`
Cursor string `json:"cursor"`
}
GetBookmarksResponse defines model for GetBookmarksResponse.
type GetChatEvent ¶
GetChatEvent defines model for GetChatEvent.
type GetChatResponse ¶
type GetFilterEvent ¶ added in v0.7.26
type GetFilterEvent struct {
UserId domain.ID `json:"user_id"`
FilterId domain.ID `json:"filter_id"`
}
GetFilterEvent defines model for GetFilterEvent.
type GetFilterResponse ¶ added in v0.7.26
GetFilterResponse defines model for GetFilterResponse.
type GetFiltersEvent ¶ added in v0.7.26
type GetFiltersEvent struct {
UserId domain.ID `json:"user_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetFiltersEvent defines model for GetFiltersEvent.
type GetFiltersResponse ¶ added in v0.7.26
type GetFiltersResponse struct {
Filters []domain.Filter `json:"filters"`
Cursor string `json:"cursor"`
}
GetFiltersResponse defines model for GetFiltersResponse.
type GetFollowRequestsEvent ¶ added in v0.7.26
type GetFollowRequestsEvent struct {
UserId domain.ID `json:"user_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetFollowRequestsEvent defines model for GetFollowRequestsEvent.
type GetFollowRequestsResponse ¶ added in v0.7.26
type GetFollowRequestsResponse struct {
FollowerIds []domain.ID `json:"follower_ids"`
Cursor string `json:"cursor"`
}
GetFollowRequestsResponse defines model for GetFollowRequestsResponse.
type GetFollowersEvent ¶
type GetFollowersEvent struct {
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
UserId domain.ID `json:"user_id"`
}
GetFollowersEvent defines model for GetFollowersEvent.
type GetFollowingsEvent ¶ added in v0.5.83
type GetFollowingsEvent = GetFollowersEvent
GetFollowingsEvent defines model for GetFollowingsEvent.
type GetImageEvent ¶
type GetImageResponse ¶
type GetImageResponse struct {
// Image mime type + "," + base64
File string `json:"file"`
}
type GetIsFollowerEvent ¶ added in v0.5.83
type GetIsFollowerEvent = GetIsFollowingEvent
type GetIsFollowingEvent ¶ added in v0.5.83
type GetLikersResponse ¶
type GetLikersResponse = UsersResponse
GetLikersResponse defines model for GetLikersResponse.
type GetLikesCountEvent ¶
GetLikesCountEvent defines model for GetLikesCountEvent.
type GetMediaEvent ¶ added in v0.7.26
GetMediaEvent defines model for GetMediaEvent.
type GetMediaResponse ¶ added in v0.7.26
type GetMediaResponse struct {
Key string `json:"key"`
Description string `json:"description"`
FocusX float32 `json:"focus_x"`
FocusY float32 `json:"focus_y"`
}
GetMediaResponse defines model for GetMediaResponse.
type GetMessageEvent ¶
GetMessageEvent defines model for GetMessageEvent.
type GetMutesEvent ¶ added in v0.7.26
type GetMutesEvent = GetBlocksEvent
GetMutesEvent defines model for GetMutesEvent.
type GetMutesResponse ¶ added in v0.7.26
type GetMutesResponse = GetBlocksResponse
GetMutesResponse defines model for GetMutesResponse.
type GetNotificationEvent ¶ added in v0.7.26
GetNotificationEvent defines model for GetNotificationEvent.
type GetNotificationResponse ¶ added in v0.7.26
type GetNotificationResponse = domain.Notification
GetNotificationResponse defines model for GetNotificationResponse.
type GetNotificationsEvent ¶ added in v0.5.30
type GetNotificationsResponse ¶ added in v0.5.30
type GetNotificationsResponse struct {
Cursor string `json:"cursor"`
UnreadCount uint64 `json:"unread_count"`
Notifications []domain.Notification `json:"notifications"`
}
type GetReTweetsCountEvent ¶
type GetReTweetsCountEvent = GetLikesCountEvent
GetReTweetsCountEvent defines model for GetReTweetsCountEvent.
type GetReplyEvent ¶
type GetReplyEvent struct {
ReplyId domain.ID `json:"reply_id"`
RootId domain.ID `json:"root_id"`
UserId domain.ID `json:"user_id"`
}
GetReplyEvent defines model for GetReplyEvent.
type GetRetweetersResponse ¶
type GetRetweetersResponse = UsersResponse
GetRetweetersResponse defines model for GetRetweetersResponse.
type GetTimelineEvent ¶
type GetTimelineEvent = GetAllTweetsEvent
GetTimelineEvent defines model for GetTimelineEvent.
type GetTweetEvent ¶
GetTweetEvent defines model for GetTweetEvent.
type GetTweetLikersEvent ¶ added in v0.7.26
type GetTweetLikersEvent struct {
TweetId domain.ID `json:"tweet_id"`
OwnerUserId domain.ID `json:"owner_user_id"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
GetTweetLikersEvent defines model for GetTweetLikersEvent.
type GetTweetRetweetersEvent ¶ added in v0.7.26
type GetTweetRetweetersEvent = GetTweetLikersEvent
GetTweetRetweetersEvent defines model for GetTweetRetweetersEvent.
type GetTweetStatsEvent ¶
type GetUserEvent ¶
GetUserEvent defines model for GetUserEvent.
type IDsResponse ¶
type ImportTwitterArchiveEvent ¶ added in v0.7.194
type ImportTwitterArchiveEvent struct {
ArchivePath string `json:"archive_path,omitempty"`
ArchiveData string `json:"archive_data,omitempty"`
}
ImportTwitterArchiveEvent defines model for ImportTwitterArchiveEvent.
Exactly one source is set: ArchivePath (desktop member node — the node reads the .zip straight off local disk) or ArchiveData (business browser dashboard — base64 of the uploaded .zip, optionally data-URL prefixed).
type ImportTwitterArchiveResponse ¶ added in v0.7.194
type ImportTwitterArchiveResponse struct {
ImportedTweets int `json:"imported_tweets"`
ImportedImages int `json:"imported_images"`
SkippedTweets int `json:"skipped_tweets"`
}
ImportTwitterArchiveResponse defines model for ImportTwitterArchiveResponse.
type IsFollowerResponse ¶ added in v0.5.83
type IsFollowerResponse struct {
IsFollower bool `json:"is_follower"`
}
type IsFollowingResponse ¶ added in v0.5.83
type IsFollowingResponse struct {
IsFollowing bool `json:"is_following"`
}
type LikeEvent ¶
type LikeEvent struct {
TweetId domain.ID `json:"tweet_id"`
UserId domain.ID `json:"user_id"`
OwnerId domain.ID `json:"owner_id"`
}
LikeEvent defines model for LikeEvent.
type LikesCountResponse ¶
type LikesCountResponse struct {
Count uint64 `json:"count"`
}
LikesCountResponse defines model for LikesCountResponse.
type LoginEvent ¶
type LoginEvent struct {
Password string `json:"password"` //nolint:gosec
Username string `json:"username"`
}
LoginEvent defines model for LoginEvent.
type LoginResponse ¶
type LoginResponse = domain.AuthNodeInfo
LoginResponse defines model for LoginResponse.
type LogoutEvent ¶
type LogoutEvent struct {
Token string `json:"token"`
}
LogoutEvent defines model for LogoutEvent.
type MarkNotificationReadEvent ¶ added in v0.7.26
MarkNotificationReadEvent flips a single notification's read flag.
type Message ¶
type Message struct {
Body json.RawMessage `json:"body"`
MessageId domain.ID `json:"message_id"`
NodeId domain.ID `json:"node_id"`
Destination string `json:"path"` // TODO change to 'destination'
Timestamp time.Time `json:"timestamp"`
Version string `json:"version"`
Signature string `json:"signature"`
}
Message defines model for Message.
type ModerationEvent ¶ added in v0.3.129
type ModerationResultEvent ¶ added in v0.3.129
type ModerationResultEvent struct {
Type domain.ModerationObjectType `json:"type"`
Result domain.ModerationResult `json:"result"`
Reason *string `json:"reason,omitempty"`
Model domain.ModelType `json:"model"`
UserID domain.ID `json:"user_id"`
ObjectID *domain.ID `json:"object_id,omitempty"`
// ModeratorID is the peer id of the moderator that issued this
// verdict. Carried inside the payload (rather than read from the
// stream connection) because the verdict reaches the receiver via
// pubsub → SelfStream, and the loopback connection's RemotePeer
// would be the local node, not the moderator.
ModeratorID domain.ID `json:"moderator_id,omitempty"`
}
type NewChatEvent ¶
type NewChatEvent struct {
ChatId *domain.ID `json:"chat_id,omitempty"`
OtherUserId domain.ID `json:"other_user_id"`
OwnerId domain.ID `json:"owner_id"`
}
NewChatEvent defines model for NewChatEvent.
type NewFilterEvent ¶ added in v0.7.26
NewFilterEvent defines model for NewFilterEvent.
type NewFollowEvent ¶
type NewFollowEvent = struct {
FollowerId domain.ID `json:"follower_id"`
FollowingId domain.ID `json:"following_id"`
}
NewFollowEvent defines model for NewFollowEvent.
type NewMessageEvent ¶
type NewMessageEvent = domain.ChatMessage
NewMessageEvent defines model for NewMessageEvent.
type NewMessageResponse ¶
type NewMessageResponse = domain.ChatMessage
NewMessageResponse defines model for NewMessageResponse.
type NewReplyEvent ¶
type NewReplyEvent struct {
CreatedAt time.Time `json:"created_at"`
Id domain.ID `json:"id"`
ParentId *domain.ID `json:"parent_id,omitempty"`
ParentUserId domain.ID `json:"parent_user_id"`
RootId domain.ID `json:"root_id"`
Text string `json:"text"`
UserId domain.ID `json:"user_id"`
Username string `json:"username"`
}
NewReplyEvent defines model for NewReplyEvent.
ParentId is the parent TWEET id this reply is attached to (nil/empty means the reply hangs directly off RootId). ParentUserId is the user id of the parent tweet's author — that's the routing key the server uses to forward the request to the right node when the parent tweet lives on a remote peer.
type NewReplyResponse ¶
NewReplyResponse defines model for NewReplyResponse.
type NewRetweetEvent ¶
NewRetweetEvent defines model for NewRetweetEvent.
type NewTweetEvent ¶
NewTweetEvent defines model for NewTweetEvent.
type NewUnfollowEvent ¶
type NewUnfollowEvent = NewFollowEvent
NewUnfollowEvent defines model for NewUnfollowEvent.
type PinTweetEvent ¶ added in v0.7.26
PinTweetEvent defines model for PinTweetEvent.
type ReTweetsCountResponse ¶
type ReTweetsCountResponse = LikesCountResponse
ReTweetsCountResponse defines model for ReTweetsCountResponse.
type RepliesResponse ¶
type RepliesResponse struct {
Cursor string `json:"cursor"`
Replies []domain.ReplyNode `json:"replies"`
UserId *domain.ID `json:"user_id,omitempty"`
}
RepliesResponse defines model for RepliesTreeResponse.
type ReportEvent ¶ added in v0.7.59
type ReportEvent struct {
Type domain.ModerationObjectType `json:"type"`
TargetUserID domain.ID `json:"target_user_id"`
TargetNodeID domain.ID `json:"target_node_id"`
ObjectID *domain.ID `json:"object_id,omitempty"`
Reason string `json:"reason"`
}
ReportEvent is published by a member node on the reports pubsub topic when a user clicks Report in the UI. It carries enough for a moderator to fetch the actual offending content (TargetNodeID is a routing hint so the moderator can hit the owner's node directly instead of looking it up via PUBLIC_GET_USER).
ObjectID is the tweet id for Type == ModerationTweetType and is nil when Type == ModerationUserType (the user itself is the target).
type ResponseError ¶ added in v0.5.140
ErrorResponse defines model for ErrorResponse.
func (ResponseError) Error ¶ added in v0.5.140
func (e ResponseError) Error() string
type SearchUsersEvent ¶ added in v0.7.26
type SearchUsersEvent struct {
Query string `json:"query"`
Cursor *string `json:"cursor,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
SearchUsersEvent defines model for SearchUsersEvent.
type SearchUsersResponse ¶ added in v0.7.26
type SearchUsersResponse = UsersResponse
SearchUsersResponse defines model for SearchUsersResponse.
type SubscribeUserEvent ¶ added in v0.7.26
type SubscribeUserEvent struct {
SelfId domain.ID `json:"self_id"`
TargetId domain.ID `json:"target_id"`
}
SubscribeUserEvent defines model for SubscribeUserEvent.
type TweetStatsResponse ¶
type TweetsResponse ¶
type TweetsResponse struct {
Cursor string `json:"cursor"`
Tweets []domain.Tweet `json:"tweets"`
UserId domain.ID `json:"user_id"`
}
TweetsResponse defines model for TweetsResponse.
type UnblockEvent ¶ added in v0.7.26
type UnblockEvent = BlockEvent
UnblockEvent defines model for UnblockEvent.
type UnbookmarkEvent ¶ added in v0.7.26
type UnbookmarkEvent struct {
UserId domain.ID `json:"user_id"`
TweetId domain.ID `json:"tweet_id"`
}
UnbookmarkEvent defines model for UnbookmarkEvent.
type UnmuteEvent ¶ added in v0.7.26
type UnmuteEvent = MuteEvent
UnmuteEvent defines model for UnmuteEvent.
type UnpinTweetEvent ¶ added in v0.7.26
type UnpinTweetEvent = PinTweetEvent
UnpinTweetEvent defines model for UnpinTweetEvent.
type UnretweetEvent ¶
type UnretweetEvent struct {
TweetId domain.ID `json:"tweet_id"`
RetweeterId domain.ID `json:"retweeter_id"`
}
UnretweetEvent defines model for UnretweetEvent.
type UnsubscribeUserEvent ¶ added in v0.7.26
type UnsubscribeUserEvent = SubscribeUserEvent
UnsubscribeUserEvent defines model for UnsubscribeUserEvent.
type UpdateFilterEvent ¶ added in v0.7.26
UpdateFilterEvent defines model for UpdateFilterEvent.
type UpdateFilterKeywordEvent ¶ added in v0.7.26
type UpdateFilterKeywordEvent struct {
UserId domain.ID `json:"user_id"`
KeywordId domain.ID `json:"keyword_id"`
Keyword string `json:"keyword"`
WholeWord bool `json:"whole_word"`
}
UpdateFilterKeywordEvent defines model for UpdateFilterKeywordEvent.
type UpdateMediaMetaEvent ¶ added in v0.7.26
type UpdateMediaMetaEvent struct {
UserId domain.ID `json:"user_id"`
Key string `json:"key"`
Description string `json:"description"`
FocusX float32 `json:"focus_x"`
FocusY float32 `json:"focus_y"`
}
UpdateMediaMetaEvent defines model for UpdateMediaMetaEvent.
type UploadImageEvent ¶
type UploadImageResponse ¶
type UsersResponse ¶
UsersResponse defines model for UsersResponse.
type ValidationEvent ¶ added in v0.3.75
type ValidationResult ¶ added in v0.3.75
type ValidationResult int
const ( Invalid ValidationResult = iota Valid )
func (ValidationResult) String ¶ added in v0.3.141
func (vr ValidationResult) String() string
type ValidationResultEvent ¶ added in v0.3.116
type ViewEvent ¶ added in v0.6.316
type ViewEvent struct {
TweetId domain.ID `json:"tweet_id"`
UserId domain.ID `json:"user_id"`
ViewerId domain.ID `json:"viewer_id"`
}
ViewEvent defines model for ViewEvent. UserId is the tweet author's id; ViewerId is the viewer's id.
type ViewsCountResponse ¶ added in v0.6.316
type ViewsCountResponse = LikesCountResponse
ViewsCountResponse defines model for ViewsCountResponse.