UNPKG

karin-plugin-kkk

Version:

Karin 的「抖音」「B 站」视频解析/动态推送插件

1,889 lines (1,888 loc) 80.4 kB
/// <reference types="node" /> import { O as RichTextDocument } from "./index-CN7AJkHp.mjs"; import { EventEmitter } from "node:events"; import { AxiosRequestConfig, AxiosResponse } from "axios"; import React$1 from "react"; import { Agent, ClientRequest, ClientRequestArgs, IncomingMessage, OutgoingHttpHeaders, Server } from "http"; import { EventEmitter as EventEmitter$1 } from "events"; import { createConnection } from "net"; import { SecureContextOptions } from "tls"; import { Server as Server$1 } from "https"; import { URL } from "url"; import { ZlibOptions } from "zlib"; //#region ../template/src/types/platforms/douyin/articleWork.d.ts /** * 文章图片信息 */ interface ArticleImage { /** AI高清图片URL */ ai_high_image_url: string; /** 高清图片URL */ high_image_url: string; /** Markdown图片URL */ markdown_url: string; /** 原始图片URL */ origin_image_url: string; } /** * 抖音文章作品组件属性接口 */ interface DouyinArticleWorkProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 文章标题 */ title: string; /** 文章Markdown内容 */ markdown: string; /** 文章图片列表 */ images: ArticleImage[]; /** 阅读时间(分钟) */ read_time: number; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 分享数 */ share: string; /** 创建时间 */ create_time: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 抖音号 */ 抖音号: string; /** 获赞数 */ 获赞: string; /** 关注数 */ 关注: string; /** 粉丝数 */ 粉丝: string; /** 分享链接 */ share_url: string; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/comment.d.ts /** * 抖音评论组件属性接口 */ interface DouyinCommentProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 作品类型:视频/图集/合辑/文章 */ Type: '视频' | '图集' | '合辑' | '文章'; /** 评论数量 */ CommentLength: number; /** 视频大小(MB) */ VideoSize?: string; /** 视频帧率(Hz) */ VideoFPS?: number; /** 图片数量 */ ImageLength?: number; /** 区域 */ Region: string; /** 相关搜索(大家都在搜) */ suggestWrod: string[]; /** 视频分辨率 */ Resolution: string | null; /** 分享链接 */ share_url: string; /** 作者昵称 */ Author: string; /** 作者头像 */ AuthorAvatar: string; /** 作品统计 */ Statistics: { digg_count: number; comment_count: number; share_count: number; collect_count: number; }; /** 发布时间戳(秒) */ CreateTime: number; /** 评论数据列表 */ CommentsData: Array<{ /** 评论ID */id?: number; /** 评论CID */ cid?: string; /** 作品ID */ aweme_id?: string; /** 用户头像URL */ userimageurl: string; /** 用户昵称 */ nickname: string; /** 标签类型 (1=作者) */ label_type?: number; /** 状态标签 */ status_label?: string; /** 评论内容 */ text: RichTextDocument; /** 评论图片 */ commentimage?: string; /** 贴纸 */ sticker?: string; /** 创建时间戳(秒) */ create_time: number; /** IP标签 */ ip_label: string; /** 点赞数 */ digg_count: number; /** 搜索文本 */ search_text?: Array<{ /** 搜索文本内容 */search_text: string; /** 搜索查询ID */ search_query_id: string; }> | null; /** 是否@用户ID */ is_At_user_id?: any; /** 回复评论数据 */ replyComment?: DouyinSubComment[]; /** 作者是否点赞 */ is_author_digged?: boolean; }>; /** 最大嵌套层级 */ maxDepth?: number; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } /** * 抖音子评论数据接口 */ interface DouyinSubComment { /** 创建时间戳(秒) */ create_time: number; /** 用户昵称 */ nickname: string; /** 用户头像URL */ userimageurl: string; /** 评论内容 */ text: RichTextDocument; /** 点赞数 */ digg_count: number; /** IP标签 */ ip_label: string; /** 文本额外信息 */ text_extra: any[]; /** 标签文本 */ label_text: string; /** 评论图片 */ image_list: string[] | null; /** 评论ID */ cid: string; /** 回复的评论ID */ reply_to_reply_id: string; /** 回复的用户昵称 */ reply_to_username: string; } //#endregion //#region ../template/src/types/platforms/douyin/dynamic.d.ts /** * 抖音动态组件属性接口 */ interface DouyinDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 图片URL */ image_url: string; /** 描述内容 */ desc: string; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 分享数 */ share: string; /** 创建时间 */ create_time: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 抖音号 */ 抖音号: string; /** 获赞数 */ 获赞: string; /** 关注数 */ 关注: string; /** 粉丝数 */ 粉丝: string; /** 分享链接 */ share_url: string; /** 动态类型 */ dynamicTYPE?: string; /** 合作信息 */ cooperation_info?: { co_creator_nums: number; co_creators: Array<{ avatar_url?: string; nickname: string; role_title: string; }>; }; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/favorite-list.d.ts /** * 抖音喜欢列表组件属性接口 * 用于展示"谁喜欢了谁的作品" */ interface DouyinFavoriteListProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 作品封面图片URL */ image_url: string; /** 作品描述内容 */ desc: string; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 分享数 */ share: string; /** 推荐数 */ tuijian: string; /** 作品创建时间 */ create_time: string; /** 点赞者(订阅者)用户名 */ liker_username: string; /** 点赞者头像URL */ liker_avatar: string; /** 点赞者抖音号 */ liker_douyin_id: string; /** 作品作者用户名 */ author_username: string; /** 作品作者头像URL */ author_avatar: string; /** 作品作者抖音号 */ author_douyin_id: string; /** 分享链接 */ share_url: string; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/imageWork.d.ts /** * 抖音图文作品组件属性接口 */ interface DouyinImageWorkProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 图文封面URL */ image_url: string; /** 描述内容 */ desc: string; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 分享数 */ share: string; /** 创建时间 */ create_time: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 抖音号 */ 抖音号: string; /** 获赞数 */ 获赞: string; /** 关注数 */ 关注: string; /** 粉丝数 */ 粉丝: string; /** 分享链接 */ share_url: string; /** 动态类型 */ dynamicTYPE?: string; /** 合作信息 */ cooperation_info?: { co_creator_nums: number; co_creators: Array<{ avatar_url?: string; nickname: string; role_title: string; }>; }; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/live.d.ts /** * 抖音直播组件属性接口 */ interface DouyinLiveProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 直播封面图片URL */ image_url: string; /** 直播标题/描述 */ text: string; /** 直播分区标题 */ partition_title: string; /** 房间号 */ room_id: string; /** 总观看次数 */ total_viewers: string; /** 在线观众数 */ online_viewers: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 粉丝数 */ fans: string; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 点赞数 */ like_count: string; /** 在线人数文本 */ user_count_str: string; /** 直播分辨率 */ resolution: string; /** 主播签名 */ signature: string; /** 城市 */ city: string; /** 作品数 */ aweme_count: string; /** 关注数 */ following_count: string; /** 获赞数 */ total_favorited: string; /** 是否有商品 */ has_commerce_goods: boolean; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/musicinfo.d.ts /** * 抖音音乐信息组件属性接口 */ interface DouyinMusicInfoProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 音乐封面图片URL */ image_url: string; /** 音乐描述/标题 */ desc: string; /** 音乐ID */ music_id: string; /** 创建时间 */ create_time: string; /** 使用该音乐的用户数量 */ user_count: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 用户短ID */ user_shortid: string; /** 获赞数 */ total_favorited: number; /** 关注数 */ following_count: number; /** 粉丝数 */ fans: number; /** 分享链接 */ share_url: string; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/recommend-list.d.ts /** * 抖音推荐列表组件属性接口 */ interface DouyinRecommendListProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 图片URL */ image_url: string; /** 描述内容 */ desc: string; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 推荐数 */ tuijian: string; /** 分享数 */ share: string; /** 创建时间 */ create_time: string; /** 推荐者(订阅者)用户名 */ recommender_username: string; /** 推荐者头像URL */ recommender_avatar: string; /** 推荐者抖音号 */ recommender_douyin_id: string; /** 作品作者用户名 */ author_username: string; /** 作品作者头像URL */ author_avatar: string; /** 作品作者抖音号 */ author_douyin_id: string; /** 分享链接 */ share_url: string; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/userlist.d.ts /** * 抖音用户列表组件属性接口 */ interface DouyinUserListProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 群组信息 */ groupInfo: { /** 群号 */groupId: string; /** 群名称 */ groupName: string; /** 群头像 */ groupAvatar: string; }; /** 用户列表数据 */ renderOpt: { /** 用户头像图片URL */avatar_img: string; /** 用户名 */ username: string; /** 抖音短ID */ short_id: string; /** 粉丝数 */ fans: string; /** 获赞总数 */ total_favorited: string; /** 关注数 */ following_count: string; /** 全局推送开关状态 */ switch: boolean; /** 推送类型列表 */ pushTypes: string[]; }[]; }; } //#endregion //#region ../template/src/types/platforms/douyin/UserVideoList.d.ts /** * 用户视频列表页面的数据类型定义 */ type VideoListItem = { /** 视频ID */aweme_id: string; /** 视频索引 */ index?: number; /** 是否置顶 */ is_top: boolean; /** 视频标题/描述 */ title: string; /** 视频封面URL */ cover: string; /** 视频时长(秒) */ duration: number; /** 创建时间戳 */ create_time: number; /** 统计数据 */ statistics: { /** 点赞数 */like_count: number; /** 评论数 */ comment_count: number; /** 分享数 */ share_count: number; /** 收藏数 */ collect_count: number; }; /** 是否为视频(true)还是图集(false) */ is_video: boolean; /** 背景音乐信息 */ music?: { /** 音乐标题 */title: string; /** 音乐作者 */ author: string; }; }; type UserVideoListData = { /** 用户基本信息 */user: { /** 头像图片(可能为 null) */head_image: string | null; /** 用户昵称 */ nickname: string; /** 抖音号 */ short_id: string; /** 头像URL */ avatar: string; /** 用户签名/简介 */ signature: string; /** 粉丝数 */ follower_count: number; /** 关注数 */ following_count: number; /** 获赞总数 */ total_favorited: number; /** 是否认证 */ verified: boolean; /** IP属地 */ ip_location: string; }; /** 视频列表 */ videos: VideoListItem[]; /** 超时秒数 */ timeoutSeconds?: number; }; interface DouyinUserVideoListProps { data: UserVideoListData & { useDarkTheme?: boolean; }; } //#endregion //#region ../template/src/types/platforms/douyin/videoInfo.d.ts /** * 抖音视频统计信息接口 */ interface DouyinVideoStatistics { /** 点赞数 */ admire_count: number; /** 视频ID */ aweme_id: string; /** 收藏数 */ collect_count: number; /** 评论数 */ comment_count: number; /** 点赞数 */ digg_count: number; /** 播放数 */ play_count: number; /** 推荐数 */ recommend_count?: number; /** 分享数 */ share_count: number; } /** * 抖音作者信息接口 */ interface DouyinAuthor { /** 作者名称 */ name: string; /** 作者头像URL */ avatar: string; /** 抖音号 */ short_id: string; } /** * 抖音用户主页扩展信息接口 */ interface DouyinUserProfile { /** IP属地 */ ip_location: string; /** 粉丝数 */ follower_count: number; /** 获赞数 */ total_favorited: number; /** 作品数 */ aweme_count: number; /** 性别 1:男 2:女 0:未知 */ gender: number; /** 年龄 */ user_age: number; } /** * 抖音视频信息数据接口 */ interface DouyinVideoInfoData { /** 视频描述 */ desc: string; /** 统计信息 */ statistics: DouyinVideoStatistics; /** 视频ID */ aweme_id: string; /** 作者信息 */ author: DouyinAuthor; /** 用户主页扩展信息 */ user_profile?: DouyinUserProfile; /** 视频封面图片URL */ image_url: string; /** 封面图片尺寸 */ cover_size?: { width: number; height: number; }; /** 创建时间戳 */ create_time: number; /** 音乐信息 */ music?: { author: string; title: string; cover: string; }; /** 视频原始信息 */ video?: { duration: number; width: number; height: number; ratio: string; }; /** 是否使用深色主题 */ useDarkTheme?: boolean; } /** * 抖音视频信息组件属性接口 */ interface DouyinVideoInfoProps { /** 模板类型 */ templateType: string; /** 模板名称 */ templateName: string; /** 视频数据 */ data: DouyinVideoInfoData; /** 是否使用深色主题 */ useDarkTheme?: boolean; } //#endregion //#region ../template/src/types/platforms/douyin/videoWork.d.ts /** * 抖音视频作品组件属性接口 */ interface DouyinVideoWorkProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 视频封面URL */ image_url: string; /** 描述内容 */ desc: string; /** 点赞数 */ dianzan: string; /** 评论数 */ pinglun: string; /** 收藏数 */ shouchang: string; /** 分享数 */ share: string; /** 创建时间 */ create_time: string; /** 用户头像URL */ avater_url: string; /** 用户名 */ username: string; /** 抖音号 */ 抖音号: string; /** 获赞数 */ 获赞: string; /** 关注数 */ 关注: string; /** 粉丝数 */ 粉丝: string; /** 分享链接 */ share_url: string; /** 动态类型 */ dynamicTYPE?: string; /** 合作信息 */ cooperation_info?: { co_creator_nums: number; co_creators: Array<{ avatar_url?: string; nickname: string; role_title: string; }>; subscriber_role?: string; }; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } //#endregion //#region ../template/src/types/platforms/douyin/index.d.ts /** 抖音二维码登录组件属性 */ interface DouyinQrcodeImgProps extends BaseComponentProps<{ /** 二维码数据URL(插件生成的自定义二维码,或原始二维码图片) */qrCodeDataUrl?: string; /** 分享链接(用于生成自定义二维码) */ share_url?: string; }> { /** 是否使用深色主题 */ useDarkTheme?: boolean; } //#endregion //#region ../template/src/types/platforms/bilibili/bangumi.d.ts /** * 徽章信息接口 */ interface BangumiBilibiliEpisodeBadgeInfo { /** 背景颜色 */ bg_color: string; /** 夜间模式背景颜色 */ bg_color_night: string; /** 徽章文本 */ text: string; } /** * 番剧剧集信息接口 */ interface BangumiBilibiliEpisode { /** 剧集封面图片URL */ cover: string; /** 视频BV号 */ bvid: string; /** 剧集链接 */ link: string; /** 剧集完整标题 */ long_title: string; /** 发布时间戳 */ pub_time: number; /** 徽章标识(如:限免、会员) */ badge: string; /** 徽章详细信息 */ badge_info: BangumiBilibiliEpisodeBadgeInfo; } /** * 番剧最新剧集信息接口 */ interface BangumiBilibiliNewEP { /** 剧集描述 */ desc: string; /** 剧集ID */ id: number; /** 是否为新剧集 */ is_new: number; /** 剧集标题 */ title: string; } /** * 番剧统计数据接口 */ interface BangumiBilibiliStat { /** 硬币数 */ coins: number; /** 弹幕数 */ danmakus: number; /** 收藏数 */ favorite: number; /** 总收藏数 */ favorites: number; /** 追番文本 */ follow_text: string; /** 点赞数 */ likes: number; /** 评论数 */ reply: number; /** 分享数 */ share: number; /** 播放量 */ views: number; /** VT标识 */ vt: number; } /** * UP主挂件信息接口 */ interface BangumiBilibiliPendant { /** 挂件图片URL */ image: string; /** 挂件名称 */ name: string; /** 挂件ID */ pid: number; } /** * UP主VIP标签信息接口 */ interface BangumiBilibiliVipLabel { /** 背景颜色 */ bg_color: string; /** 背景样式 */ bg_style: number; /** 边框颜色 */ border_color: string; /** 标签文本 */ text: string; /** 文本颜色 */ text_color: string; } /** * UP主信息接口 */ interface BangumiBilibiliUPInfo { /** 头像URL */ avatar: string; /** 头像角标URL */ avatar_subscript_url: string; /** 粉丝数 */ follower: number; /** 是否已关注 */ is_follow: number; /** 用户ID */ mid: number; /** 昵称颜色 */ nickname_color: string; /** 挂件信息 */ pendant: BangumiBilibiliPendant; /** 主题类型 */ theme_type: number; /** 用户名 */ uname: string; /** 认证类型 */ verify_type: number; /** VIP标签信息 */ vip_label: BangumiBilibiliVipLabel; /** VIP状态 */ vip_status: number; /** VIP类型 */ vip_type: number; } /** * B站番剧组件数据接口 */ interface BangumiBilibiliData { /** 主封面图片URL */ mainCover: string; /** 演员信息 */ Actors: string; /** 番剧评价描述 */ Evaluate: string; /** 番剧链接 */ Link: string; /** 最新剧集信息 */ newEP: BangumiBilibiliNewEP; /** 番剧标题 */ Title: string; /** 番剧风格标签 */ Styles: string[]; /** 季度ID */ seasonID: number; /** 副标题信息 */ subtitle: string; /** UP主信息 */ UPInfo: BangumiBilibiliUPInfo; /** 版权信息 */ Copyright: string; /** 统计数据 */ Stat: BangumiBilibiliStat; /** 剧集列表 */ Episodes: BangumiBilibiliEpisode[]; /** 剧集总数 */ length: number; } /** * B站番剧组件属性接口 */ interface BilibiliBangumiProps extends BaseComponentProps { /** 番剧数据 */ data: BangumiBilibiliData; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/comment.d.ts /** * B站评论组件属性接口 */ interface BilibiliCommentProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 作品类型:视频/图集/动态 */ Type: '视频' | '动态'; /** 评论数量 */ CommentLength: string; /** 视频大小(MB) */ VideoSize?: string; /** 视频画质 */ Clarity?: string; /** 图片数量 */ ImageLength?: number; /** 分享链接 */ shareurl: string; /** 分享URL */ share_url: string; /** 视频分辨率 */ Resolution: string | null; /** 评论数据 */ CommentsData: CommentItem[]; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } /** * 粉丝卡片信息接口 */ interface FanCardInfo { /** 卡片背景图片 */ image: string | null; /** 序号前缀 */ numPrefix: string; /** 序号描述 */ numDesc: string; /** 渐变色样式 */ gradientStyle: string; } /** * B站二级评论项数据接口 */ interface SubCommentItem { /** 用户头像URL */ avatar: string; /** 用户昵称 */ uname: string; /** 用户昵称颜色 */ unameColor?: string | null; /** 用户等级 */ level: number; /** 头像框 */ frame?: string; /** 评论内容 */ message: RichTextDocument; /** 评论所有图片 */ pictures: string[]; /** 创建时间戳(秒) */ ctime: number; /** IP标签/地理位置 */ location: string; /** 点赞数 */ like: number; /** 是否为UP主评论 */ isUP: boolean; /** VIP状态 */ vipstatus?: number; /** 粉丝卡片信息 */ fanCard?: FanCardInfo | null; /** 粉丝勋章详情 */ fansDetail?: FansDetail | null; } /** * 粉丝勋章详情 */ interface FansDetail { /** 用户ID */ uid: number; /** 勋章ID */ medal_id: number; /** 勋章名称 */ medal_name: string; /** 分数 */ score: number; /** 等级 */ level: number; /** 亲密度 */ intimacy: number; /** 主播状态 */ master_status: number; /** 是否领取 */ is_receive: number; /** 勋章颜色(起始) */ medal_color: number; /** 勋章颜色(结束) */ medal_color_end: number; /** 边框颜色 */ medal_color_border: number; /** 名称颜色 */ medal_color_name: number; /** 等级颜色 */ medal_color_level: number; /** 守护等级 */ guard_level: number; /** 守护图标 */ guard_icon: string; /** 荣誉图标 */ honor_icon: string; /** 首图标(可选) */ first_icon?: string; /** 等级背景色 */ medal_level_bg_color: number; } /** * B站评论项数据接口 */ interface CommentItem { /** 用户头像URL */ avatar: string; /** 用户昵称 */ uname: string; /** 用户昵称颜色 */ unameColor?: string | null; /** 用户等级 */ level: number; /** 头像框 */ frame?: string; /** 标签类型 (1=作者) */ label_type?: number; /** 状态标签 */ status_label?: string | null; /** 评论内容 */ message: RichTextDocument; /** 评论所有图片 */ pictures: string[]; /** VIP状态 */ vipstatus?: number; /** 贴纸 */ sticker?: string; /** 创建时间戳(秒) */ ctime: number; /** IP标签/地理位置 */ location: string; /** 回复数量 */ replylength: number; /** 点赞数 */ like: number; /** 是否置顶评论 */ isTop: boolean; /** 是否为UP主评论 */ isUP: boolean; /** 二级评论列表 */ replies?: SubCommentItem[]; /** 粉丝卡片信息 */ fanCard?: FanCardInfo | null; /** 粉丝勋章详情 */ fansDetail?: FansDetail | null; } //#endregion //#region ../template/src/types/platforms/bilibili/dynamic/normal.d.ts /** * 装饰卡片数据 */ interface DecorationCardData { /** 卡片背景图片URL */ card_url: string; /** 渐变颜色数组 */ colors: string[]; /** 卡片显示文字 */ text: string; } /** * 用户名元数据,用于传递 VIP 状态和颜色信息 */ interface UsernameMetadata$1 { /** 用户名 */ name: string; /** VIP状态,1为年度大会员 */ vipStatus: number; /** 昵称颜色,VIP用户特有 */ nicknameColor: string | null; } /** * B站普通动态组件属性接口 */ interface BilibiliDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 动态创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 图文动态标题 */ title?: string; /** 动态文本内容(富文本文档) */ text: RichTextDocument | null; /** 图片URL数组 */ image_url: Array<{ image_src: string; }>; /** 点赞数 */ dianzan: string | number; /** 评论数 */ pinglun: string | number; /** 分享数 */ share: string | number; /** 渲染时间 */ render_time: string; /** 用户短ID */ user_shortid: string | number; /** 获赞总数 */ total_favorited: string | number; /** 关注数 */ following_count: string | number; /** 粉丝数 */ fans: string | number; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 图片布局方式 */ imageLayout: string; /** 相关内容卡片 */ additional?: BilibiliAdditionalData; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } /** * B站预约卡片数据接口 */ interface BilibiliReserveData { /** 预约标题 */ title: string; /** 时间信息 */ desc1: string; /** 预约人数 */ desc2: string; /** 预约奖励信息(可选) */ desc3?: string; /** 按钮文本 */ buttonText: string; } /** * B站投票卡片数据接口 */ interface BilibiliVoteData { /** 投票标题 */ title: string; /** 参与人数描述(如 "1703人参与") */ desc: string; /** 投票状态: 4-已结束 */ status: number; } /** * B站通用卡片数据接口(游戏等) */ interface BilibiliCommonData { /** 封面图 */ cover: string; /** 标题 */ title: string; /** 描述1(标签) */ desc1: string; /** 描述2(副标题) */ desc2: string; /** 按钮文本 */ button_text?: string; /** 头部文本(如"相关游戏") */ head_text?: string; /** 子类型 */ sub_type?: string; } /** * B站视频跳转卡片数据接口(UGC) */ interface BilibiliUgcData { /** 封面图 */ cover: string; /** 标题 */ title: string; /** 时长(如 "08:01") */ duration: string; /** 播放量(如 "12.6万播放") */ play: string; /** 弹幕数(如 "1061弹幕") */ danmaku: string; } /** * B站相关内容卡片联合类型 */ interface BilibiliAdditionalData { /** 卡片类型 */ type: 'ADDITIONAL_TYPE_RESERVE' | 'ADDITIONAL_TYPE_VOTE' | 'ADDITIONAL_TYPE_COMMON' | 'ADDITIONAL_TYPE_UGC' | 'ADDITIONAL_TYPE_GOODS' | 'ADDITIONAL_TYPE_UPOWER_LOTTERY' | 'ADDITIONAL_TYPE_NONE'; /** 预约数据 */ reserve?: BilibiliReserveData; /** 投票数据 */ vote?: BilibiliVoteData; /** 通用卡片数据 */ common?: BilibiliCommonData; /** 视频跳转数据 */ ugc?: BilibiliUgcData; } /** * B站纯文动态组件属性接口 */ interface BilibiliWordDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 动态创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 动态文本内容(富文本文档) */ text: RichTextDocument | null; /** 点赞数 */ dianzan: string | number; /** 评论数 */ pinglun: string | number; /** 分享数 */ share: string | number; /** 渲染时间 */ render_time: string; /** 用户短ID */ user_shortid: string | number; /** 获赞总数 */ total_favorited: string | number; /** 关注数 */ following_count: string | number; /** 粉丝数 */ fans: string | number; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 相关内容卡片 */ additional?: BilibiliAdditionalData; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/dynamic/article.d.ts /** * B站专栏动态组件属性接口 */ interface BilibiliArticleDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 动态创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 专栏标题 */ title: string; /** 专栏摘要 */ summary: string; /** 专栏封面图片URL */ banner_url?: string; /** 专栏分类 */ categories: Array<{ id: number; name: string; parent_id: number; }>; /** 专栏字数 */ words: number; /** 专栏统计数据 */ stats: { /** 阅读数 */view: number; /** 点赞数 */ like: number; /** 收藏数 */ favorite: number; /** 评论数 */ reply: number; /** 分享数 */ share: number; /** 投币数 */ coin: number; /** 转发动态 */ dynamic: number; }; /** 专栏正文(richtext 格式) */ body: RichTextDocument; /** 渲染时间 */ render_time: string; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 用户短ID */ user_shortid: string | number; /** 获赞总数 */ total_favorited: string | number; /** 关注数 */ following_count: string | number; /** 粉丝数 */ fans: string | number; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/dynamic/forward.d.ts /** * 原始内容AV类型接口 */ interface OriginalContentAV { /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 视频封面 */ cover: string; /** 视频时长文本 */ duration_text: string; /** 播放量 */ play: string; /** 弹幕数 */ danmaku: string; /** 视频标题 */ title: RichTextDocument; } /** * 原始内容图文类型接口 */ interface OriginalContentDraw { /** 标题 */ title?: string; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 动态文本内容(富文本文档) */ text: RichTextDocument; /** 图片URL数组 */ image_url: Array<{ image_src: string; }>; } /** * 原始内容文字类型接口 */ interface OriginalContentWord { /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 动态文本内容(富文本文档) */ text: RichTextDocument; } /** * 原始内容直播推荐类型接口 */ interface OriginalContentLiveRcmd { /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 直播封面 */ cover: string; /** 分区名称 */ area_name: string; /** 大文本 */ text_large: string; /** 在线人数 */ online: string; /** 直播标题 */ title: RichTextDocument; } /** * 转发动态原始内容Props接口 */ interface BilibiliForwardOriginalContentProps { /** 原始内容 */ original_content: { /** AV类型内容 */DYNAMIC_TYPE_AV?: OriginalContentAV; /** 图文类型内容 */ DYNAMIC_TYPE_DRAW?: OriginalContentDraw; /** 文字类型内容 */ DYNAMIC_TYPE_WORD?: OriginalContentWord; /** 直播推荐类型内容 */ DYNAMIC_TYPE_LIVE_RCMD?: OriginalContentLiveRcmd; }; } /** * B站转发动态组件属性接口 */ interface BilibiliForwardDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 动态创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 动态文本内容(富文本文档) */ text: RichTextDocument; /** 原始内容 */ original_content: BilibiliForwardOriginalContentProps['original_content']; /** 点赞数 */ dianzan: string | number; /** 评论数 */ pinglun: string | number; /** 分享数 */ share: string | number; /** 渲染时间 */ render_time: string; /** 用户短ID */ user_shortid: string | number; /** 获赞总数 */ total_favorited: string | number; /** 关注数 */ following_count: string | number; /** 粉丝数 */ fans: string | number; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 图片URL */ imgList: string[] | null; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/dynamic/live.d.ts interface BilibiliPosterPalette { bgColor: string; primaryColor: string; secondaryColor: string; mutedColor: string; accentColor: string; deepColor: string; coverShade: string; } interface BilibiliPosterPalettes { light: BilibiliPosterPalette; dark: BilibiliPosterPalette; } /** * B站直播动态组件属性接口 */ interface BilibiliLiveDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 直播封面 */ image_url: string; /** 直播标题 */ text: RichTextDocument; /** 直播房间信息(分区 | 房间号) */ liveinf: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 粉丝数 */ fans: string; /** 时间信息 */ create_time: string; /** 直播开始时间 */ now_time: string; /** 分享和配置 */ share_url: string; /** 动态类型 */ dynamicTYPE: string; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; /** 服务端预计算的海报色板(亮色/深色) */ posterPalettes?: BilibiliPosterPalettes; /** 服务端预计算的海报色板 */ posterPalette?: BilibiliPosterPalette; } //#endregion //#region ../template/src/types/platforms/bilibili/dynamic/video.d.ts /** * B站视频动态组件属性接口 */ interface BilibiliVideoDynamicProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 用户头像URL */ avatar_url: string; /** 头像框 */ frame?: string; /** 用户名元数据 */ usernameMeta: UsernameMetadata$1; /** 动态创建时间 */ create_time: string; /** 装饰卡片 */ decoration_card?: DecorationCardData; /** 视频标题 */ text: RichTextDocument; /** 视频描述 */ desc: RichTextDocument; /** 视频封面图片URL */ image_url: string; /** 点赞数 */ dianzan: string | number; /** 评论数 */ pinglun: string | number; /** 分享数 */ share: string | number; /** 硬币数 */ coin: string | number; /** 浏览量 */ view: string | number; /** 视频时长 */ duration_text: string; /** 渲染时间 */ render_time: string; /** 用户短ID */ user_shortid: string | number; /** 获赞总数 */ total_favorited: string | number; /** 关注数 */ following_count: string | number; /** 粉丝数 */ fans: string | number; /** 动态类型 */ dynamicTYPE: string; /** 分享链接 */ share_url: string; /** 动态ID */ dynamic_id: string; /** 共创者列表 (可选) */ staff?: Array<{ /** 用户ID */mid: number; /** 职位标题 (UP主/参演) */ title: string; /** 用户名 */ name: string; /** 头像URL */ face: string; /** 粉丝数 */ follower: number; }>; }; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/userlist.d.ts /** * B站用户列表组件属性接口 */ interface BilibiliUserListProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 群组信息 */ groupInfo: { /** 群号 */groupId: string; /** 群名称 */ groupName: string; /** 群头像 */ groupAvatar: string; }; /** 用户列表数据 */ renderOpt: { /** 用户头像图片URL */avatar_img: string; /** 用户名 */ username: string; /** 用户UID */ host_mid: string; /** 粉丝数 */ fans: string; /** 获赞总数 */ total_favorited: string; /** 关注数 */ following_count: string; /** 全局推送开关状态 */ switch: boolean; /** 推送类型列表 */ pushTypes?: ('video' | 'draw' | 'word' | 'live' | 'forward' | 'article')[]; }[]; }; } //#endregion //#region ../template/src/types/platforms/bilibili/videoInfo.d.ts /** * B站视频统计数据接口 */ interface BilibiliVideoStat { /** 视频AV号 */ aid: number; /** 播放量 */ view: number; /** 弹幕数 */ danmaku: number; /** 评论数 */ reply: number; /** 收藏数 */ favorite: number; /** 投币数 */ coin: number; /** 分享数 */ share: number; /** 当前排名 */ now_rank: number; /** 历史最高排名 */ his_rank: number; /** 点赞数 */ like: number; /** 点踩数 */ dislike: number; /** 评价 */ evaluation: string; /** VT标识 */ vt: number; } /** * 用户名元数据接口 */ interface UsernameMetadata { /** 用户名 */ name: string; /** VIP状态 */ vipStatus: number; /** 昵称颜色 */ nicknameColor: string | null; } /** * B站视频UP主信息接口 */ interface BilibiliVideoOwner { /** UP主用户ID */ mid: number; /** UP主昵称 */ name: string; /** UP主头像URL */ face: string; /** 用户名元数据(VIP颜色等) */ usernameMeta?: UsernameMetadata; /** 头像框图片URL */ frame?: string; } /** * B站视频信息数据接口 */ interface BilibiliVideoInfoData { /** 分享链接 */ share_url: string; /** 视频标题 */ title: string; /** 视频简介(富文本格式) */ desc: RichTextDocument; /** 统计数据 */ stat: BilibiliVideoStat; /** 视频BV号 */ bvid: string; /** 创建时间戳 */ ctime: number; /** 视频封面图片URL */ pic: string; /** UP主信息 */ owner: BilibiliVideoOwner; /** 是否使用深色主题 */ useDarkTheme?: boolean; } /** * B站视频信息组件属性接口 */ interface BilibiliVideoInfoProps extends BaseComponentProps { /** 渲染请求数据 */ data: BilibiliVideoInfoData; /** 预生成的二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/bilibili/index.d.ts /** B站二维码登录组件属性 */ interface BilibiliQrcodeImgProps { data: { /** 分享链接 */share_url: string; /** 是否使用深色主题 */ useDarkTheme?: boolean; }; /** 二维码数据URL */ qrCodeDataUrl?: string; } //#endregion //#region ../template/src/types/platforms/kuaishou/comment.d.ts /** * 快手评论组件属性接口 */ interface KuaishouCommentProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 作品类型:视频/图集 */ Type: '视频' | '图集'; /** 评论数量 */ CommentLength: number; /** 视频大小(MB) */ VideoSize?: string; /** 点赞数量 */ likeCount?: number; /** 观看次数 */ viewCount?: number; /** 图片数量 */ ImageLength?: number; /** 分享链接 */ share_url: string; /** 评论数据 */ CommentsData: KuaishouCommentItem[]; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } /** * 快手评论项数据接口 */ interface KuaishouCommentItem { /** 评论ID */ cid: string; /** 作品ID */ aweme_id: string; /** 用户昵称 */ nickname: string; /** 用户头像URL */ userimageurl: string; /** 评论内容 */ text: RichTextDocument; /** 点赞数 */ digg_count: number; /** 创建时间戳(毫秒) */ create_time: number; /** 评论图片 */ commentimage?: string; /** 贴纸 */ sticker?: string; /** 回复数量 */ reply_comment_total?: number; /** IP标签 */ ip_label?: string; } //#endregion //#region ../template/src/types/platforms/xiaohongshu/comment.d.ts /** * 小红书评论组件属性接口 */ interface XiaohongshuCommentProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 笔记类型:图文/视频 */ Type: '图文' | '视频'; /** 评论数量 */ CommentLength: number; /** 图片数量 */ ImageLength?: number; /** 分享链接 */ share_url: string; /** 评论数据 - 简化为直接的评论数组 */ CommentsData: XiaohongshuCommentItem[]; }; /** 预生成的二维码数据URL */ qrCodeDataUrl: string; } /** * 小红书评论项数据接口 */ interface XiaohongshuCommentItem { /** 评论ID */ id: string; /** 笔记ID */ note_id: string; /** 评论内容 */ content: RichTextDocument; /** 用户信息 */ user_info: { user_id: string; nickname: string; image: string; xsec_token: string; }; /** 创建时间戳(毫秒) */ create_time: number; /** IP位置 */ ip_location: string; /** 点赞数 */ like_count: string; /** 是否已点赞 */ liked: boolean; /** 评论图片 */ pictures: Array<{ height: number; width: number; url_pre: string; url_default: string; info_list: Array<{ image_scene: string; url: string; }>; }>; /** 子评论数量 */ sub_comment_count: string; /** 子评论列表 */ sub_comments: XiaohongshuSubComment[]; /** 显示标签 */ show_tags: string[]; /** @用户列表 */ at_users: string[]; /** 状态 */ status: number; } /** * 小红书子评论数据接口 */ interface XiaohongshuSubComment { /** 子评论ID */ id: string; /** 笔记ID */ note_id: string; /** 评论内容 */ content: RichTextDocument; /** 用户信息 */ user_info: { user_id: string; nickname: string; image: string; xsec_token: string; }; /** 创建时间戳(毫秒) */ create_time: number; /** IP位置 */ ip_location: string; /** 点赞数 */ like_count: string; /** 是否已点赞 */ liked: boolean; /** 评论图片 */ pictures: string[]; /** 显示标签 */ show_tags: string[]; /** @用户列表 */ at_users: string[]; /** 状态 */ status: number; /** 目标评论 */ target_comment?: { id: string; user_info: { user_id: string; nickname: string; image: string; xsec_token: string; }; }; } //#endregion //#region ../template/src/types/platforms/xiaohongshu/noteInfo.d.ts /** * 小红书笔记统计信息接口 */ interface XiaohongshuNoteStatistics { /** 分享数 */ share_count: string | number; /** 是否已关注 */ followed: boolean; /** 关系状态 */ relation: string; /** 是否已点赞 */ liked: boolean; /** 点赞数 */ liked_count: string | number; /** 是否已收藏 */ collected: boolean; /** 收藏数 */ collected_count: string | number; /** 评论数 */ comment_count: string | number; } /** * 小红书作者信息接口 */ interface XiaohongshuAuthor { /** xsec_token */ xsec_token?: string; /** 用户ID */ user_id: string; /** 用户昵称 */ nickname: string; /** 用户头像URL */ avatar: string; } /** * 小红书笔记信息数据接口 */ interface XiaohongshuNoteInfoData { /** 笔记标题 */ title: string; /** 笔记描述 */ desc: RichTextDocument; /** 统计信息 */ statistics: XiaohongshuNoteStatistics; /** 笔记ID */ note_id: string; /** 作者信息 */ author: XiaohongshuAuthor; /** 笔记封面图片URL */ image_url: string; /** 创建时间戳 */ time: number; /** IP位置 */ ip_location: string; /** 是否使用深色主题 */ useDarkTheme?: boolean; } /** * 小红书笔记信息组件属性接口 */ interface XiaohongshuNoteInfoProps extends BaseComponentProps { /** 渲染请求数据 */ data: XiaohongshuNoteInfoData; } //#endregion //#region ../template/src/types/platforms/other/help.d.ts /** * 帮助页面组件属性接口 */ interface HelpProps extends BaseComponentProps { /** 渲染请求数据 */ data: { /** 是否使用深色主题 */useDarkTheme?: boolean; /** 页面标题 */ title?: string; /** 角色:主人/普通 */ role?: 'master' | 'member'; /** 菜单数据:按角色筛选后的分组 */ menu?: MenuGroup[]; /** 简单的列表数据 (用于 Help.tsx 渲染) */ list: { title: string; description: string; }[]; }; } /** * 菜单项接口 */ interface MenuItem { /** 菜单项标题 */ title: string; /** 菜单项描述 */ description: string; /** 图标:可以是图标名称字符串,或带颜色的对象 */ icon?: string | { name: string; color?: string; }; } /** * 菜单分组接口 */ interface MenuGroup { /** 分组标题 */ title: string; /** 菜单项列表 */ items: MenuItem[]; /** 子分组(可选) */ subGroups?: { /** 子分组标题 */title: string; /** 子分组菜单项 */ items: MenuItem[]; }[]; } //#endregion //#region ../../node_modules/.pnpm/@karinjs+ws@1.0.4/node_modules/@karinjs/ws/dist/index.d.ts // can not get all overload of BufferConstructor['from'], need to copy all it's first arguments here // https://github.com/microsoft/TypeScript/issues/32164 type BufferLike = string | Buffer | DataView | number | ArrayBufferView | Uint8Array | ArrayBuffer | SharedArrayBuffer | Blob | readonly any[] | readonly number[] | { valueOf(): ArrayBuffer; } | { valueOf(): SharedArrayBuffer; } | { valueOf(): Uint8Array; } | { valueOf(): readonly number[]; } | { valueOf(): string; } | { [Symbol.toPrimitive](hint: string): string; }; // WebSocket socket. declare class WebSocket extends EventEmitter$1 { /** The connection is not yet open. */ static readonly CONNECTING: 0; /** The connection is open and ready to communicate. */ static readonly OPEN: 1; /** The connection is in the process of closing. */ static readonly CLOSING: 2; /** The connection is closed. */ static readonly CLOSED: 3; binaryType: "nodebuffer" | "arraybuffer" | "fragments"; readonly bufferedAmount: number; readonly extensions: string; /** Indicates whether the websocket is paused */ readonly isPaused: boolean; readonly protocol: string; /** The current state of the connection */ readonly readyState: typeof WebSocket.CONNECTING | typeof WebSocket.OPEN | typeof WebSocket.CLOSING | typeof WebSocket.CLOSED; readonly url: string; /** The connection is not yet open. */ readonly CONNECTING: 0; /** The connection is open and ready to communicate. */ readonly OPEN: 1; /** The connection is in the process of closing. */ readonly CLOSING: 2; /** The connection is closed. */ readonly CLOSED: 3; onopen: ((event: WebSocket.Event) => void) | null; onerror: ((event: WebSocket.ErrorEvent) => void) | null; onclose: ((event: WebSocket.CloseEvent) => void) | null; onmessage: ((event: WebSocket.MessageEvent) => void) | null; constructor(address: null); constructor(address: string | URL, options?: WebSocket.ClientOptions | ClientRequestArgs); constructor(address: string | URL, protocols?: string | string[], options?: WebSocket.ClientOptions | ClientRequestArgs); close(code?: number, data?: string | Buffer): void; ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void; pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void; // https://github.com/websockets/ws/issues/2076#issuecomment-1250354722 send(data: BufferLike, cb?: (err?: Error) => void): void; send(data: BufferLike, options: { mask?: boolean | undefined; binary?: boolean | undefined; compress?: boolean | undefined; fin?: boolean | undefined; }, cb?: (err?: Error) => void): void; terminate(): void; /** * Pause the websocket causing it to stop emitting events. Some events can still be * emitted after this is called, until all buffered data is consumed. This method * is a noop if the ready state is `CONNECTING` or `CLOSED`. */ pause(): void; /** * Make a paused socket resume emitting events. This method is a noop if the ready * state is `CONNECTING` or `CLOSED`. */ resume(): void; // HTML5 WebSocket events addEventListener<K extends keyof WebSocket.WebSocketEventMap>(type: K, listener: ((event: WebSocket.WebSocketEventMap[K]) => void) | { handleEvent(event: WebSocket.WebSocketEventMap[K]): void; }, options?: WebSocket.EventListenerOptions): void; removeEventListener<K extends keyof WebSocket.WebSocketEventMap>(type: K, listener: ((event: WebSocket.WebSocketEventMap[K]) => void) | { handleEvent(event: WebSocket.WebSocketEventMap[K]): void; }): void; // Events on(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this; on(event: "error", listener: (this: WebSocket, error: Error) => void): this; on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this; on(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this; on(event: "open", listener: (this: WebSocket) => void): this; on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this; on(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this; on(event: "unexpected-response", listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void): this; on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this; once(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this; once(event: "error", listener: (this: WebSocket, error: Error) => void): this; once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this; once(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this; once(event: "open", listener: (this: WebSocket) => void): this; once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this; once(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this; once(event: "unexpected-response", listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void): this; once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this; off(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this; off(event: "error", listener: (this: WebSocket, error: Error) => void): this; off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this; off(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this; off(event: "open", listener: (this: WebSocket) => void): this; off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this; off(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this; off(event: "unexpected-response", listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void): this; off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this; addListener(event: "close", listener: (code: number, reason: Buffer) => void): this; addListener(event: "error", listener: (error: Error) => void): this; addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this; addListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this; addListener(event: "open", listener: () => void): this; addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this; addListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this; addListener(event: "unexpected-response", listener: (request: ClientRequest, response: IncomingMessage) => void): this; addListener(event: string | symbol, listener: (...args: any[]) => void): this; removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this; removeListener(event: "error", listener: (error: Error) => void): this; removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this; removeListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this; removeListener(event: "open", listener: () => void): this; removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this; removeListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this; removeListener(event: "unexpected-response", listener: (request: ClientRequest, response: IncomingMessage) => void): this; removeListener(event: string | symbol, listener: (...args: any[]) => void): this; } declare namespace WebSocket { /** * Data represents the raw message payload received over the WebSocket. */ type RawData = Buffer | ArrayBuffer | Buffer[]; /** * Data represents the message payload received over the WebSocket. */ type Data = string | Buffer | ArrayBuffer | Buffer[]; /** * CertMeta represents the accepted types for certificate & key data. */ type CertMeta = string | string[] | Buffer | Buffer[]; /** * VerifyClientCallbackSync is a synchronous callback used to inspect the * incoming message. The return value (boolean) of the function determines * whether or not to accept the handshake. */ type VerifyClientCallbackSync<Request extends IncomingMessage = IncomingMessage> = (info: { origin: string; secure: boolean; req: Request; }) => boolean; /** * VerifyClientCallbackAsync is an asynchronous callback used to inspect the * incoming message. The return value (boolean) of the function determines * whether or not to accept the handshake. */ type VerifyClientCallbackAsync<Request extends IncomingMessage = IncomingMessage> = (info: { origin: string; secure: boolean; req: Request; }, callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void) => void; /** * FinishRequestCallback is a callback for last minute customization of the * headers. If finishRequest is set, then it has the responsibility to call * request.end() once it is done setting request headers. */ type FinishRequestCallback = (request: ClientRequest, websocket: WebSocket) => void; interface ClientOptions extends SecureContextOptions { protocol?: string | undefined; followRedirects?: boolean | undefined; generateMask?(mask: Buffer): void; handshakeTimeout?: number | undefined; maxRedirects?: number | undefined; perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined; localAddress?: string | undefined; protocolVersion?: number | undefined; headers?: { [key: string]: string; } | undefined; origin?: string | undefined; agent?: Agent | undefined; host?: string | undefined; family?: number | undefined; checkServerIdentity?(servername: string, cert: CertMeta): boolean; rejectUnauthorized?: boolean | undefined; allowSynchronousEvents?: boolean | undefined; autoPong?: boolean | undefined; maxPayload?: number | undefined; skipUTF8Validation?: boolean | undefined; createConnection?: typeof createConnection | undefined; finishRequest?: FinishRequestCallback | undefined; } interface PerMessageDeflateOptions { serverNoContextTakeover?: boolean | undefined; clientNoContextTakeover?: boolean | undefined; serverMaxWindowBits?: number | undefined; clientMaxWindowBits?: number | undefined; zlibDeflateOptions?: { flush?: number | undefined; finishFlush?: number | undefined; chunkSize?: number | undefined; windowBits?: number | undefined; level?: number | undefined; memLevel?: number | undefined; strategy?: number | undefined; dictionary?: Buffer | Buffer[] | DataView | undefined; info?: boolean