1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
import { FollowState } from '../actors/index.js'
import { AbuseStateType } from '../moderation/index.js'
import { PluginType_Type } from '../plugins/index.js'
export const UserNotificationType = {
NEW_VIDEO_FROM_SUBSCRIPTION: 1,
NEW_COMMENT_ON_MY_VIDEO: 2,
NEW_ABUSE_FOR_MODERATORS: 3,
BLACKLIST_ON_MY_VIDEO: 4,
UNBLACKLIST_ON_MY_VIDEO: 5,
MY_VIDEO_PUBLISHED: 6,
MY_VIDEO_IMPORT_SUCCESS: 7,
MY_VIDEO_IMPORT_ERROR: 8,
NEW_USER_REGISTRATION: 9,
NEW_FOLLOW: 10,
COMMENT_MENTION: 11,
VIDEO_AUTO_BLACKLIST_FOR_MODERATORS: 12,
NEW_INSTANCE_FOLLOWER: 13,
AUTO_INSTANCE_FOLLOWING: 14,
ABUSE_STATE_CHANGE: 15,
ABUSE_NEW_MESSAGE: 16,
NEW_PLUGIN_VERSION: 17,
NEW_PEERTUBE_VERSION: 18,
MY_VIDEO_STUDIO_EDITION_FINISHED: 19,
NEW_USER_REGISTRATION_REQUEST: 20
} as const
export type UserNotificationType_Type = typeof UserNotificationType[keyof typeof UserNotificationType]
export interface VideoInfo {
id: number
uuid: string
shortUUID: string
name: string
}
export interface AvatarInfo {
width: number
path: string
}
export interface ActorInfo {
id: number
displayName: string
name: string
host: string
avatars: AvatarInfo[]
avatar: AvatarInfo
}
export interface UserNotification {
id: number
type: UserNotificationType_Type
read: boolean
video?: VideoInfo & {
channel: ActorInfo
}
videoImport?: {
id: number
video?: VideoInfo
torrentName?: string
magnetUri?: string
targetUrl?: string
}
comment?: {
id: number
threadId: number
account: ActorInfo
video: VideoInfo
}
abuse?: {
id: number
state: AbuseStateType
video?: VideoInfo
comment?: {
threadId: number
video: VideoInfo
}
account?: ActorInfo
}
videoBlacklist?: {
id: number
video: VideoInfo
}
account?: ActorInfo
actorFollow?: {
id: number
follower: ActorInfo
state: FollowState
following: {
type: 'account' | 'channel' | 'instance'
name: string
displayName: string
host: string
}
}
plugin?: {
name: string
type: PluginType_Type
latestVersion: string
}
peertube?: {
latestVersion: string
}
registration?: {
id: number
username: string
}
createdAt: string
updatedAt: string
}
|