@laplace.live/internal 1.2.57 → 1.3.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.
- package/package.json +6 -2
- package/src/aicu.d.ts +120 -0
- package/src/aliyun.d.ts +61 -0
- package/{index.d.ts → src/bilibili.d.ts} +5 -2643
- package/src/common.d.ts +124 -0
- package/src/const/steam.ts +38 -0
- package/src/danmakus.d.ts +254 -0
- package/src/index.d.ts +15 -0
- package/src/kuaidi100.d.ts +56 -0
- package/src/laplace.d.ts +1608 -0
- package/src/loveava.d.ts +45 -0
- package/src/steam.d.ts +273 -0
- package/src/vtbs.d.ts +93 -0
- package/src/zeroroku.d.ts +23 -0
package/src/laplace.d.ts
ADDED
|
@@ -0,0 +1,1608 @@
|
|
|
1
|
+
import type { BilibiliInternal } from './bilibili'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* LAPLACE 内部 typings
|
|
5
|
+
*/
|
|
6
|
+
export declare namespace LaplaceInternal {
|
|
7
|
+
/**
|
|
8
|
+
* HTTP(S) 协议类型的 API
|
|
9
|
+
*/
|
|
10
|
+
export namespace HTTPS {
|
|
11
|
+
/**
|
|
12
|
+
* LAPLACE Workers
|
|
13
|
+
*/
|
|
14
|
+
export namespace Workers {
|
|
15
|
+
/**
|
|
16
|
+
* 获取云端弹幕机配置
|
|
17
|
+
* /laplace/remote-config
|
|
18
|
+
*/
|
|
19
|
+
export interface RemoteConfig {
|
|
20
|
+
headerText?: string
|
|
21
|
+
headerSubtitle?: string
|
|
22
|
+
headerLink?: string
|
|
23
|
+
headerLogo?: string
|
|
24
|
+
headerLogoWidth?: number
|
|
25
|
+
headerLogoHeight?: number
|
|
26
|
+
footerExtraText?: string
|
|
27
|
+
footerText?: string
|
|
28
|
+
footerLink?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Gatus status response
|
|
33
|
+
* /laplace/network
|
|
34
|
+
*/
|
|
35
|
+
export interface NetworkItem {
|
|
36
|
+
/** "miscs" */
|
|
37
|
+
group: string
|
|
38
|
+
/** miscs_bilibili-fingerprint-reporter */
|
|
39
|
+
key: string
|
|
40
|
+
/** bilibili-fingerprint-reporter */
|
|
41
|
+
name: string
|
|
42
|
+
results: {
|
|
43
|
+
status: number
|
|
44
|
+
duration: number
|
|
45
|
+
hostname?: string
|
|
46
|
+
success: boolean
|
|
47
|
+
/** 2024-04-28T08:22:07.19385135Z */
|
|
48
|
+
timestamp: string
|
|
49
|
+
errors?: string[]
|
|
50
|
+
conditionResults?: {
|
|
51
|
+
/** "[CERTIFICATE_EXPIRATION] > 48h" */
|
|
52
|
+
condition: string
|
|
53
|
+
success: boolean
|
|
54
|
+
}[]
|
|
55
|
+
}[]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Login Sync info
|
|
60
|
+
* A subset of `BilibiliInternal.HTTPS.Prod.LiveGetUserInfo`
|
|
61
|
+
*/
|
|
62
|
+
export interface LoginSyncInfo {
|
|
63
|
+
/** 0: 成功 */
|
|
64
|
+
code: number
|
|
65
|
+
message: string
|
|
66
|
+
data: {
|
|
67
|
+
isLogin: boolean
|
|
68
|
+
face: string
|
|
69
|
+
mid: number
|
|
70
|
+
uname: string
|
|
71
|
+
/** The actual `buvid` */
|
|
72
|
+
ack: string
|
|
73
|
+
fetchMode: 'login-sync' | 'anonymous' | 'built-in'
|
|
74
|
+
ackMode: 'guest' | 'passthrough' | 'builtin-passthrough'
|
|
75
|
+
fetcher: number
|
|
76
|
+
syncServer: boolean
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 获取云端表情包
|
|
82
|
+
* /laplace/remote-emotes
|
|
83
|
+
*/
|
|
84
|
+
export interface PspRemoteEmotesProps {
|
|
85
|
+
/**
|
|
86
|
+
* - 0: valid result
|
|
87
|
+
* - 403: not valid
|
|
88
|
+
*/
|
|
89
|
+
status: number
|
|
90
|
+
data: {
|
|
91
|
+
emoji: {
|
|
92
|
+
server_base: string
|
|
93
|
+
map: {
|
|
94
|
+
[key: string]: string
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* 直播间排名列表,由外部 API 聚合而来
|
|
102
|
+
* /laplace/ranking
|
|
103
|
+
*/
|
|
104
|
+
export interface RankingItem {
|
|
105
|
+
/**
|
|
106
|
+
* @minimum 1
|
|
107
|
+
*/
|
|
108
|
+
_laplace_rank: number
|
|
109
|
+
cate: string
|
|
110
|
+
uname: string
|
|
111
|
+
uid: number
|
|
112
|
+
face: string
|
|
113
|
+
cover: string
|
|
114
|
+
system_cover: string
|
|
115
|
+
start_time: number
|
|
116
|
+
roomid: number
|
|
117
|
+
watched?: number
|
|
118
|
+
watched_avg?: number
|
|
119
|
+
ten_minutes_counter: number
|
|
120
|
+
interaction_avg?: number
|
|
121
|
+
income?: number
|
|
122
|
+
income_avg?: number
|
|
123
|
+
danmakus?: number
|
|
124
|
+
danmakus_avg?: number
|
|
125
|
+
title: string
|
|
126
|
+
tags?: string[]
|
|
127
|
+
commentCount?: number
|
|
128
|
+
lastLiveIncome?: number
|
|
129
|
+
/**
|
|
130
|
+
* laplace/loveava 独有的热度/人气字段
|
|
131
|
+
*/
|
|
132
|
+
count?: number
|
|
133
|
+
/**
|
|
134
|
+
* 平均观看人数
|
|
135
|
+
*/
|
|
136
|
+
count_avg?: number
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** 关注 API 的数据库扩展 */
|
|
140
|
+
interface FollowingResponseExtended extends BilibiliInternal.HTTPS.Prod.GameCenterFollowingList {
|
|
141
|
+
/**
|
|
142
|
+
* 最后 KV 缓存写入时间戳
|
|
143
|
+
*/
|
|
144
|
+
last: number
|
|
145
|
+
/**
|
|
146
|
+
* 数据来源
|
|
147
|
+
*/
|
|
148
|
+
from: 'cache' | 'origin'
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 由 vtbs 整理来的直播间开播状态
|
|
153
|
+
*/
|
|
154
|
+
interface LiveState {
|
|
155
|
+
name: string
|
|
156
|
+
room: number
|
|
157
|
+
liveStatus: number
|
|
158
|
+
lastLive: {
|
|
159
|
+
time: number
|
|
160
|
+
}
|
|
161
|
+
title: string
|
|
162
|
+
time: number
|
|
163
|
+
liveStartTime: number
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* UID by Room
|
|
168
|
+
*/
|
|
169
|
+
interface UidByRoom {
|
|
170
|
+
/**
|
|
171
|
+
* 0 正常,404 未找到直播间
|
|
172
|
+
*/
|
|
173
|
+
status: 0 | 404
|
|
174
|
+
uid: number
|
|
175
|
+
/** 真实房间号 */
|
|
176
|
+
roomId: number
|
|
177
|
+
/** 短房间号 */
|
|
178
|
+
shortRoomId: number
|
|
179
|
+
/** 用户名 */
|
|
180
|
+
username: string | null
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* 哔哩哔哩装扮列表
|
|
185
|
+
*/
|
|
186
|
+
interface Suit {
|
|
187
|
+
id: number
|
|
188
|
+
name: string
|
|
189
|
+
description: string
|
|
190
|
+
startTime: number
|
|
191
|
+
totalPurchaseCount: number
|
|
192
|
+
user: number
|
|
193
|
+
username: string
|
|
194
|
+
owner: number
|
|
195
|
+
image_cover: string | null
|
|
196
|
+
createdAt: string
|
|
197
|
+
updatedAt: string
|
|
198
|
+
ownerDetails: {
|
|
199
|
+
id: number
|
|
200
|
+
room: number
|
|
201
|
+
username: string
|
|
202
|
+
guild: null
|
|
203
|
+
avatar: string
|
|
204
|
+
updatedAt: string
|
|
205
|
+
} | null
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* 哔哩哔哩收藏集列表
|
|
210
|
+
*/
|
|
211
|
+
interface Collection {
|
|
212
|
+
id: number
|
|
213
|
+
name: string
|
|
214
|
+
description: string
|
|
215
|
+
startTime: number
|
|
216
|
+
relatedUsers: number[]
|
|
217
|
+
totalPreorderCount: number
|
|
218
|
+
totalPurchaseCount: number
|
|
219
|
+
/** @deprecated use `lottery_image` */
|
|
220
|
+
act_square_img: string
|
|
221
|
+
lottery_image: string
|
|
222
|
+
createdAt: string
|
|
223
|
+
updatedAt: string
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* 日程表项目
|
|
228
|
+
* @link https://laplace.live/schedule
|
|
229
|
+
*/
|
|
230
|
+
export interface WeekItem {
|
|
231
|
+
/** 年份,例如 2024 */
|
|
232
|
+
year: number
|
|
233
|
+
/** 当前周数,例如 19 */
|
|
234
|
+
week: number
|
|
235
|
+
/** 哔哩哔哩动态对应 ID,只需要填入 ID 即可 */
|
|
236
|
+
bilibili_url?: string
|
|
237
|
+
events: EventItem[]
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Item of WeekItem events
|
|
242
|
+
* 此处 type 为简化版 `string`,在 laplace 本体仓库中有详细定义
|
|
243
|
+
*/
|
|
244
|
+
export interface EventItem {
|
|
245
|
+
/** 日期字符串,格式 YYYY-MM-DD */
|
|
246
|
+
date: string
|
|
247
|
+
/** 日程类型 */
|
|
248
|
+
type: string
|
|
249
|
+
/** 日程标题 */
|
|
250
|
+
title: string
|
|
251
|
+
/** 录播链接,此应填入完整 URL */
|
|
252
|
+
rec?: string
|
|
253
|
+
/** 是否被取消,此字段用于 iCal 日历 */
|
|
254
|
+
cancelled?: boolean
|
|
255
|
+
/** 取消原因 */
|
|
256
|
+
reason?: string
|
|
257
|
+
/** 录播是否为第三方录入 */
|
|
258
|
+
fans_rec?: boolean
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** 多媒体可用语言 */
|
|
262
|
+
export type MediaLanguages = 'zh' | 'en' | 'ja' | 'yue' | 'kr' | 'ru' | 'es' | 'fr'
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* 多媒体项目
|
|
266
|
+
*/
|
|
267
|
+
export interface MediaItem {
|
|
268
|
+
ver: number
|
|
269
|
+
/** 当前媒体语言,例如 `en` */
|
|
270
|
+
lang: MediaLanguages
|
|
271
|
+
/** 日期 */
|
|
272
|
+
date: string
|
|
273
|
+
/** 是否有切片,完整 URL */
|
|
274
|
+
clips?: string
|
|
275
|
+
/** 标题 */
|
|
276
|
+
title: string
|
|
277
|
+
/** alternate 名称,通常用于提供标题的无翻译原文 */
|
|
278
|
+
altName?: string
|
|
279
|
+
/** 是否为官方发布 */
|
|
280
|
+
official?: boolean
|
|
281
|
+
/** 作者/艺术家 */
|
|
282
|
+
author: string
|
|
283
|
+
/** 备注内容 */
|
|
284
|
+
note?: string
|
|
285
|
+
/** 是否为本站首发,LAPLACE 内部字段 */
|
|
286
|
+
exclusive?: boolean
|
|
287
|
+
/**
|
|
288
|
+
* 标签
|
|
289
|
+
* 如果一场直播内唱了多次同一首歌曲,会导致声称的文件名重复,用此属性定义额外后缀防止冲突
|
|
290
|
+
*/
|
|
291
|
+
tags?: string
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* 时间线项目
|
|
296
|
+
* @link https://laplace.live/timeline
|
|
297
|
+
*/
|
|
298
|
+
export interface TimelineItem {
|
|
299
|
+
/**
|
|
300
|
+
* - `hitokoto`: 一言
|
|
301
|
+
* - `video`: 视频
|
|
302
|
+
* - `event`: 事件
|
|
303
|
+
*/
|
|
304
|
+
type: 'hitokoto' | 'video' | 'event'
|
|
305
|
+
/** 内容 */
|
|
306
|
+
content: string
|
|
307
|
+
/** 事件关联人物 */
|
|
308
|
+
from_who: string
|
|
309
|
+
/** 是否含有音声,LAPLACE 内部字段 */
|
|
310
|
+
hasVoice?: boolean
|
|
311
|
+
/** 音声对应文件名,LAPLACE 内部字段 */
|
|
312
|
+
voiceFilename?: string
|
|
313
|
+
/** 事件发生点 */
|
|
314
|
+
from?: string
|
|
315
|
+
/** 事件消息来源 */
|
|
316
|
+
source?: string
|
|
317
|
+
/** 事件日期 */
|
|
318
|
+
date?: string
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* 开发日志项目
|
|
323
|
+
* @link https://laplace.live/blog
|
|
324
|
+
*/
|
|
325
|
+
export interface BlogItem {
|
|
326
|
+
id: number
|
|
327
|
+
date: string
|
|
328
|
+
title?: string
|
|
329
|
+
content: string | null
|
|
330
|
+
/** 给 Atom RSS 用的纯文本输出 */
|
|
331
|
+
plain?: string
|
|
332
|
+
author?: string
|
|
333
|
+
tags?: string[]
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* SuperChat FoS
|
|
338
|
+
* @link /laplace/superchat-fos
|
|
339
|
+
*/
|
|
340
|
+
export interface SuperChatFoS {
|
|
341
|
+
code: number
|
|
342
|
+
/** 报错时会返回 */
|
|
343
|
+
message?: string
|
|
344
|
+
content: string
|
|
345
|
+
moderated: boolean
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* 用户信息
|
|
350
|
+
* @link /laplace/bilibili-user/:uid
|
|
351
|
+
*/
|
|
352
|
+
export interface BilibiliUser {
|
|
353
|
+
/** 对应 UID */
|
|
354
|
+
id: number
|
|
355
|
+
username: string
|
|
356
|
+
/**
|
|
357
|
+
* 之前泄漏的工会字段
|
|
358
|
+
*
|
|
359
|
+
* @deprecated use `guildInfo` instead
|
|
360
|
+
*/
|
|
361
|
+
guild: string
|
|
362
|
+
room: number
|
|
363
|
+
liveFansCount: number
|
|
364
|
+
liveFansMedal: string | null
|
|
365
|
+
avatar: string | null
|
|
366
|
+
/** 2024-12-15T03:44:13.788Z */
|
|
367
|
+
updatedAt: string
|
|
368
|
+
/**
|
|
369
|
+
* 工会详细信息
|
|
370
|
+
*
|
|
371
|
+
* @deprecated use `guildInfo` instead
|
|
372
|
+
*/
|
|
373
|
+
guildDetails: {
|
|
374
|
+
id: number
|
|
375
|
+
name: string
|
|
376
|
+
} | null
|
|
377
|
+
/** 工会详细信息 */
|
|
378
|
+
guildInfo: {
|
|
379
|
+
/**
|
|
380
|
+
* @deprecated use `history` instead, latest guild is now migrated to history in Sep 25, 2025, 4:51:27 AM PDT
|
|
381
|
+
*/
|
|
382
|
+
current: {
|
|
383
|
+
name: string
|
|
384
|
+
/** Unix timestamp
|
|
385
|
+
*
|
|
386
|
+
* @example 1758039520166
|
|
387
|
+
*/
|
|
388
|
+
updatedAt: number
|
|
389
|
+
} | null
|
|
390
|
+
history: {
|
|
391
|
+
name: string
|
|
392
|
+
/** Unix timestamp
|
|
393
|
+
*
|
|
394
|
+
* @example 1758039520166
|
|
395
|
+
*/
|
|
396
|
+
updatedAt: number
|
|
397
|
+
}[]
|
|
398
|
+
} | null
|
|
399
|
+
/** MCN 机构详细信息 (mcnId is internal-only, not exposed in public API) */
|
|
400
|
+
mcnInfo: {
|
|
401
|
+
history: {
|
|
402
|
+
/** MCN agency name */
|
|
403
|
+
mcnName: string
|
|
404
|
+
/** Unix timestamp
|
|
405
|
+
*
|
|
406
|
+
* @example 1758039520166
|
|
407
|
+
*/
|
|
408
|
+
updatedAt: number
|
|
409
|
+
}[]
|
|
410
|
+
} | null
|
|
411
|
+
/** Resolved tags with usage counts. Only present when `?fields=tags` is requested. */
|
|
412
|
+
tags?: LaplaceInternal.HTTPS.Workers.TagWithCount[]
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* 列表哔哩哔哩用户(分页)
|
|
417
|
+
* @link /laplace/bilibili-users
|
|
418
|
+
*
|
|
419
|
+
* Query params:
|
|
420
|
+
* - `?page=1` — page number (min 1, default 1)
|
|
421
|
+
* - `?pageSize=100` — items per page (1–500, default 100)
|
|
422
|
+
* - `?all=true` — return all rows without pagination
|
|
423
|
+
* - `?tags=1,2,3` — filter to users who have all listed tag IDs (AND)
|
|
424
|
+
* - `?search=keyword` — filter by UID (exact) or username (case-insensitive partial match)
|
|
425
|
+
*/
|
|
426
|
+
export interface ListBilibiliUsers {
|
|
427
|
+
data: ListBilibiliUsersItem[]
|
|
428
|
+
total: number
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Single user item returned by the list endpoint.
|
|
433
|
+
*
|
|
434
|
+
* Differs from {@link BilibiliUser} (single-user endpoint) because the list
|
|
435
|
+
* query returns raw DB rows without relation joins or sanitization:
|
|
436
|
+
* - `guild` is a raw numeric FK (not a resolved name string)
|
|
437
|
+
* - `tags` is a raw `int[]` (not resolved {@link TagWithCount} objects)
|
|
438
|
+
* - `mcnInfo.history` entries include `mcnId` (stripped in single-user endpoint)
|
|
439
|
+
* - No `guildDetails` relation (only present when joined via single-user query)
|
|
440
|
+
*/
|
|
441
|
+
export interface ListBilibiliUsersItem {
|
|
442
|
+
id: number
|
|
443
|
+
room: number | null
|
|
444
|
+
username: string
|
|
445
|
+
liveFansCount: number | null
|
|
446
|
+
liveFansMedal: string | null
|
|
447
|
+
liveStatus: number | null
|
|
448
|
+
/** @deprecated use `guildInfo` instead */
|
|
449
|
+
guild: number | null
|
|
450
|
+
avatar: string | null
|
|
451
|
+
guildInfo: {
|
|
452
|
+
history: {
|
|
453
|
+
name: string
|
|
454
|
+
/** Unix timestamp */
|
|
455
|
+
updatedAt: number
|
|
456
|
+
}[]
|
|
457
|
+
} | null
|
|
458
|
+
mcnInfo: {
|
|
459
|
+
history: {
|
|
460
|
+
mcnId: number
|
|
461
|
+
mcnName: string
|
|
462
|
+
/** Unix timestamp */
|
|
463
|
+
updatedAt: number
|
|
464
|
+
}[]
|
|
465
|
+
} | null
|
|
466
|
+
/** Raw integer tag IDs assigned to this user */
|
|
467
|
+
tags: number[] | null
|
|
468
|
+
/** ISO 8601 timestamp */
|
|
469
|
+
updatedAt: string
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// ============================================
|
|
473
|
+
// Tag Types
|
|
474
|
+
// ============================================
|
|
475
|
+
|
|
476
|
+
/** Tag definition (viewer-facing, no internal fields) */
|
|
477
|
+
export interface Tag {
|
|
478
|
+
id: number
|
|
479
|
+
name: string
|
|
480
|
+
color: string | null
|
|
481
|
+
/** Emoji fallback -- shown when `icon` is not set. When both exist, `icon` takes priority. */
|
|
482
|
+
emoji: string | null
|
|
483
|
+
/** Icon URL -- takes priority over `emoji` when both are set. */
|
|
484
|
+
icon: string | null
|
|
485
|
+
description: string | null
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/** Tag with usage count (viewer-facing, entity type is not exposed) */
|
|
489
|
+
export interface TagWithCount extends Tag {
|
|
490
|
+
/** Number of entities using this tag, computed on-the-fly for the requested entity type. */
|
|
491
|
+
count: number
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/** Full tag definition (admin-facing, includes internal fields) */
|
|
495
|
+
export interface TagAdmin extends Tag {
|
|
496
|
+
scope: string[] | null
|
|
497
|
+
/** Per-entity-type usage counts, computed on-the-fly. Keys are entity type names (e.g. `bilibili_user`, `bilibili_meme`). */
|
|
498
|
+
entityCounts: Record<string, number>
|
|
499
|
+
createdAt: string
|
|
500
|
+
updatedAt: string
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/** Request body for POST /laplace/tags (create tag) */
|
|
504
|
+
export interface TagCreateRequest {
|
|
505
|
+
name: string
|
|
506
|
+
color?: string
|
|
507
|
+
emoji?: string
|
|
508
|
+
icon?: string
|
|
509
|
+
description?: string
|
|
510
|
+
scope?: string[]
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
/** Request body for PATCH /laplace/tags/:id (update tag) */
|
|
514
|
+
export interface TagUpdateRequest {
|
|
515
|
+
name?: string
|
|
516
|
+
color?: string | null
|
|
517
|
+
emoji?: string | null
|
|
518
|
+
icon?: string | null
|
|
519
|
+
description?: string | null
|
|
520
|
+
scope?: string[] | null
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/** Request body for POST /laplace/tags/assign (assign tags to entity) */
|
|
524
|
+
export interface TagAssignRequest {
|
|
525
|
+
tagIds: number[]
|
|
526
|
+
entityType: string
|
|
527
|
+
entityId: number
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/** Request body for DELETE /laplace/tags/assign (unassign tags from entity) */
|
|
531
|
+
export interface TagUnassignRequest {
|
|
532
|
+
tagIds: number[]
|
|
533
|
+
entityType: string
|
|
534
|
+
entityId: number
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* 礼物配置信息
|
|
539
|
+
*/
|
|
540
|
+
export interface RoomGiftItem extends BilibiliInternal.HTTPS.Prod.RoomGiftItemPick {
|
|
541
|
+
/** 出现的时间 */
|
|
542
|
+
firstSeen?: Date
|
|
543
|
+
/** 出现的直播间 */
|
|
544
|
+
firstSeenRoom?: number
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* 礼物配置列表
|
|
549
|
+
* @link /bilibili/room-gift-config/25034104?list=1
|
|
550
|
+
*/
|
|
551
|
+
export interface RoomGiftConfigList {
|
|
552
|
+
code: number
|
|
553
|
+
message: string
|
|
554
|
+
ttl: number
|
|
555
|
+
gift_ttl: number
|
|
556
|
+
gift_version: number
|
|
557
|
+
data: {
|
|
558
|
+
list: RoomGiftItem[]
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* 获取直播分区列表
|
|
564
|
+
* @link /bilibili/live-areas
|
|
565
|
+
*/
|
|
566
|
+
export interface LiveAreas {
|
|
567
|
+
/** 0 代表成功 */
|
|
568
|
+
code: number
|
|
569
|
+
/** 成功时返回 "success" */
|
|
570
|
+
message: string
|
|
571
|
+
/** 直播分区列表 */
|
|
572
|
+
data: LiveAreaItem[]
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* 直播分区项
|
|
577
|
+
*/
|
|
578
|
+
export interface LiveAreaItem {
|
|
579
|
+
/** 分区 ID */
|
|
580
|
+
id: string
|
|
581
|
+
/** 分区名称 */
|
|
582
|
+
name: string
|
|
583
|
+
/** 父分区 ID */
|
|
584
|
+
parentId: string
|
|
585
|
+
/** 父分区名称 */
|
|
586
|
+
parentName: string
|
|
587
|
+
/** 完整分区名称,格式为 `${parentName}-${name}` */
|
|
588
|
+
cate: string
|
|
589
|
+
/** 分区图标 URL */
|
|
590
|
+
icon: string
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Response interface for the transformed LiveGiftEffect data
|
|
595
|
+
* Used by frontend to consume the simplified gift effect data
|
|
596
|
+
* @example /bilibili/live-gift-effect/25034104
|
|
597
|
+
*/
|
|
598
|
+
export interface LiveGiftEffect {
|
|
599
|
+
code: number
|
|
600
|
+
message: string
|
|
601
|
+
data: LiveGiftEffectItem[]
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Simplified gift effect item with only necessary fields
|
|
606
|
+
*/
|
|
607
|
+
export interface LiveGiftEffectItem {
|
|
608
|
+
type: number
|
|
609
|
+
id: number
|
|
610
|
+
bind_gift_ids: number[]
|
|
611
|
+
video: string
|
|
612
|
+
/** json config URL, only the hash part */
|
|
613
|
+
json: string
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Successful response for guild members list
|
|
618
|
+
* @example /laplace/bilibili-guilds/:guildName
|
|
619
|
+
*/
|
|
620
|
+
export interface ListGuildMembers {
|
|
621
|
+
success: true
|
|
622
|
+
guild: string
|
|
623
|
+
count: number
|
|
624
|
+
members: LaplaceInternal.HTTPS.Workers.BilibiliUser[]
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* Error response when guild is not found
|
|
629
|
+
* @example /laplace/bilibili-guilds/:guildName
|
|
630
|
+
*/
|
|
631
|
+
export interface ListGuildMembersNotFound {
|
|
632
|
+
success: false
|
|
633
|
+
error: string
|
|
634
|
+
guild: string
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Request body for guild info update
|
|
639
|
+
* @example POST /laplace/guild-update
|
|
640
|
+
*/
|
|
641
|
+
export interface UpdateGuildInfoRequest {
|
|
642
|
+
uid: number
|
|
643
|
+
guildName: string
|
|
644
|
+
updatedAt?: number
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* Successful response for guild info update
|
|
649
|
+
* @example POST /laplace/guild-update
|
|
650
|
+
*/
|
|
651
|
+
export interface UpdateGuildInfoResponse {
|
|
652
|
+
success: true
|
|
653
|
+
message: string
|
|
654
|
+
uid: number
|
|
655
|
+
guildName: string
|
|
656
|
+
updatedAt: number
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* Error response for guild info update
|
|
661
|
+
* @example POST /laplace/guild-update
|
|
662
|
+
*/
|
|
663
|
+
export interface UpdateGuildInfoError {
|
|
664
|
+
success: false
|
|
665
|
+
error: string
|
|
666
|
+
uid?: number
|
|
667
|
+
details?: string
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// ============================================
|
|
671
|
+
// Fertility Cycle Types
|
|
672
|
+
// ============================================
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* Fertility status enum values
|
|
676
|
+
*
|
|
677
|
+
* @since Jan 29, 2026
|
|
678
|
+
* @example GET /bilibili/fertility/:uid
|
|
679
|
+
* @example GET /bilibili/fertilities
|
|
680
|
+
*/
|
|
681
|
+
export type FertilityStatus = 'menstruating' | 'fertile' | 'ovulating' | 'normal'
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* A single cycle history entry - tracks each period event
|
|
685
|
+
* Stored in the `cycleHistory` JSONB column
|
|
686
|
+
*/
|
|
687
|
+
export interface CycleHistoryItem {
|
|
688
|
+
/** Unix timestamp (ms) - when this period started */
|
|
689
|
+
periodStart: number
|
|
690
|
+
/** Optional: days this period lasted (user may not track) */
|
|
691
|
+
periodLength?: number
|
|
692
|
+
/** Unix timestamp (ms) - when this entry was recorded */
|
|
693
|
+
submittedAt: number
|
|
694
|
+
/** Optional: URL or description of the evidence source (e.g., livestream clip, tweet) */
|
|
695
|
+
source?: string
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Result of fertility status calculation
|
|
700
|
+
* Returned by calculateFertilityStatus utility
|
|
701
|
+
*/
|
|
702
|
+
export interface CycleCalculationResult {
|
|
703
|
+
status: FertilityStatus
|
|
704
|
+
/** Current day in the menstrual cycle (1-indexed) */
|
|
705
|
+
dayInCycle: number
|
|
706
|
+
/** Calculated from history or user-stated preference */
|
|
707
|
+
effectiveCycleLength: number
|
|
708
|
+
/** Calculated from history or user-stated preference */
|
|
709
|
+
effectivePeriodLength: number
|
|
710
|
+
/** Calculated ovulation day (cycleLength - 14) */
|
|
711
|
+
ovulationDay: number
|
|
712
|
+
/** Predicted next period start date */
|
|
713
|
+
nextPeriod: Date
|
|
714
|
+
/** How many history entries used for calculation */
|
|
715
|
+
dataPoints: number
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* Response for GET /bilibili/fertility/:uid
|
|
720
|
+
*/
|
|
721
|
+
export interface FertilityUserResponse {
|
|
722
|
+
uid: number
|
|
723
|
+
user: {
|
|
724
|
+
username: string
|
|
725
|
+
avatar: string | null
|
|
726
|
+
room: number | null
|
|
727
|
+
/** 0 = offline, 1 = live, 2 = rotating */
|
|
728
|
+
liveStatus: number | null
|
|
729
|
+
/** Number of live room membership */
|
|
730
|
+
liveFansCount: number | null
|
|
731
|
+
/** Guild membership info */
|
|
732
|
+
guildInfo: {
|
|
733
|
+
history: {
|
|
734
|
+
name: string
|
|
735
|
+
/** Unix timestamp in milliseconds */
|
|
736
|
+
updatedAt: number
|
|
737
|
+
}[]
|
|
738
|
+
} | null
|
|
739
|
+
/** MCN agency membership info */
|
|
740
|
+
mcnInfo: {
|
|
741
|
+
history: {
|
|
742
|
+
/** MCN agency ID */
|
|
743
|
+
mcnId: number
|
|
744
|
+
/** MCN agency name */
|
|
745
|
+
mcnName: string
|
|
746
|
+
/** Unix timestamp in milliseconds */
|
|
747
|
+
updatedAt: number
|
|
748
|
+
}[]
|
|
749
|
+
} | null
|
|
750
|
+
} | null
|
|
751
|
+
status: FertilityStatus
|
|
752
|
+
dayInCycle: number
|
|
753
|
+
ovulationDay: number
|
|
754
|
+
/** ISO date string (YYYY-MM-DD) */
|
|
755
|
+
nextPeriod: string
|
|
756
|
+
effectiveCycleLength: number
|
|
757
|
+
effectivePeriodLength: number
|
|
758
|
+
dataPoints: number
|
|
759
|
+
userPreferences: {
|
|
760
|
+
cycleLength: number
|
|
761
|
+
periodLength: number
|
|
762
|
+
}
|
|
763
|
+
history: CycleHistoryItem[]
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Single user item in list response
|
|
768
|
+
* @example GET /bilibili/fertilities
|
|
769
|
+
*/
|
|
770
|
+
export interface FertilityListItem {
|
|
771
|
+
uid: number
|
|
772
|
+
user: {
|
|
773
|
+
username: string
|
|
774
|
+
avatar: string | null
|
|
775
|
+
room: number | null
|
|
776
|
+
/** 0 = offline, 1 = live, 2 = rotating */
|
|
777
|
+
liveStatus: number | null
|
|
778
|
+
/** Number of live room followers */
|
|
779
|
+
liveFansCount: number | null
|
|
780
|
+
/** Guild membership info */
|
|
781
|
+
guildInfo: {
|
|
782
|
+
history: {
|
|
783
|
+
name: string
|
|
784
|
+
/** Unix timestamp in milliseconds */
|
|
785
|
+
updatedAt: number
|
|
786
|
+
}[]
|
|
787
|
+
} | null
|
|
788
|
+
/** MCN agency membership info */
|
|
789
|
+
mcnInfo: {
|
|
790
|
+
history: {
|
|
791
|
+
/** MCN agency ID */
|
|
792
|
+
mcnId: number
|
|
793
|
+
/** MCN agency name */
|
|
794
|
+
mcnName: string
|
|
795
|
+
/** Unix timestamp in milliseconds */
|
|
796
|
+
updatedAt: number
|
|
797
|
+
}[]
|
|
798
|
+
} | null
|
|
799
|
+
} | null
|
|
800
|
+
status: FertilityStatus
|
|
801
|
+
dayInCycle: number
|
|
802
|
+
/** Expected ovulation day in cycle (effectiveCycleLength - 14) */
|
|
803
|
+
ovulationDay: number
|
|
804
|
+
/** ISO date string (YYYY-MM-DD) */
|
|
805
|
+
nextPeriod: string
|
|
806
|
+
/** Calculated cycle length based on history (median) or user preference */
|
|
807
|
+
effectiveCycleLength: number
|
|
808
|
+
/** Calculated period length based on history (mean) or user preference */
|
|
809
|
+
effectivePeriodLength: number
|
|
810
|
+
/** Number of history entries used for calculation */
|
|
811
|
+
dataPoints: number
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* Response for GET /bilibili/fertilities
|
|
816
|
+
*/
|
|
817
|
+
export interface FertilityListResponse {
|
|
818
|
+
data: FertilityListItem[]
|
|
819
|
+
total: number
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
/**
|
|
823
|
+
* Request body for POST /bilibili/fertility-submit
|
|
824
|
+
*/
|
|
825
|
+
export interface FertilitySubmitRequest {
|
|
826
|
+
/** Bilibili user ID */
|
|
827
|
+
uid: number
|
|
828
|
+
/** Unix timestamp (ms) when period started */
|
|
829
|
+
periodStart: number
|
|
830
|
+
/** Optional: How many days this period lasted (1-15) */
|
|
831
|
+
periodLength?: number
|
|
832
|
+
/** Optional: Update user's preferred cycle length (15-60) */
|
|
833
|
+
cycleLength?: number
|
|
834
|
+
/** Optional: Evidence URL (must be a valid URL, max 256 chars) */
|
|
835
|
+
source?: string
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/**
|
|
839
|
+
* Success response for POST /bilibili/fertility-submit
|
|
840
|
+
*/
|
|
841
|
+
export interface FertilitySubmitResponse {
|
|
842
|
+
success: true
|
|
843
|
+
uid: number
|
|
844
|
+
historyCount: number
|
|
845
|
+
/** ISO timestamp string */
|
|
846
|
+
lastPeriodStart: string
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// ============================================
|
|
850
|
+
// Fertility Cycle Entry Management (Admin)
|
|
851
|
+
// ============================================
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* Request body for PATCH /laplace/fertility-entry/:uid
|
|
855
|
+
* Updates a specific history entry identified by originalPeriodStart
|
|
856
|
+
*/
|
|
857
|
+
export interface FertilityEntryUpdateRequest {
|
|
858
|
+
/** Required: periodStart of the entry to update (identifier) */
|
|
859
|
+
originalPeriodStart: number
|
|
860
|
+
/** Optional: New periodStart value (Unix timestamp ms) */
|
|
861
|
+
periodStart?: number
|
|
862
|
+
/** Optional: Period length (1-15 days), or null to clear */
|
|
863
|
+
periodLength?: number | null
|
|
864
|
+
/** Optional: Evidence URL, or null to clear */
|
|
865
|
+
source?: string | null
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
/**
|
|
869
|
+
* Request body for DELETE /laplace/fertility-entry/:uid
|
|
870
|
+
* Deletes a specific history entry identified by periodStart
|
|
871
|
+
*/
|
|
872
|
+
export interface FertilityEntryDeleteRequest {
|
|
873
|
+
/** Required: periodStart of the entry to delete */
|
|
874
|
+
periodStart: number
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
/**
|
|
878
|
+
* Response for PATCH/DELETE /laplace/fertility-entry/:uid
|
|
879
|
+
*/
|
|
880
|
+
export interface FertilityEntryActionResponse {
|
|
881
|
+
success: true
|
|
882
|
+
uid: number
|
|
883
|
+
historyCount: number
|
|
884
|
+
/** ISO timestamp string */
|
|
885
|
+
lastPeriodStart: string
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// ============================================
|
|
889
|
+
// Fertility Contribution Types (Anonymous Submissions)
|
|
890
|
+
// ============================================
|
|
891
|
+
|
|
892
|
+
/**
|
|
893
|
+
* Status of a fertility contribution
|
|
894
|
+
*/
|
|
895
|
+
export type ContributionStatus = 'pending' | 'approved' | 'rejected'
|
|
896
|
+
|
|
897
|
+
/**
|
|
898
|
+
* Request body for POST /laplace/fertility-contribute
|
|
899
|
+
* Anonymous users submit period data with Turnstile verification
|
|
900
|
+
*/
|
|
901
|
+
export interface FertilityContributeRequest {
|
|
902
|
+
/** Bilibili user ID */
|
|
903
|
+
uid: number
|
|
904
|
+
/** Unix timestamp (ms) when period started */
|
|
905
|
+
periodStart: number
|
|
906
|
+
/** Optional: How many days this period lasted (1-15) */
|
|
907
|
+
periodLength?: number
|
|
908
|
+
/** Optional: Update user's preferred cycle length (15-60) */
|
|
909
|
+
cycleLength?: number
|
|
910
|
+
/** Evidence URL (required, must be HTTP/HTTPS, max 256 chars) */
|
|
911
|
+
source: string
|
|
912
|
+
/** Cloudflare Turnstile token for bot verification */
|
|
913
|
+
turnstileToken: string
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
/**
|
|
917
|
+
* A fertility contribution record
|
|
918
|
+
* Returned by GET /laplace/fertility-contributions
|
|
919
|
+
*/
|
|
920
|
+
export interface FertilityContribution {
|
|
921
|
+
id: number
|
|
922
|
+
uid: number
|
|
923
|
+
periodStart: number
|
|
924
|
+
periodLength?: number
|
|
925
|
+
cycleLength?: number
|
|
926
|
+
source?: string
|
|
927
|
+
status: ContributionStatus
|
|
928
|
+
contributorIp?: string
|
|
929
|
+
/** ISO timestamp string */
|
|
930
|
+
createdAt: string
|
|
931
|
+
/** ISO timestamp string */
|
|
932
|
+
reviewedAt?: string
|
|
933
|
+
rejectReason?: string
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
/**
|
|
937
|
+
* Query parameters for GET /laplace/fertility-contributions
|
|
938
|
+
*/
|
|
939
|
+
export interface FertilityContributionsListQuery {
|
|
940
|
+
/** Filter by status */
|
|
941
|
+
status?: ContributionStatus
|
|
942
|
+
/** Filter by target user UID */
|
|
943
|
+
uid?: number
|
|
944
|
+
/** Maximum number of results (1-500, default: 100) */
|
|
945
|
+
limit?: number
|
|
946
|
+
/** Offset for pagination (default: 0) */
|
|
947
|
+
offset?: number
|
|
948
|
+
/** Field to sort by (default: 'createdAt') */
|
|
949
|
+
sortBy?: 'createdAt' | 'reviewedAt'
|
|
950
|
+
/** Sort order (default: 'desc') */
|
|
951
|
+
sort?: 'asc' | 'desc'
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
/**
|
|
955
|
+
* Response for GET /laplace/fertility-contributions
|
|
956
|
+
*/
|
|
957
|
+
export interface FertilityContributionsListResponse {
|
|
958
|
+
data: FertilityContribution[]
|
|
959
|
+
total: number
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* Success response for POST /laplace/fertility-contribute
|
|
964
|
+
*/
|
|
965
|
+
export interface FertilityContributeResponse {
|
|
966
|
+
success: true
|
|
967
|
+
id: number
|
|
968
|
+
message: string
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/**
|
|
972
|
+
* Request body for POST /laplace/fertility-contribution-reject/:id
|
|
973
|
+
*/
|
|
974
|
+
export interface FertilityContributionRejectRequest {
|
|
975
|
+
reason?: string
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
/**
|
|
979
|
+
* Response for approve/reject endpoints
|
|
980
|
+
*/
|
|
981
|
+
export interface FertilityContributionActionResponse {
|
|
982
|
+
success: true
|
|
983
|
+
id: number
|
|
984
|
+
status: ContributionStatus
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
/**
|
|
988
|
+
* Request body for PATCH /laplace/fertility-contribution-update/:id
|
|
989
|
+
* All fields are optional - only provided fields will be updated
|
|
990
|
+
*/
|
|
991
|
+
export interface FertilityContributionUpdateRequest {
|
|
992
|
+
/** Bilibili user ID */
|
|
993
|
+
uid?: number
|
|
994
|
+
/** Unix timestamp (ms) when period started */
|
|
995
|
+
periodStart?: number
|
|
996
|
+
/** How many days this period lasted (1-15), or null to clear */
|
|
997
|
+
periodLength?: number | null
|
|
998
|
+
/** User's preferred cycle length (15-60), or null to clear */
|
|
999
|
+
cycleLength?: number | null
|
|
1000
|
+
/** Evidence URL (must be HTTP/HTTPS, max 256 chars), or null to remove */
|
|
1001
|
+
source?: string | null
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
/**
|
|
1005
|
+
* Response for PATCH /laplace/fertility-contribution-update/:id
|
|
1006
|
+
*/
|
|
1007
|
+
export interface FertilityContributionUpdateResponse {
|
|
1008
|
+
success: true
|
|
1009
|
+
id: number
|
|
1010
|
+
contribution?: FertilityContribution
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
/**
|
|
1014
|
+
* Response for GET /laplace/fertility-contribution-stats
|
|
1015
|
+
* Public endpoint showing contribution statistics
|
|
1016
|
+
*/
|
|
1017
|
+
export interface FertilityContributionStatsResponse {
|
|
1018
|
+
pending: number
|
|
1019
|
+
approved: number
|
|
1020
|
+
rejected: number
|
|
1021
|
+
total: number
|
|
1022
|
+
/** Average time from submission to approval/rejection in milliseconds */
|
|
1023
|
+
avgProcessingTimeMs: number | null
|
|
1024
|
+
/** Average time from submission to approval/rejection in hours (1 decimal) */
|
|
1025
|
+
avgProcessingTimeHours: number | null
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
// ============================================
|
|
1029
|
+
// Meme Types
|
|
1030
|
+
// ============================================
|
|
1031
|
+
|
|
1032
|
+
/** Meme list item with resolved tags and user info (GET /laplace/memes) */
|
|
1033
|
+
export interface Meme {
|
|
1034
|
+
id: number
|
|
1035
|
+
uid: number
|
|
1036
|
+
content: string
|
|
1037
|
+
tags: TagWithCount[]
|
|
1038
|
+
copyCount: number
|
|
1039
|
+
createdAt: string
|
|
1040
|
+
updatedAt: string
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
/** Meme with user details (list response item) */
|
|
1044
|
+
export interface MemeWithUser extends Meme {
|
|
1045
|
+
username: string | null
|
|
1046
|
+
avatar: string | null
|
|
1047
|
+
room: number | null
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
/** Query params for GET /laplace/memes */
|
|
1051
|
+
export interface MemeListQuery {
|
|
1052
|
+
uid?: number
|
|
1053
|
+
tags?: number[]
|
|
1054
|
+
sortBy?: 'copyCount' | 'createdAt'
|
|
1055
|
+
sort?: 'asc' | 'desc'
|
|
1056
|
+
limit?: number
|
|
1057
|
+
offset?: number
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
/** Response for GET /laplace/memes */
|
|
1061
|
+
export interface MemeListResponse {
|
|
1062
|
+
data: MemeWithUser[]
|
|
1063
|
+
total: number
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
/** Request body for POST /laplace/memes (admin direct add) */
|
|
1067
|
+
export interface MemeCreateRequest {
|
|
1068
|
+
uid: number
|
|
1069
|
+
content: string
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
/** Request body for PATCH /laplace/memes/:id (update approved meme) */
|
|
1073
|
+
export interface MemeUpdateRequest {
|
|
1074
|
+
content?: string
|
|
1075
|
+
tags?: number[] | null
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
/** Response for POST /laplace/memes and DELETE /laplace/memes/:id (admin only) */
|
|
1079
|
+
export interface MemeActionResponse {
|
|
1080
|
+
success: true
|
|
1081
|
+
id: number
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/** Request body for POST /laplace/meme-contribute */
|
|
1085
|
+
export interface MemeContributeRequest {
|
|
1086
|
+
uid: number
|
|
1087
|
+
content: string
|
|
1088
|
+
note?: string
|
|
1089
|
+
/** Existing tag IDs to suggest for this meme (max 10) */
|
|
1090
|
+
tags?: number[]
|
|
1091
|
+
turnstileToken: string
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
/** Success response for POST /laplace/meme-contribute */
|
|
1095
|
+
export interface MemeContributeResponse {
|
|
1096
|
+
success: true
|
|
1097
|
+
id: number
|
|
1098
|
+
message: string
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
/** Meme contribution record (GET /laplace/meme-contributions) */
|
|
1102
|
+
export interface MemeContribution {
|
|
1103
|
+
id: number
|
|
1104
|
+
uid: number
|
|
1105
|
+
content: string
|
|
1106
|
+
note?: string | null
|
|
1107
|
+
tags?: number[] | null
|
|
1108
|
+
status: ContributionStatus
|
|
1109
|
+
contributorIp?: string
|
|
1110
|
+
createdAt: string
|
|
1111
|
+
reviewedAt?: string
|
|
1112
|
+
rejectReason?: string
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
/** Query params for GET /laplace/meme-contributions */
|
|
1116
|
+
export interface MemeContributionsListQuery {
|
|
1117
|
+
status?: ContributionStatus
|
|
1118
|
+
uid?: number
|
|
1119
|
+
limit?: number
|
|
1120
|
+
offset?: number
|
|
1121
|
+
sortBy?: 'createdAt' | 'reviewedAt'
|
|
1122
|
+
sort?: 'asc' | 'desc'
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
/** Response for GET /laplace/meme-contributions */
|
|
1126
|
+
export interface MemeContributionsListResponse {
|
|
1127
|
+
data: MemeContribution[]
|
|
1128
|
+
total: number
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
/** Request body for POST /laplace/meme-contribution-reject/:id */
|
|
1132
|
+
export interface MemeContributionRejectRequest {
|
|
1133
|
+
reason?: string
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
/** Response for approve/reject meme contribution */
|
|
1137
|
+
export interface MemeContributionActionResponse {
|
|
1138
|
+
success: true
|
|
1139
|
+
id: number
|
|
1140
|
+
status: ContributionStatus
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
/** Request body for PATCH /laplace/meme-contribution-update/:id */
|
|
1144
|
+
export interface MemeContributionUpdateRequest {
|
|
1145
|
+
uid?: number
|
|
1146
|
+
content?: string
|
|
1147
|
+
note?: string | null
|
|
1148
|
+
tags?: number[] | null
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/** Response for PATCH /laplace/meme-contribution-update/:id */
|
|
1152
|
+
export interface MemeContributionUpdateResponse {
|
|
1153
|
+
success: true
|
|
1154
|
+
id: number
|
|
1155
|
+
contribution?: MemeContribution
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
/** Response for GET /laplace/meme-contribution-stats */
|
|
1159
|
+
export interface MemeContributionStatsResponse {
|
|
1160
|
+
pending: number
|
|
1161
|
+
approved: number
|
|
1162
|
+
rejected: number
|
|
1163
|
+
total: number
|
|
1164
|
+
avgProcessingTimeMs: number | null
|
|
1165
|
+
avgProcessingTimeHours: number | null
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
/** Response for POST /laplace/meme-copy/:id */
|
|
1169
|
+
export interface MemeCopyResponse {
|
|
1170
|
+
success: true
|
|
1171
|
+
id: number
|
|
1172
|
+
copyCount: number
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
// ============================================
|
|
1176
|
+
// Guild History Types
|
|
1177
|
+
// ============================================
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* A single guild history entry - tracks each guild membership change
|
|
1181
|
+
* Stored in the `guildInfo.history` JSONB column on bilibili_users table
|
|
1182
|
+
*/
|
|
1183
|
+
export interface GuildHistoryItem {
|
|
1184
|
+
/** Guild name */
|
|
1185
|
+
name: string
|
|
1186
|
+
/** Unix timestamp (ms) - when this guild membership was recorded */
|
|
1187
|
+
updatedAt: number
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
// ============================================
|
|
1191
|
+
// MCN History Types
|
|
1192
|
+
// ============================================
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* A single MCN agency history entry - tracks each MCN membership change
|
|
1196
|
+
* Stored in the `mcnInfo.history` JSONB column on bilibili_users table
|
|
1197
|
+
*/
|
|
1198
|
+
export interface McnHistoryItem {
|
|
1199
|
+
/** MCN agency ID */
|
|
1200
|
+
mcnId: number
|
|
1201
|
+
/** MCN agency name */
|
|
1202
|
+
mcnName: string
|
|
1203
|
+
/** Unix timestamp (ms) - when this MCN membership was recorded */
|
|
1204
|
+
updatedAt: number
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
/**
|
|
1208
|
+
* Response for GET /laplace/guild-entry/:uid
|
|
1209
|
+
* Returns guild history for a specific user
|
|
1210
|
+
*/
|
|
1211
|
+
export interface GuildHistoryResponse {
|
|
1212
|
+
success: true
|
|
1213
|
+
uid: number
|
|
1214
|
+
user: {
|
|
1215
|
+
id: number
|
|
1216
|
+
username: string
|
|
1217
|
+
avatar: string | null
|
|
1218
|
+
room: number | null
|
|
1219
|
+
}
|
|
1220
|
+
history: GuildHistoryItem[]
|
|
1221
|
+
historyCount: number
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
/**
|
|
1225
|
+
* Request body for POST /laplace/guild-entry/:uid
|
|
1226
|
+
* Adds a new guild history entry
|
|
1227
|
+
*/
|
|
1228
|
+
export interface GuildEntryAddRequest {
|
|
1229
|
+
/** Guild name (max 100 chars, no special characters) */
|
|
1230
|
+
name: string
|
|
1231
|
+
/** Optional: Unix timestamp (ms) - defaults to current time */
|
|
1232
|
+
updatedAt?: number
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
/**
|
|
1236
|
+
* Request body for PATCH /laplace/guild-entry/:uid
|
|
1237
|
+
* Updates a specific guild history entry identified by originalUpdatedAt
|
|
1238
|
+
*/
|
|
1239
|
+
export interface GuildEntryUpdateRequest {
|
|
1240
|
+
/** Required: updatedAt of the entry to update (identifier) */
|
|
1241
|
+
originalUpdatedAt: number
|
|
1242
|
+
/** Optional: New guild name */
|
|
1243
|
+
name?: string
|
|
1244
|
+
/** Optional: New timestamp (Unix timestamp ms) */
|
|
1245
|
+
updatedAt?: number
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* Request body for DELETE /laplace/guild-entry/:uid
|
|
1250
|
+
* Deletes a specific guild history entry identified by updatedAt
|
|
1251
|
+
*/
|
|
1252
|
+
export interface GuildEntryDeleteRequest {
|
|
1253
|
+
/** Required: updatedAt of the entry to delete */
|
|
1254
|
+
updatedAt: number
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
/**
|
|
1258
|
+
* Response for POST/PATCH/DELETE /laplace/guild-entry/:uid
|
|
1259
|
+
*/
|
|
1260
|
+
export interface GuildEntryActionResponse {
|
|
1261
|
+
success: true
|
|
1262
|
+
uid: number
|
|
1263
|
+
historyCount: number
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
// ============================================
|
|
1267
|
+
// MCN Batch Update Types
|
|
1268
|
+
// ============================================
|
|
1269
|
+
|
|
1270
|
+
/**
|
|
1271
|
+
* A single entry in the MCN batch update request
|
|
1272
|
+
* Maps to the raw export format from the MCN agency data (laplace-scripts)
|
|
1273
|
+
*/
|
|
1274
|
+
export interface McnBatchUpdateEntry {
|
|
1275
|
+
/** User's Bilibili UID (maps to bilibili_users.id) */
|
|
1276
|
+
upper_mid: number
|
|
1277
|
+
/** MCN agency ID */
|
|
1278
|
+
mcn_id: number
|
|
1279
|
+
/** MCN agency company name */
|
|
1280
|
+
mcn_company_name: string
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
/**
|
|
1284
|
+
* Request body for POST /laplace/mcn-batch-update
|
|
1285
|
+
* Batch updates MCN info for multiple users (max 10,000 entries)
|
|
1286
|
+
*/
|
|
1287
|
+
export interface McnBatchUpdateRequest {
|
|
1288
|
+
entries: McnBatchUpdateEntry[]
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
/**
|
|
1292
|
+
* Response for POST /laplace/mcn-batch-update
|
|
1293
|
+
*/
|
|
1294
|
+
export interface McnBatchUpdateResponse {
|
|
1295
|
+
success: true
|
|
1296
|
+
/** Total entries received */
|
|
1297
|
+
total: number
|
|
1298
|
+
/** Count of users whose mcnInfo was changed */
|
|
1299
|
+
updated: number
|
|
1300
|
+
/** UIDs whose mcnInfo was changed (new MCN or MCN change) */
|
|
1301
|
+
updatedUids: number[]
|
|
1302
|
+
/** Count of users whose MCN matched the latest history entry (no-op) */
|
|
1303
|
+
unchanged: number
|
|
1304
|
+
/** UIDs whose MCN matched the latest history entry (no-op) */
|
|
1305
|
+
unchangedUids: number[]
|
|
1306
|
+
/** Count of UIDs not found in bilibili_users */
|
|
1307
|
+
skipped: number
|
|
1308
|
+
/** List of missing UIDs */
|
|
1309
|
+
skippedUids: number[]
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
// ============================================
|
|
1313
|
+
// Guild Batch Update Types
|
|
1314
|
+
// ============================================
|
|
1315
|
+
|
|
1316
|
+
/**
|
|
1317
|
+
* A single entry in the guild batch update request
|
|
1318
|
+
* Maps to the raw export format from the agency data
|
|
1319
|
+
*/
|
|
1320
|
+
export interface GuildBatchUpdateEntry {
|
|
1321
|
+
/** User's Bilibili UID (maps to bilibili_users.id) */
|
|
1322
|
+
upper_mid: number
|
|
1323
|
+
/** Guild name (null if user is not in any guild) */
|
|
1324
|
+
live_guild_name: string | null
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* Request body for POST /laplace/guild-batch-update
|
|
1329
|
+
* Batch updates guild info for multiple users (max 10,000 entries)
|
|
1330
|
+
*/
|
|
1331
|
+
export interface GuildBatchUpdateRequest {
|
|
1332
|
+
entries: GuildBatchUpdateEntry[]
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
/**
|
|
1336
|
+
* Response for POST /laplace/guild-batch-update
|
|
1337
|
+
*/
|
|
1338
|
+
export interface GuildBatchUpdateResponse {
|
|
1339
|
+
success: true
|
|
1340
|
+
/** Total entries received */
|
|
1341
|
+
total: number
|
|
1342
|
+
/** Count of users whose guildInfo was changed */
|
|
1343
|
+
updated: number
|
|
1344
|
+
/** UIDs whose guildInfo was changed (new guild or guild change) */
|
|
1345
|
+
updatedUids: number[]
|
|
1346
|
+
/** Count of users whose guild matched the latest history entry (no-op) */
|
|
1347
|
+
unchanged: number
|
|
1348
|
+
/** UIDs whose guild matched the latest history entry (no-op) */
|
|
1349
|
+
unchangedUids: number[]
|
|
1350
|
+
/** Count of UIDs not found in bilibili_users */
|
|
1351
|
+
skipped: number
|
|
1352
|
+
/** List of missing UIDs */
|
|
1353
|
+
skippedUids: number[]
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
/** Migrated from experiments.sparanoid.net */
|
|
1358
|
+
export namespace Experiments {
|
|
1359
|
+
/**
|
|
1360
|
+
* fixer.io API
|
|
1361
|
+
* @link http://data.fixer.io/api/latest?access_key=
|
|
1362
|
+
* */
|
|
1363
|
+
interface Fixer {
|
|
1364
|
+
success: boolean
|
|
1365
|
+
timestamp: number
|
|
1366
|
+
base: string
|
|
1367
|
+
date: string
|
|
1368
|
+
rates: FixerRates
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
/** Props of Fixer */
|
|
1372
|
+
interface FixerRates {
|
|
1373
|
+
[key: string]: number
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
/**
|
|
1377
|
+
* Spotify API
|
|
1378
|
+
*/
|
|
1379
|
+
export namespace Spotify {
|
|
1380
|
+
/**
|
|
1381
|
+
* Spotify get access token
|
|
1382
|
+
* @link https://developer.spotify.com/documentation/web-api/tutorials/getting-started
|
|
1383
|
+
*/
|
|
1384
|
+
interface Token {
|
|
1385
|
+
access_token: string
|
|
1386
|
+
token_type: 'Bearer'
|
|
1387
|
+
expires_in: 3600
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
/**
|
|
1391
|
+
* Search result
|
|
1392
|
+
*/
|
|
1393
|
+
export interface Search {
|
|
1394
|
+
tracks: Tracks
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
/** Track list of `Search` */
|
|
1398
|
+
export interface Tracks {
|
|
1399
|
+
href: string
|
|
1400
|
+
items: Track[] | []
|
|
1401
|
+
limit: number
|
|
1402
|
+
next: string | null
|
|
1403
|
+
offset: number
|
|
1404
|
+
previous: null
|
|
1405
|
+
total: number
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
/** Track item of `Tracks` */
|
|
1409
|
+
export interface Track {
|
|
1410
|
+
album: Album
|
|
1411
|
+
artists: Artist[]
|
|
1412
|
+
available_markets: string[]
|
|
1413
|
+
disc_number: number
|
|
1414
|
+
duration_ms: number
|
|
1415
|
+
explicit: boolean
|
|
1416
|
+
external_ids: ExternalIDS
|
|
1417
|
+
external_urls: ExternalUrls
|
|
1418
|
+
href: string
|
|
1419
|
+
id: string
|
|
1420
|
+
is_local: boolean
|
|
1421
|
+
name: string
|
|
1422
|
+
popularity: number
|
|
1423
|
+
preview_url: null
|
|
1424
|
+
track_number: number
|
|
1425
|
+
type: string
|
|
1426
|
+
uri: string
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
/** Album item of `Track` */
|
|
1430
|
+
export interface Album {
|
|
1431
|
+
album_type: string
|
|
1432
|
+
artists: Artist[]
|
|
1433
|
+
available_markets: string[]
|
|
1434
|
+
external_urls: ExternalUrls
|
|
1435
|
+
href: string
|
|
1436
|
+
id: string
|
|
1437
|
+
images: Image[] | []
|
|
1438
|
+
name: string
|
|
1439
|
+
release_date: Date
|
|
1440
|
+
release_date_precision: string
|
|
1441
|
+
total_tracks: number
|
|
1442
|
+
type: string
|
|
1443
|
+
uri: string
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
/** Artist props */
|
|
1447
|
+
export interface Artist {
|
|
1448
|
+
external_urls: ExternalUrls
|
|
1449
|
+
href: string
|
|
1450
|
+
id: string
|
|
1451
|
+
name: string
|
|
1452
|
+
type: string
|
|
1453
|
+
uri: string
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
/** External URLs */
|
|
1457
|
+
export interface ExternalUrls {
|
|
1458
|
+
spotify: string
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
/** 专辑封面 */
|
|
1462
|
+
export interface Image {
|
|
1463
|
+
height: number
|
|
1464
|
+
url: string
|
|
1465
|
+
width: number
|
|
1466
|
+
}
|
|
1467
|
+
|
|
1468
|
+
/** External IDs */
|
|
1469
|
+
export interface ExternalIDS {
|
|
1470
|
+
isrc: string
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
/** Apple API */
|
|
1475
|
+
export namespace Apple {
|
|
1476
|
+
/** Apple Music API */
|
|
1477
|
+
export interface Music {
|
|
1478
|
+
results: MusicSearchResults
|
|
1479
|
+
meta: MusicSearchMeta
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
/** Props of `Music` */
|
|
1483
|
+
export interface MusicSearchMeta {
|
|
1484
|
+
results: MusicSearchMetaResults
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
/** Props of `MusicSearchMeta` */
|
|
1488
|
+
export interface MusicSearchMetaResults {
|
|
1489
|
+
order: string[]
|
|
1490
|
+
rawOrder: string[]
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
/** Props of `Music` */
|
|
1494
|
+
export interface MusicSearchResults {
|
|
1495
|
+
songs: Songs
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
/** Props of `Songs` */
|
|
1499
|
+
export interface Songs {
|
|
1500
|
+
href: string
|
|
1501
|
+
next: string
|
|
1502
|
+
data: Datum[]
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
/** Props of `Datum` */
|
|
1506
|
+
export interface Datum {
|
|
1507
|
+
id: string
|
|
1508
|
+
type: string
|
|
1509
|
+
href: string
|
|
1510
|
+
attributes: Attributes
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
/** Props of `Attributes` */
|
|
1514
|
+
export interface Attributes {
|
|
1515
|
+
albumName: string
|
|
1516
|
+
genreNames: string[]
|
|
1517
|
+
trackNumber: number
|
|
1518
|
+
durationInMillis: number
|
|
1519
|
+
releaseDate: Date
|
|
1520
|
+
isrc: string
|
|
1521
|
+
artwork: Artwork
|
|
1522
|
+
playParams: PlayParams
|
|
1523
|
+
url: string
|
|
1524
|
+
discNumber: number
|
|
1525
|
+
hasCredits: boolean
|
|
1526
|
+
isAppleDigitalMaster: boolean
|
|
1527
|
+
hasLyrics: boolean
|
|
1528
|
+
name: string
|
|
1529
|
+
previews: Preview[]
|
|
1530
|
+
artistName: string
|
|
1531
|
+
composerName?: string
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
/** Props of `Attributes` */
|
|
1535
|
+
export interface Artwork {
|
|
1536
|
+
width: number
|
|
1537
|
+
height: number
|
|
1538
|
+
url: string
|
|
1539
|
+
bgColor: string
|
|
1540
|
+
textColor1: string
|
|
1541
|
+
textColor2: string
|
|
1542
|
+
textColor3: string
|
|
1543
|
+
textColor4: string
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
/** Props of `Attributes` */
|
|
1547
|
+
export interface PlayParams {
|
|
1548
|
+
id: string
|
|
1549
|
+
kind: string
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
/** Props of `Attributes` */
|
|
1553
|
+
export interface Preview {
|
|
1554
|
+
url: string
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
/**
|
|
1559
|
+
* Address Completion
|
|
1560
|
+
* @link /experiments/address-completion
|
|
1561
|
+
*/
|
|
1562
|
+
export interface AddressCompletion {
|
|
1563
|
+
code: number
|
|
1564
|
+
/** 报错时会返回 */
|
|
1565
|
+
message?: string
|
|
1566
|
+
data: {
|
|
1567
|
+
/** 地址信息,通常为 `poiInfo` + `houseInfo` */
|
|
1568
|
+
addrInfo: string
|
|
1569
|
+
/** 门牌号,通常为 address line 2 */
|
|
1570
|
+
houseInfo: string
|
|
1571
|
+
/** 详细地址,通常为 address line 1 */
|
|
1572
|
+
poiInfo: string
|
|
1573
|
+
/** 街道 */
|
|
1574
|
+
street: string
|
|
1575
|
+
/** 城市 */
|
|
1576
|
+
city: string
|
|
1577
|
+
/** 地区 */
|
|
1578
|
+
district: string
|
|
1579
|
+
/** 省 */
|
|
1580
|
+
province: string
|
|
1581
|
+
/** 收件人 */
|
|
1582
|
+
person: string
|
|
1583
|
+
/** 手机/电话 */
|
|
1584
|
+
phone: string
|
|
1585
|
+
}
|
|
1586
|
+
}
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
/**
|
|
1591
|
+
* WebSocket 协议
|
|
1592
|
+
*/
|
|
1593
|
+
export namespace WebSocket {
|
|
1594
|
+
/**
|
|
1595
|
+
* 线上环境
|
|
1596
|
+
*/
|
|
1597
|
+
export namespace Prod {
|
|
1598
|
+
/**
|
|
1599
|
+
* 内置系统消息
|
|
1600
|
+
*/
|
|
1601
|
+
export interface SYSTEM_MSG {
|
|
1602
|
+
timestamp: number
|
|
1603
|
+
username?: string
|
|
1604
|
+
message?: string
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
}
|