类、枚举与变量
33 个符号,由 scripts/api-extractor.ts 从 packages/core/src/index.ts 抽取
AdditionalType
相关内容卡片类型枚举 用于标识动态中附加的相关内容卡片的类型
Prop
Type
源码:src/types/ReturnDataType/Bilibili/Dynamic/index.ts
amagi
const amagi: typeof Client源码:src/index.ts
AMAGI_BUS_EVENT_NAMES
全部事件名(12 个与 v6 对齐 + 3 个会话事件),用于遍历与穷尽性校验。
与 AmagiBusEventMap 由 satisfies 挂钩:表里多一个键而这里没跟上
就编译不过,所以「全部」不是靠人记着的。
const AMAGI_BUS_EVENT_NAMES: readonly ["log:info", "log:warn", "log:error", "log:debug", "log:mark", "http:request", "http:response", "http:error", "network:retry", "network:error", "api:success", "api:error", "session:state", "session:error", "session:success"]amagiEvents
Amagi 全局事件发射器实例
const amagiEvents: TypedEventEmitter示例
import { } from '@ikenxuan/amagi'
// 监听 API 成功事件
.('api:success', () => {
.(`[${.}] ${.} 耗时 ${.}ms`)
})AmagiThrownError
unwrap 失败时抛出的 Error 子类。
为什么不直接 throw result.error:AmagiError 是纯数据契约,
抛非 Error 对象会丢栈、e instanceof Error 为假,Node 的 unhandledRejection
打印与各家日志 / 监控(Sentry 归为 “Non-Error exception captured”)都处理不好。
AmagiError 的字段全部平铺在实例上(kind / code / message /
retryable,以及 platform / http / issues / raw),所以
catch (e) { (e as AmagiError).kind } 直接可用;原始对象在 error,
error.cause 原样进 Error.cause(不吞)。
class AmagiThrownErrorlet "": unknowncode
稳定的字符串错误码
let readonly code?: AmagiError["code"]error
失败信封里那个错误对象,原样保留(引用相等)
let readonly error?: AmagiErrorhttp
真实发生的 HTTP 状态
let readonly http?: AmagiError["http"]issues
kind === 'validation' 时的字段级错误
let readonly issues?: AmagiError["issues"]kind
判别键,跨平台统一的错误大类
let readonly kind?: AmagiError["kind"]platform
平台原始错误码与文案
let readonly platform?: AmagiError["platform"]raw
原始响应体(createClient({ debug: true }) 时才有)
let readonly raw?: unknownretryable
是否值得重试
let readonly retryable?: booleanApiError
API错误类
class ApiError构造API错误
let "": unknowncode
let readonly code?: numberplatform
let readonly platform?: stringBILIBILI_CORRESPOND_PUBKEY
B站 correspondPath 的 RSA 公钥(1024bit)。
删库前官方文档公开的明文公钥,多来源字节一致。correspondPath = 用它 RSA-OAEP-SHA256
加密 refresh_{timestamp} 再 hex。公钥内置是对的 —— 它本就是前端公开常量
(laputa 主包运行时从 CDN 的 wasm 里拿的也是它),不是密钥。
const BILIBILI_CORRESPOND_PUBKEY: "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg\nUc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71\nnzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40\nJNrRuoEUXpabUzGB8QIDAQAB\n-----END PUBLIC KEY-----"源码:src/platforms/bilibili/cookieRefresh.ts
bilibiliApiUrls
B站 URL 构造器(v6 实现)。v7 门面(client.bilibili)上的是 apiUrls(v7
那份,在 platforms/bilibili/api.ts);这一份只在包顶层
(import { bilibiliApiUrls } from '@ikenxuan/amagi')与 @ikenxuan/amagi/compat 可达。
端点用的是 platforms/bilibili/api.ts 里的同名构造器,两份当前输出一致:
26 个方法逐个比对,请求主机与路径逐字相同,唯一差别是 v7 的 getComments
把 plat / seek_rpid / web_location 三个本来写死的值改成可由入参覆盖,
缺省值与这里相同。但仍是两份实现、不保证继续一致。
返回形态:方法给 URL 字符串(getXxx(): string),只有
getCaptchaFromVoucher / validateCaptcha 两个给 { Url, Body }。
新代码请用 client.bilibili.apiUrls(v7 那份);这一份的调用方按原样保留。
const bilibiliApiUrls: BilibiliAPI源码:src/platforms/legacy/bilibili/API.ts
bilibiliFetcher
B站数据获取器(静态)。 包含所有 B站 API 方法,调用时需要传递 cookie
const bilibiliFetcher: BilibiliFetcher示例
import { } from '@ikenxuan/amagi'
const = 'SESSDATA=xxx; bili_jct=yyy'
const = await .({ : 'BV1xx411c7mD' }, )源码:src/model/fetchers/bilibili/index.ts
bilibiliUtils
B站相关功能模块 (工具集)
const bilibiliUtils: bilibiliUtilsModel源码:src/platforms/bilibili/utils.ts
createAmagiClient
创建Amagi客户端实例
@deprecated):请改用 createClient 或默认导出。这是同一个函数对象的别名,
返回值就是 createClient 的结果:douyin / bilibili 上带 login
命名空间(扫码登录会话),events 是实例级总线(负载带 meta)。const createAmagiClient: typeof createClient返回值:包含数据获取方法、服务器启动方法、绑定Cookie的平台工具集和API对象的对象
CreateApp
After instantiation, it can interact with the specified platform API to quickly obtain data.
const CreateApp: AmagiConstructor源码:src/index.ts
default
After instantiation, it can interact with the specified platform API to quickly obtain data.
const default: typeof CreateApp源码:src/index.ts
douyinApiUrls
抖音 URL 构造器(v6 实现)。v7 门面(client.douyin)上的是 apiUrls(v7
那份,在 platforms/douyin/api.ts);这一份只在包顶层
(import { douyinApiUrls } from '@ikenxuan/amagi')与 @ikenxuan/amagi/compat 可达。
端点用的是 platforms/douyin/api.ts 里的同名构造器,两份已经漂移:
这里的 getWorkDetail 打 www.douyin.com 且不带 request_source /
origin_type,而 v7 那份打 www-hj.douyin.com 并带那两个参数 ——
v7 侧注释记着实测:前者 9/18 被 Argus 拦、后者 18/18 通过。
逐字比对下来这是两份 URL 上唯一的差异(其余方法的主机与查询串相同),
但两份实现各自演进,不保证继续一致。
新代码请用 client.douyin.apiUrls(v7 那份);这一份的调用方按原样保留。
默认实例,使用默认浏览器版本 125.0.0.0。
const douyinApiUrls: DouyinAPI源码:src/platforms/legacy/douyin/API.ts
douyinFetcher
抖音数据获取器(静态)。 包含所有抖音 API 方法,调用时需要传递 cookie
const douyinFetcher: DouyinFetcher示例
import { } from '@ikenxuan/amagi'
const = 'ttwid=xxx'
const = await .({ : '7123456789' }, )源码:src/model/fetchers/douyin/index.ts
douyinPassport
抖音 passport 扫码登录协议实现
login.douyin.com 的接口与 www.douyin.com 的数据接口是两套体系:
- query 需要
p_no/sign/qs三重签名,外加x-tt-passport-aid-sign请求头 - a_bogus 用的是 bdms
1.0.1.19形态(盐值dhzx、pageId 7571), 与../sign/a_bogus.ts里数据接口用的旧版(盐值cus、pageId 6241)互不通用 request_host在 URL 里是双重编码,参与 sign 计算时只编码一次
因此这里单独实现一套,而不是复用 douyinSign。
参考来源
以下项目公开了本模块所需的协议细节。实现均按本仓库风格重写,未复制其代码:
- https://github.com/ylcangel/douyin_sign — a_bogus
1.0.1.19-fix.01的 去混淆结论(盐值、pageId、版本基准时间戳,以及 SDK 里两处Math.random漏调用导致取值恒定的行为)。Apache-2.0。 - https://github.com/cv-cat/DouYin_Spider — bd-ticket-guard 的密钥签发流程: 客户端自行生成 EC 密钥对并通过 cookie 交给服务端,由服务端签发票据, 无需从浏览器导出任何材料。
- https://github.com/dmmdekkd/DouyinDataAPI — passport 四重签名、
二次验证表单形态与
x-tt-passport-aid-sign的派生方式。
SM3(GM/T 0004-2012)与 MurmurHash3 为公开标准算法。
源码:src/platforms/douyin/passport/index.ts
aBogus
生成 a_bogus
返回值:a_bogus 参数值(未做 URL 编码)
源码:src/platforms/douyin/passport/aBogus.ts
BDMS_SDK_VERSION
bdms SDK 版本号,同时也是 passport 通用参数里的 p_bd
let BDMS_SDK_VERSION: unknown源码:src/platforms/douyin/passport/aBogus.ts
DouyinPassportClient
class DouyinPassportClient源码:src/platforms/douyin/passport/client.ts
PASSPORT_USER_AGENT
与签名里的浏览器环境保持一致的 UA
let PASSPORT_USER_AGENT: unknown源码:src/platforms/douyin/passport/client.ts
PassportPayload
passport 接口的通用响应形状
源码:src/platforms/douyin/passport/client.ts
PassportResponse
源码:src/platforms/douyin/passport/client.ts
CookieJar
class CookieJar源码:src/platforms/douyin/passport/cookieJar.ts
INTERNAL_PREFIX
本地会话状态的 cookie 名前缀,这些条目永远不会发给服务端
let INTERNAL_PREFIX: unknown源码:src/platforms/douyin/passport/cookieJar.ts
makeAidSign
计算 x-tt-passport-aid-sign 请求头
源码:src/platforms/douyin/passport/params.ts
makeSignAndQs
计算 sign 与 qs
源码:src/platforms/douyin/passport/params.ts
randomHex
随机十六进制串,用于 biz_trace_id 一类的追踪 ID
源码:src/platforms/douyin/passport/params.ts
utcNoonTimestamp
当日 UTC 12:00 的秒级时间戳,aid-sign 以此为密钥基准
源码:src/platforms/douyin/passport/params.ts
xor5Hex
逐字节异或 5 后转十六进制,SDK 用它编码参数名列表、验证码与密码
源码:src/platforms/douyin/passport/params.ts
parsePollResult
解析 check_qrconnect 响应为状态机可消费的结果
源码:src/platforms/douyin/passport/parser.ts
parseQrcode
解析 get_qrcode 响应
返回值:二维码信息,缺少 token 时返回 null
源码:src/platforms/douyin/passport/parser.ts
parseSendCodeResult
解析 send_code 响应
源码:src/platforms/douyin/passport/parser.ts
parseValidateCodeResult
解析 validate_code 响应
源码:src/platforms/douyin/passport/parser.ts
sm3
计算 SM3 摘要
返回值:32 字节摘要
源码:src/platforms/douyin/passport/sm3.ts
sm3Hex
十六进制摘要,仅用于测试与排查
源码:src/platforms/douyin/passport/sm3.ts
sm3Twice
连续两次 SM3(bdms 对 URL 与盐值的处理方式)
返回值:32 字节摘要
源码:src/platforms/douyin/passport/sm3.ts
TicketGuard
bd-ticket-guard 会话
状态全部读写自传入的 CookieJar,因此与 passport 的无状态调用形态天然兼容。
class TicketGuard源码:src/platforms/douyin/passport/ticketGuard.ts
TicketGuardState
一次登录会话持有的 ticket-guard 状态
源码:src/platforms/douyin/passport/ticketGuard.ts
PollResult
一次轮询的结果
源码:src/platforms/douyin/passport/types.ts
QrcodeInfo
二维码信息,get_qrcode 的解析结果
源码:src/platforms/douyin/passport/types.ts
SendCodeResult
发送短信验证码的结果
源码:src/platforms/douyin/passport/types.ts
ValidateCodeResult
提交短信验证码的结果
源码:src/platforms/douyin/passport/types.ts
VerifyContext
二次验证上下文
源码:src/platforms/douyin/passport/types.ts
VerifyWay
单个验证方式
源码:src/platforms/douyin/passport/types.ts
buildVerifyBody
发码与验码共用的表单字段。
字段顺序与「空值也要占位」的行为对齐官方验证页 SDK 的抓包形态:
verify_ticket / new_verify_flow / std_verify_flow_id / std_verify_token
即使为空也必须出现,缺字段会被判为伪造请求。
返回值:可直接交给 client.liteRequest 的表单
源码:src/platforms/douyin/passport/verify.ts
isSmsCodeVerifyWay
判断某个验证方式能否用短信验证码流程完成。
返回值:能走短信收码流程时为 true
源码:src/platforms/douyin/passport/verify.ts
resolveVerifyWay
选出本次要用的 std_verify_way。
优先用调用方指定的;否则从服务端给出的可选方式里挑一个能收码的;都没有才回退到
默认值。不能写死 mobile_sms_verify —— 遇到辅助验证的账号会因为 way 对不上
而失败,也不能取 verifyWays[0],那一项未必是短信方式。
返回值:本次使用的 std_verify_way
源码:src/platforms/douyin/passport/verify.ts
SMS_ACT_TYPE
短信验证码的 act_type
let SMS_ACT_TYPE: unknown源码:src/platforms/douyin/passport/verify.ts
SMS_CODE_WAY_PATTERN
可以用「收 6 位验证码」这套流程走完的验证方式。
除官方常见的 mobile_sms_verify,账号被判定需要辅助验证时会给出
assist_mobile_sms_verify,两者都是下行短信收码,走同一对
send_code / validate_code 接口,区别只在 std_verify_way 的取值。
上行短信(*_up_sms_verify)要求用户从手机发短信出去,是另一套接口,不在此列。
let SMS_CODE_WAY_PATTERN: unknown源码:src/platforms/douyin/passport/verify.ts
SMS_VERIFY_WAY
短信验证码的验证方式标识,服务端未给出可用方式时的兜底值
let SMS_VERIFY_WAY: unknown源码:src/platforms/douyin/passport/verify.ts
douyinSign
class douyinSign源码:src/platforms/legacy/douyin/sign/index.ts
AB
a_bogus 签名算法
AB(url: string, userAgent?: string): stringProp
Type
返回值:对此地址签名后的URL查询参数
AcSignature
__ac_signature 反爬签名算法(纯算,不执行挑战页脚本)
与 AB / XB 不同,它签的不是 URL 而是服务端下发的 __ac_nonce:零 cookie 打
抖音页面会拿到一份 VMP 挑战页 + Set-Cookie 里的 __ac_nonce,带着
__ac_nonce + __ac_signature 再请求一次才放行(访客 cookie 就是这么铸出来的)。
签名体带一个整秒时间戳,所以同一 nonce 在同一秒内结果一致、跨秒就变;
atMs 可显式传入以复现某一刻的结果。
AcSignature(nonce: string, userAgent?: string, atMs?: number): stringProp
Type
返回值:47 字符的 __ac_signature
Mstoken
生成一个指定长度的随机字符串
Mstoken(length: number): stringProp
Type
SecSdk
x-secsdk-web-signature 签名算法
与 AB / XB 不同,它改写整条 URL 而不是返回一个参数值:签名算的是规范化后的 query,
服务端也按收到的 query 校验,所以必须发送返回的这条 URL。只对 SDK 策略表内的 path 生效,
其余原样返回,因此可以无条件套用。必须是最后一步(webid → a_bogus → 本签名)。
SecSdk(url: string, options: ApplySecsdkOptions): stringProp
Type
返回值:需要加签时返回带签名的完整 URL,否则原样返回
VerifyFpManager
生成一个唯一的验证字符串
VerifyFpManager(): stringXB
X-Bogus 签名算法
XB(url: string, userAgent?: string): stringProp
Type
返回值:对此地址签名后的URL查询参数
douyinUtils
抖音相关功能模块 (工具集)
const douyinUtils: douyinUtilsModel源码:src/platforms/douyin/utils.ts
DynamicType
动态类型枚举
独立成叶子模块:Dynamic 子树各叶子类型文件都要用它做判别字段,
若定义在 DynamicInfo/index.ts 会形成叶子反向导入 barrel 的环。
它是运行时 enum,不是任何端点响应的形状映射,所以没有「形状序号 _V<n>」,
也不必按响应类型的目录约定包一层。
Prop
Type
源码:src/types/ReturnDataType/Bilibili/DynamicType.ts
KUAISHOU_H5_CAPTCHA_RESULT
H5 REST 的风控业务码
const KUAISHOU_H5_CAPTCHA_RESULT: 2001源码:src/platforms/kuaishou/captcha.ts
KUAISHOU_PC_CAPTCHA_RESULT
PC GraphQL 的风控业务码
const KUAISHOU_PC_CAPTCHA_RESULT: 400002源码:src/platforms/kuaishou/captcha.ts
kuaishouApiUrls
快手 URL 构造器(v6 实现)。v7 门面(client.kuaishou)上的是 apiUrls(v7
那份,在 platforms/kuaishou/api.ts);这一份只在包顶层
(import { kuaishouApiUrls } from '@ikenxuan/amagi')与 @ikenxuan/amagi/compat 可达。
该对象只负责返回请求描述,不直接发起网络请求。
端点用的是 platforms/kuaishou/api.ts 里的同名构造器,两份已经漂移:
这里的 videoWork / comments 打 www.kuaishou.com/graphql(GraphQL 的
visionVideoDetail / commentListQuery),v7 那份换成了 H5 分享页接口
c.kuaishou.com —— videoWork 是免签的
POST /rest/wd/ugH5App/photo/simple/info(实测是主通道:分享页 SSR 的
INIT_STATE 就是这条填的),comments 是 POST /rest/wd/photo/comment/list;
v7 还多出 videoWorkFull(签名的 POST /rest/wd/photo/info,实测稳定撞
2001 风控)与 danmaku 两个方法。
返回形态不是 URL 字符串:这一份给 KuaishouLiveApiRequest(live_api,带
method / body / signPath / requiresSign)或 KuaishouGraphqlRequest;
v7 那份给 KuaishouH5Request(method / body / signPath / referer /
requiresSign)或 KuaishouGraphqlRequest。
新代码请用 client.kuaishou.apiUrls(v7 那份);这一份的调用方按原样保留。
const kuaishouApiUrls: API源码:src/platforms/legacy/kuaishou/API.ts
kuaishouFetcher
快手数据获取器(静态)。 包含所有快手 API 方法,调用时需要传递 cookie
const kuaishouFetcher: KuaishouFetcher示例
import { } from '@ikenxuan/amagi'
const = 'did=xxx'
const = await .({ : '3x123456789' }, )源码:src/model/fetchers/kuaishou/index.ts
kuaishouSign
快手签名工具集。
负责将请求描述对象转换为带 __NS_hxfalcon / kww 的最终请求材料。
class kuaishouSign源码:src/platforms/legacy/kuaishou/sign/index.ts
generateHxfalconFromPayload
根据结构化签名载荷生成 __NS_hxfalcon。
generateHxfalconFromPayload(payload: KuaishouHxfalconPayload): Pick<KuaishouLiveApiSignature, "signResult" | "signInput" | "catVersion">Prop
Type
返回值:包含最终签名串、sign input 与 caver 的结果
generateKww
生成快手请求头中的 kww 值。
generateKww(cookie?: string): stringProp
Type
返回值:kww 请求头值
getCatVersion
获取当前纯算法运行时使用的 caver。
getCatVersion(): string返回值:快手 caver 值
signLiveApiRequest
为结构化的快手 live_api 请求描述对象签名。
这是项目层更推荐使用的入口,因为它能显式保留 signPath 元数据。
signLiveApiRequest(request: KuaishouLiveApiRequest, cookie?: string): KuaishouLiveApiSignatureProp
Type
返回值:带签名 URL、附加请求头和调试信息
signLiveApiUrl
为快手 live_api URL 签名。
signLiveApiUrl(url: string, cookie?: string, signPath?: string): KuaishouLiveApiSignatureProp
Type
返回值:带签名 URL、附加请求头和调试信息
kuaishouUtils
快手相关功能模块 (工具集)
const kuaishouUtils: kuaishouUtilsModel源码:src/platforms/kuaishou/utils.ts
MajorType
转发动态种子动态主体类型枚举
Prop
Type
源码:src/types/ReturnDataType/Bilibili/Dynamic/index.ts
ValidationError
参数验证错误类
class ValidationError构造参数验证错误
let "": unknownerrors
let readonly errors?: Array<{ field: string; message: string }>fromZodError
从Zod错误创建验证错误
fromZodError(zodError: zod.ZodError<any>, requestPath?: string): ValidationErrorProp
Type
返回值:验证错误实例
requestPath
let readonly requestPath?: stringXIAOHONGSHU_ANTI_SPAM_STATUS
反垃圾状态码。平台 redcaptcha SDK 里的名字是 antiSpam
const XIAOHONGSHU_ANTI_SPAM_STATUS: 471源码:src/platforms/xiaohongshu/captcha.ts
XIAOHONGSHU_ANTI_SPIDER_STATUS
反爬状态码。平台 redcaptcha SDK 里的名字是 antiSpider
const XIAOHONGSHU_ANTI_SPIDER_STATUS: 461源码:src/platforms/xiaohongshu/captcha.ts
xiaohongshuApiUrls
小红书 URL 构造器(v6 实现)。v7 门面(client.xiaohongshu)上的是 apiUrls(v7
那份,在 platforms/xiaohongshu/api.ts);这一份只在包顶层
(import { xiaohongshuApiUrls } from '@ikenxuan/amagi')与 @ikenxuan/amagi/compat 可达。
端点用的是 platforms/xiaohongshu/api.ts 里的同名构造器,两份当前输出一致
(七个方法的主机、路径与 body 逐个比对相同),但方法签名有两点差别:
这里的 searchNotes 自己调 xiaohongshuSign.getSearchId() 生成 search_id,
v7 那份要调用方把 searchId 显式传进来(模块因此保持纯函数、可复现);
emojiList 这里收一个被忽略的参数,v7 那份不收参数。仍是两份实现、
不保证继续一致。
返回形态不是 URL 字符串:两份都给 { Url, Body, apiPath } 三段(v7 那份
的类型名是 XhsRequestDescription)—— x-s 签名只吃 pathname、POST 的 body
又要参与签名,一个字符串装不下这三样。
新代码请用 client.xiaohongshu.apiUrls(v7 那份);这一份的调用方按原样保留。
const xiaohongshuApiUrls: { homeFeed(data?: Omit<{ methodType: "homeFeed"; cursor_score?: string | undefined; num?: number | undefined; refresh_type?: number | undefined; note_index?: number | undefined; category?: string | undefined; search_key?: string | undefined; }, "methodType">): { ...; }; ... 5 more ...; searchNotes(data: Omit<...>): ...源码:src/platforms/legacy/xiaohongshu/API.ts
xiaohongshuFetcher
小红书数据获取器(静态)。 包含所有小红书 API 方法,调用时需要传递 cookie
const xiaohongshuFetcher: XiaohongshuFetcher示例
import { } from '@ikenxuan/amagi'
const = 'a1=xxx; web_session=xxx'
const = await .({ : 'n1', : 'tk' }, )源码:src/model/fetchers/xiaohongshu/index.ts
xiaohongshuSign
小红书签名算法类
class xiaohongshuSign源码:src/platforms/legacy/xiaohongshu/sign/index.ts
client
let client: unknowncreateGuestCookie
创建包含 web_session 的小红书 Web 端游客 Cookie。
requestConfig 会透传到游客会话初始化请求,可用于配置代理、超时等传输参数。
createGuestCookie(requestConfig?: AxiosRequestConfig): Promise<string>Prop
Type
extractA1FromCookie
从cookie字符串中提取a1值
按名精确匹配(contracts/cookie.ts 的 getCookieValue)—— 正则匹配会在
xa1=WRONG; a1=RIGHT 这类输入上取错值。未命中返回空串(getCookieValue
返回 undefined,这里用 ?? '' 承接)。
extractA1FromCookie(cookieString: string): stringProp
Type
返回值:a1 cookie值
generateXB3Traceid
生成X-B3-Traceid
generateXB3Traceid(): string返回值:16位随机字符串
generateXSCommon
生成X-S-Common参数
generateXSCommon(cookies: string): stringProp
Type
返回值:Base64编码的随机字符串
generateXSGet
生成GET请求的X-S签名
generateXSGet(path: string, a1Cookie: string, clientType: string, params: Record<string, any>): stringProp
Type
返回值:X-S签名
generateXSPost
生成POST请求的X-S签名
generateXSPost(path: string, a1Cookie: string, clientType: string, body: Record<string, any>): stringProp
Type
返回值:X-S签名
generateXT
生成X-T时间戳
generateXT(): number返回值:当前时间戳字符串
getSearchId
生成搜索ID
let getSearchId: unknown返回值:搜索ID字符串
xiaohongshuUtils
小红书相关功能模块 (工具集)
const xiaohongshuUtils: xiaohongshuUtilsModel