oicq-icalingua-plus-plus 1.26.26 → 1.26.27

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/index.d.ts CHANGED
@@ -54,9 +54,12 @@ export interface ConfBot {
54
54
  /** 强制使用算法计算T544,而不使用qsign(算法为8.9.50的0C05,混用版本可能导致风控) */
55
55
  force_algo_T544?: boolean,
56
56
 
57
- /** 使用NT上线包,部分消息暂未支持 */
57
+ /** 使用 NT 上线包,部分消息暂未支持 */
58
58
  useNT?: boolean,
59
59
 
60
+ /** 使用 NT 协议上传图片,默认 false,运行时修改从下一次上传生效 */
61
+ useNTImage?: boolean,
62
+
60
63
  /** 强制使用旧版WT登录,即使当前APK支持NT登录 */
61
64
  forceWt?: boolean,
62
65
 
@@ -257,9 +260,10 @@ export interface BfaceElem {
257
260
  type: "bface",
258
261
  data: {
259
262
  file: string,
260
- text: string
263
+ text: string,
261
264
  width?: number,
262
265
  height?: number,
266
+ type?: "png" | "gif",
263
267
  }
264
268
  }
265
269
 
@@ -293,6 +297,7 @@ export interface ImgPttElem {
293
297
  headers?: OutgoingHttpHeaders, //file为网络资源时请求头
294
298
  url?: string, //仅接收
295
299
  type?: "image" | "flash" | "face",
300
+ brief?: string, //传统语音预览文案
296
301
  }
297
302
  }
298
303
 
package/lib/client-ext.js CHANGED
@@ -13,6 +13,517 @@ const { parseC2CMsg } = require("./message/parser");
13
13
  const Writer = require("./wtlogin/writer");
14
14
  const { buildUrl, getCommonParams, qsignGet, qsignPost, executeWithRetry, sleep } = require("./qsign-api");
15
15
 
16
+ const localSigners = new Map();
17
+ const supportsLocalSigner = Number(process.versions.node.split(".")[0]) >= 16;
18
+ const whitelist_920 = [
19
+ "MessageSvc.PbSendMsg",
20
+ "trpc.o3.ecdh_access.EcdhAccess.SsoEstablishShareKey",
21
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureAccess",
22
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Access",
23
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Establish",
24
+ "trpc.o3.report.Report.SsoReport",
25
+ "wtlogin.login",
26
+ "wtlogin.trans_emp",
27
+ "wtlogin.exchange_emp",
28
+ "wtlogin.name2uin",
29
+ "OidbSvcTrpcTcp.0x55f_0",
30
+ "OidbSvc.0x758",
31
+ "OidbSvc.0x758_0",
32
+ "OidbSvc.0x758_1",
33
+ "OidbSvc.oidb_0x758",
34
+ "friendlist.AddFriendReq",
35
+ "OidbSvc.0x8a1_0",
36
+ "OidbSvc.0x8a1_7",
37
+ "OidbSvc.0x89a_0",
38
+ "OidbSvc.0x88d_0",
39
+ "ProfileService.Pb.ReqSystemMsgAction.Group",
40
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.PublishFeed",
41
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoLike",
42
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoFollow",
43
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoComment",
44
+ "SQQzoneSvc.publishmood",
45
+ "SQQzoneSvc.shuoshuo",
46
+ "SQQzoneSvc.like",
47
+ "SQQzoneSvc.addComment",
48
+ "SQQzoneSvc.addReply",
49
+ "SQQzoneSvc.forward",
50
+ "OidbSvc.0x4ff_9",
51
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.PublishFeed",
52
+ "OidbSvcTrpcTcp.0x1100_1",
53
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoComment",
54
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoReply",
55
+ "OidbSvcTrpcTcp.0x1107_1",
56
+ "OidbSvcTrpcTcp.0x1105_1",
57
+ "OidbSvcTrpcTcp.0xf88_1",
58
+ "OidbSvcTrpcTcp.0xf89_1",
59
+ "OidbSvcTrpcTcp.0xf57_1",
60
+ "OidbSvcTrpcTcp.0xf57_106",
61
+ "OidbSvcTrpcTcp.0xf57_9",
62
+ "OidbSvcTrpcTcp.0xf55_1",
63
+ "OidbSvcTrpcTcp.0xf67_1",
64
+ "OidbSvcTrpcTcp.0xf67_5",
65
+ "trpc.qlive.relationchain_svr.RelationchainSvr.Follow",
66
+ "trpc.qlive.word_svr.WordSvr.NewPublicChat",
67
+ "ProfileService.GroupMngReq",
68
+ "ProfileService.getGroupInfoReq",
69
+ "FeedCloudSvr.trpc.videocircle.circleprofile.CircleProfile.SetProfile",
70
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoPush",
71
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoReply",
72
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoBarrage",
73
+ "friendlist.addFriend",
74
+ "OidbSvc.0x4ff_9_IMCore",
75
+ "trpc.springfestival.redpacket.LuckyBag.SsoSubmitGrade",
76
+ "trpc.qqhb.qqhb_proxy.Handler.sso_handle",
77
+ "wtlogin.register",
78
+ "wtlogin.qrlogin",
79
+ "wtlogin.device_lock",
80
+ "OidbSvc.0x8ba",
81
+ "OidbSvc.0x89b_1",
82
+ "OidbSvc.0x9fa",
83
+ "OidbSvc.0x56c_6",
84
+ "qidianservice.269",
85
+ "qidianservice.207",
86
+ "qidianservice.290",
87
+ "qidianservice.135",
88
+ "friendlist.ModifyGroupInfoReq",
89
+ "trpc.group_pro.msgproxy.sendmsg",
90
+ "OidbSvcTrpcTcp.0x101e_1",
91
+ "OidbSvcTrpcTcp.0x101e_2",
92
+ "OidbSvcTrpcTcp.0xfa5_1",
93
+ "OidbSvcTrpcTcp.0xf65_1",
94
+ "OidbSvcTrpcTcp.0xf65_10",
95
+ "OidbSvcTrpcTcp.0xf6e_1",
96
+ "OidbSvcTrpcTcp.0x1102_1",
97
+ "ConnAuthSvr.fast_qq_login",
98
+ "ConnAuthSvr.sdk_auth_api",
99
+ "ConnAuthSvr.sdk_auth_api_emp",
100
+ "MsgProxy.SendMsg",
101
+ "trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLoginUnusualDevice",
102
+ "trpc.passwd.manager.PasswdManager.SetPasswd",
103
+ "trpc.passwd.manager.PasswdManager.VerifyPasswd",
104
+ "wtlogin_device.login",
105
+ "wtlogin_device.tran_sim_emp",
106
+ "OidbSvcTrpcTcp.0x6d9_4",
107
+ "OidbSvc.0x6d9_4",
108
+ "trpc.login.ecdh.EcdhService.SsoQRLoginGenQr",
109
+ "QQConnectLogin.get_promote_page",
110
+ "QQConnectLogin.get_promote_page_emp",
111
+ "QQConnectLogin.submit_promote_page",
112
+ "QQConnectLogin.submit_promote_page_emp",
113
+ "QQConnectLogin.pre_auth",
114
+ "QQConnectLogin.pre_auth_emp",
115
+ "ConnAuthSvr.get_app_info",
116
+ "ConnAuthSvr.get_app_info_emp",
117
+ "QQConnectLogin.auth",
118
+ "QQConnectLogin.auth_emp",
119
+ "ConnAuthSvr.get_auth_api_list",
120
+ "ConnAuthSvr.get_auth_api_list_emp",
121
+ "trpc.commercial.dataworks.UserActionReport_sso.SsoReport",
122
+ "trpc.lplan.user_manager_svr.User.SsoSetProfile",
123
+ "trpc.lplan.feed_svr.StatusWrite.SsoComment",
124
+ "trpc.lplan.feed_svr.StatusWrite.SsoReply",
125
+ "trpc.lplan.feed_svr.StatusWrite.SsoPostStatus",
126
+ "trpc.lplan.like_svr.Like.SsoDoLike",
127
+ "trpc.lplan.map_svr.Map.SsoReportLocation",
128
+ "trpc.qmeta.mob_proxy_svr.MobProxy.SsoHandle",
129
+ "QQStranger.login_svr.SsoLoginInfoReport",
130
+ "QQStranger.UserInfo.SsoSetMiniUserInfo",
131
+ "QQStranger.FeedPlazaSvr.SsoFeedPublish",
132
+ "QQStranger.InteractiveMsgSvr.SsoSendInterMsg",
133
+ "trpc.qqstranger.common_proxy.CommonProxy.SsoHandle",
134
+ "QQStranger.FeedSvr.SsoFeedPublish",
135
+ "OidbSvcTrpcTcp.0x9176_1",
136
+ "LightAppSvc.mini_app_userapp.GetDropdownAppList",
137
+ "OidbSvcTrpcTcp.0xfd4_1",
138
+ "OidbSvc.0xb3c_add",
139
+ "OidbSvc.0xb3c_get_undone",
140
+ "OidbSvc.0xb3c_get_done",
141
+ "OidbSvc.0xb3c_get_by_id",
142
+ "OidbSvc.0xb3c_update",
143
+ "OidbSvc.0xb3c_delete",
144
+ "OidbSvc.0xb3c_share",
145
+ "OidbSvc.0xb3c_get_done_count",
146
+ "OidbSvc.0xb3c",
147
+ "OidbSvc.0xb3c_1",
148
+ "OidbSvc.0xb3c_2",
149
+ "OidbSvc.0xb3c_3",
150
+ "OidbSvc.0xb3c_4",
151
+ "OidbSvc.0xb3c_5",
152
+ "OidbSvc.0xb3c_6",
153
+ "OidbSvc.0xb3c_7",
154
+ "OidbSvc.0xb3c_8",
155
+ "OidbSvc.0x592",
156
+ "OidbSvc.0x592_1",
157
+ "OidbSvc.0x592_2",
158
+ "OidbSvc.0x592_3",
159
+ "OidbSvc.0x592_4",
160
+ "OidbSvc.0x592_5",
161
+ "OidbSvc.0x592_6",
162
+ "OidbSvc.0x592_7",
163
+ "OidbSvc.0x592_8",
164
+ "OidbSvc.0x592_9",
165
+ "OidbSvc.0x592_10",
166
+ "OidbSvc.0x592_11",
167
+ "OidbSvc.0x592_12",
168
+ "OidbSvc.0x592_19",
169
+ "OidbSvc.0x592_13",
170
+ "OidbSvc.0x592_15",
171
+ "OidbSvc.0x592_16",
172
+ "OidbSvc.0x592_17",
173
+ "OidbSvc.0x592_18",
174
+ "OidbSvc.0xb3c_update_5",
175
+ "OidbSvcTrpcTcp.0x8a1_7",
176
+ "OidbSvcTrpcTcp.0x11ec_1",
177
+ "OidbSvcTrpcTcp.0x758_1",
178
+ "OidbSvcTrpcTcp.0x7c2_5",
179
+ "OidbSvcTrpcTcp.0x10db_1",
180
+ "trpc.qpay.midas_order.Order.SsoMakeOrder",
181
+ "trpc.qpay.red_pack_skin.Skin.SsoAddSkin",
182
+ "trpc.qpay.sso.web.Do",
183
+ "WalletGestureSvc.GetPassword",
184
+ "WalletGestureSvc.GetSignV2",
185
+ "WalletGestureSvc.SetPassword",
186
+ "trpc.qpay.encryptedtransfer.Encryption.SsoUINEncrypt",
187
+ "trpc.qlive.qlive_proxy_svr.TrpcProxy.*",
188
+ "trpc.down.intercept.Intercept.SsoGetInterceptFile",
189
+ "trpc.down.intercept.Intercept.SsoGetDownloadTips",
190
+ "trpc.down.joint_operation_game_intercept.JointOperationGameIntercept.SsoCheck",
191
+ "trpc.down.joint_operation_game_intercept.JointOperationGameIntercept.SsoQueryConfig",
192
+ "OidbSvcTrpcTcp.0x92e4_0",
193
+ "miniapp.trpc.minigame.sdk_qgroup_svr.sdk_qgroup_svr.JoinGroup",
194
+ "gcbindgroupsso.get_appid",
195
+ "gcbindgroupsso.unbind_group",
196
+ "GDCTrpcProxy.service",
197
+ "GDCTrpcProxy.down",
198
+ "OidbSvcTrpcTcp.0x930d_0",
199
+ "OidbSvcTrpcTcp.0x92eb_0",
200
+ "OidbSvcTrpcTcp.0x930e_0",
201
+ "MQUpdateSvc_com_qq_qzone_act.web.OidbSvcTrpcJsapiTcp.0x9377_0",
202
+ "OidbSvc.0xcd5",
203
+ "OidbSvcTrpcTcp.0xcd5",
204
+ "trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLogin",
205
+ "trpc.login.ecdh.EcdhService.SsoNTLoginGetSaltList",
206
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckA1List",
207
+ "trpc.login.ecdh.EcdhService.SsoNTLoginAuthNewDevice",
208
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRefreshTicket",
209
+ "trpc.login.ecdh.EcdhService.SsoNTLoginOptimusLogin",
210
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckGateWayCode",
211
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckThirdCode",
212
+ "trpc.login.ecdh.EcdhService.SsoNTLoginGetSms",
213
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckSms",
214
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916a",
215
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916b",
216
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916c",
217
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916d",
218
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRapidLogin",
219
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRefreshA2",
220
+ "trpc.login.ecdh.EcdhService.SsoKeyExchange",
221
+ "trpc.login.ecdh.EcdhService.SsoQRLoginAuthQr",
222
+ "trpc.login.ecdh.EcdhService.SsoQRLoginRejectQr",
223
+ "trpc.login.ecdh.EcdhService.SsoQRLoginCancleQr",
224
+ "OidbSvcTrpcTcp.0x91b6_1",
225
+ "OidbSvc.0xb77_9",
226
+ "OidbSvc.0xb77_48",
227
+ "OidbSvc.0xb77_46",
228
+ "OidbSvc.0xb77_34",
229
+ "OidbSvc.0xdc2_9",
230
+ "OidbSvc.0xdc2_34",
231
+ "OidbSvcTrpcTcp.0x10c8_2",
232
+ "OidbSvcTrpcTcp.0x9144_1",
233
+ "OidbSvcTrpcTcp.0x911a_19",
234
+ "OidbSvcTrpcTcp.0x911a_22",
235
+ "MQUpdateSvc_com_qq_ti.web.OidbSvcTrpcJsapiTcp.0x9047_0",
236
+ "OidbSvcTrpcTcp.0x93d7_1",
237
+ "OidbSvcTRPCTcp.0xf67_1",
238
+ "OidbSvcTRPCTcp.0x758_1",
239
+ "OidbSvcTrpcTcp.0xb77_57",
240
+ "OidbSvcTrpcTcp.0x9076_1",
241
+ "OidbSvcTrpcTcp.0x9078_1",
242
+ "OidbSvcTrpcTcp.0x112e_1",
243
+ "AvatarInfoSvr.QQHeadUrlReq",
244
+ "CertifiedAccountSvc.certified_account_read.GetFollowList",
245
+ "FeedCloudSvr.trpc.circlesearch.exhibition.ExhibitionSvr.ExhibitionSuggestion",
246
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetBusiInfo",
247
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetCommentList",
248
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetFeedList",
249
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetMainPageBasicData",
250
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetMainPageCommData",
251
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetRelationGroupList",
252
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetReplyList",
253
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetRerankedFeedList",
254
+ "GameCenterMsg.GetUserInfo",
255
+ "IncreaseURLSvr.QQHeadUrlReq",
256
+ "LightAppSvc.mini_app_cloudstorage.GetUserCloudStorage",
257
+ "LightAppSvc.mini_app_privacy.GetPrivacyInfo",
258
+ "MessageSvc.PbBindUinGetMsg",
259
+ "MessageSvc.PbGetGroupMsg",
260
+ "MessageSvc.PbGetMsg",
261
+ "MessageSvc.PbGetRoamMsg",
262
+ "NowSummaryCard.NearbyMiniCardReq",
263
+ "OidbSvc.0x42d",
264
+ "OidbSvc.0x42d_4",
265
+ "OidbSvc.0x480_9",
266
+ "OidbSvc.0x480_9_IMCore",
267
+ "OidbSvc.0x515_2",
268
+ "OidbSvc.0x53c_2",
269
+ "OidbSvc.0x570_8",
270
+ "OidbSvc.0x580_1",
271
+ "OidbSvc.0x587_123",
272
+ "OidbSvc.0x587_normalNightSet",
273
+ "OidbSvc.0x58b",
274
+ "OidbSvc.0x5d0_1",
275
+ "OidbSvc.0x5eb_15",
276
+ "OidbSvc.0x5eb_22",
277
+ "OidbSvc.0x5eb_42073",
278
+ "OidbSvc.0x5eb_42261",
279
+ "OidbSvc.0x5eb_43",
280
+ "OidbSvc.0x5eb_96",
281
+ "OidbSvc.0x5eb_99",
282
+ "OidbSvc.0x5eb_ForTheme",
283
+ "OidbSvc.0x5eb_cn_switch",
284
+ "OidbSvc.0x5eb_common",
285
+ "OidbSvc.0x6d6_0",
286
+ "OidbSvc.0x6d6_2",
287
+ "OidbSvc.0x6d6_3",
288
+ "OidbSvc.0x6d7_0",
289
+ "OidbSvc.0x787_0",
290
+ "OidbSvc.0x787_1",
291
+ "OidbSvc.0x787_11",
292
+ "OidbSvc.0x7a2_0",
293
+ "OidbSvc.0x7df_3",
294
+ "OidbSvc.0x852_35",
295
+ "OidbSvc.0x852_48",
296
+ "OidbSvc.0x88d_1",
297
+ "OidbSvc.0x88d_1_2",
298
+ "OidbSvc.0x88d_7",
299
+ "OidbSvc.0x899_0",
300
+ "OidbSvc.0x899_9",
301
+ "OidbSvc.0x8a0_0",
302
+ "OidbSvc.0x8a4",
303
+ "OidbSvc.0x8f1",
304
+ "OidbSvc.0xbbb",
305
+ "OidbSvc.0xbcb",
306
+ "OidbSvc.0xbe8",
307
+ "OidbSvc.0xc26_0",
308
+ "OidbSvc.0xc33_42220",
309
+ "OidbSvc.0xc6b",
310
+ "OidbSvc.0xcdd",
311
+ "OidbSvc.0xe27",
312
+ "OidbSvc.0xe3e",
313
+ "OidbSvc.0xe61",
314
+ "OidbSvc.0xe63_1",
315
+ "OidbSvc.0xe72",
316
+ "OidbSvc.0xef0_1",
317
+ "OidbSvc.0xf7e_1",
318
+ "OidbSvcTcp.0x102a",
319
+ "OidbSvcTcp.0x88d_0",
320
+ "OidbSvcTcp.0x88d_1",
321
+ "OidbSvcTcp.0xef0_1",
322
+ "OidbSvcTrpcTcp.0x1017_1",
323
+ "OidbSvcTrpcTcp.0x105b_1",
324
+ "OidbSvcTrpcTcp.0x10c0_1",
325
+ "OidbSvcTrpcTcp.0x10c0_2",
326
+ "OidbSvcTrpcTcp.0x10c8_1",
327
+ "OidbSvcTrpcTcp.0x10d8_1",
328
+ "OidbSvcTrpcTcp.0x10ed_1",
329
+ "OidbSvcTrpcTcp.0x10f4_1",
330
+ "OidbSvcTrpcTcp.0x110d_1",
331
+ "OidbSvcTrpcTcp.0x1130_1",
332
+ "OidbSvcTrpcTcp.0x116c_1",
333
+ "OidbSvcTrpcTcp.0x116d_1",
334
+ "OidbSvcTrpcTcp.0x1194_1",
335
+ "OidbSvcTrpcTcp.0x11c4_100",
336
+ "OidbSvcTrpcTcp.0x11c4_200",
337
+ "OidbSvcTrpcTcp.0x11c5_100",
338
+ "OidbSvcTrpcTcp.0x11c5_200",
339
+ "OidbSvcTrpcTcp.0x11e9_100",
340
+ "OidbSvcTrpcTcp.0x11e9_200",
341
+ "OidbSvcTrpcTcp.0x11ea_200",
342
+ "OidbSvcTrpcTcp.0x1224_0",
343
+ "OidbSvcTrpcTcp.0x1225_0",
344
+ "OidbSvcTrpcTcp.0x1250_0",
345
+ "OidbSvcTrpcTcp.0x1258_1",
346
+ "OidbSvcTrpcTcp.0x125b_500",
347
+ "OidbSvcTrpcTcp.0x1262_19",
348
+ "OidbSvcTrpcTcp.0x126d_200",
349
+ "OidbSvcTrpcTcp.0x126e_200",
350
+ "OidbSvcTrpcTcp.0x127a_0",
351
+ "OidbSvcTrpcTcp.0x1289_1",
352
+ "OidbSvcTrpcTcp.0x12a9_200",
353
+ "OidbSvcTrpcTcp.0x5cf_11",
354
+ "OidbSvcTrpcTcp.0x644_1",
355
+ "OidbSvcTrpcTcp.0x6d6_2",
356
+ "OidbSvcTrpcTcp.0x6d6_3",
357
+ "OidbSvcTrpcTcp.0x6d9_2",
358
+ "OidbSvcTrpcTcp.0x787_1",
359
+ "OidbSvcTrpcTcp.0x88d_111",
360
+ "OidbSvcTrpcTcp.0x899_0",
361
+ "OidbSvcTrpcTcp.0x899_1",
362
+ "OidbSvcTrpcTcp.0x899_9",
363
+ "OidbSvcTrpcTcp.0x8f9_14",
364
+ "OidbSvcTrpcTcp.0x8fc_3",
365
+ "OidbSvcTrpcTcp.0x901f_1",
366
+ "OidbSvcTrpcTcp.0x902e_1",
367
+ "OidbSvcTrpcTcp.0x9124_0",
368
+ "OidbSvcTrpcTcp.0x9127_1",
369
+ "OidbSvcTrpcTcp.0x972_6",
370
+ "OidbSvcTrpcTcp.0x9a2_12",
371
+ "OidbSvcTrpcTcp.0xa80_1",
372
+ "OidbSvcTrpcTcp.0xaf6_0",
373
+ "OidbSvcTrpcTcp.0xe37_1200",
374
+ "OidbSvcTrpcTcp.0xe37_1700",
375
+ "OidbSvcTrpcTcp.0xe37_700",
376
+ "OidbSvcTrpcTcp.0xe37_800",
377
+ "OidbSvcTrpcTcp.0xf59_2",
378
+ "OidbSvcTrpcTcp.0xf5b_1",
379
+ "OidbSvcTrpcTcp.0xf5d_1",
380
+ "OidbSvcTrpcTcp.0xf5d_11",
381
+ "OidbSvcTrpcTcp.0xfe1",
382
+ "OidbSvcTrpcTcp.0xfe1_2",
383
+ "OidbSvcTrpcTcp.0xfe1_8",
384
+ "OidbSvcTrpcTcp.0xfe5_2",
385
+ "OidbSvcTrpcTcp.0xfe7_2",
386
+ "OidbSvcTrpcTcp.0xfe7_3",
387
+ "OidbSvcTrpcTcp.0xfe7_4",
388
+ "OidbSvc_device.0x633",
389
+ "OidbSvc_device.0x9f5",
390
+ "PbMessageSvc.PbUnReadMsgSeq",
391
+ "ProfileService.SimpleInfo",
392
+ "PushService.settoken",
393
+ "QChannelSvr.trpc.qchannel.commreader.ComReader.BatchGetFeedDetail",
394
+ "QQRTCSvc.RoomManager-GetRoomInfo",
395
+ "QQStranger.UserInfo.SsoBatchGetMiniUserInfo",
396
+ "QQStranger.UserInfo.SsoGetMiniUserInfo",
397
+ "QSec.AVEng",
398
+ "ResourceConfig.ClientReq",
399
+ "ResourceConfig.GetResourceReq",
400
+ "SQQzoneSvc.Custom.getFacade",
401
+ "SQQzoneSvc.GetCate",
402
+ "SQQzoneSvc.get",
403
+ "SQQzoneSvc.getAIONewestFeeds",
404
+ "SQQzoneSvc.getActiveFeeds",
405
+ "SQQzoneSvc.getPhotoComment",
406
+ "SQQzoneSvc.getPhotoWall",
407
+ "SQQzoneSvc.getProfile",
408
+ "SQQzoneSvc.getProfileFeeds",
409
+ "SQQzoneSvc.getVisitorNotify",
410
+ "SQQzoneSvc.get_all_feedsphoto_ex",
411
+ "SQQzoneSvc.mobileqboss.get",
412
+ "SQQzoneSvc.photo",
413
+ "SQQzoneSvc.preGetPassiveFeeds",
414
+ "SecuritySvc.GetConfig",
415
+ "SsoSnsSession.Cmd0x3_SubCmd0x1_FuncGetBlockList",
416
+ "StatSvc.GetOnlineStatus",
417
+ "StatSvc.register",
418
+ "SummaryCard.ReqSummaryCard",
419
+ "VisitorSvc.ReqFavorite",
420
+ "account.RequestQueryQQMobileContactsV3",
421
+ "friendlist.GetFriendListReq",
422
+ "friendlist.GetLastLoginInfoReq",
423
+ "friendlist.GetMultiTroopInfoReq",
424
+ "friendlist.GetSimpleOnlineFriendInfoReq",
425
+ "friendlist.GetTroopAppointRemarkReq",
426
+ "friendlist.GetTroopListReqV2",
427
+ "friendlist.GetTroopMemberList",
428
+ "friendlist.GetTroopMemberListReq",
429
+ "friendlist.getFriendGroupList",
430
+ "friendlist.getTroopMemberList",
431
+ "group_member_card.get_group_member_card_info",
432
+ "group_member_statistic.get_group_member_statistic",
433
+ "oidb_0x42e_3",
434
+ "oidb_0x43c_4",
435
+ "oidb_0x43c_5",
436
+ "oidb_0x5d0_1",
437
+ "oidb_0x5d6_19",
438
+ "oidb_0x5d6_21",
439
+ "oidb_0x7a2_0",
440
+ "oidb_0x7c4_0",
441
+ "oidb_0x7df_3",
442
+ "oidb_0x9045_1",
443
+ "oidb_0x9072_0",
444
+ "oidb_0xcf3_0",
445
+ "oidb_0xcf4_0",
446
+ "oidb_0xd9c_11",
447
+ "oidb_0xdc2_34",
448
+ "oidb_0xe37_1200",
449
+ "oidb_0xe37_800",
450
+ "oidb_0xe61_1",
451
+ "oidb_0xe8c_0",
452
+ "oidb_0xeb1_1",
453
+ "oidb_0xf7e_1",
454
+ "oidb_0xfd4_1",
455
+ "qzoneh5.h5.wnshtml",
456
+ "trpc.QQService.CommonLogic.StatusService.SsoGetLikeList",
457
+ "trpc.g_qqrtc.qq_mav_room_state_read.GetRoomState.SsoGetInfoByUin",
458
+ "trpc.msg.msg_svc.MsgService.SsoGetPeerSeq",
459
+ "trpc.msg.register_proxy.RegisterProxy.PushParams",
460
+ "trpc.qqva.vipdata.Vipdata.SsoGetUserData",
461
+ "SQQzoneSvc.getMainPage",
462
+ "trpc.group.long_msg_interface.MsgService.SsoRecvLongMsg",
463
+ "OidbSvcTrpcTcp.0x89a_0",
464
+ "OidbSvcTrpcTcp.0x88d_0",
465
+ "OidbSvcTrpcTcp.0x88d_14",
466
+ "OidbSvcTrpcTcp.0x102a_0",
467
+ "OidbSvcTrpcTcp.0x102a_1",
468
+ "OidbSvcTrpcTcp.0x1092_0",
469
+ "OidbSvcTrpcTcp.0x121e_0",
470
+ "trpc.msg.register_proxy.RegisterProxy.SsoInfoSync",
471
+ "OidbSvcTrpcTcp.0xfc9_1",
472
+ "SQQzoneSvc.getUndealCount",
473
+ "RegPrxySvc.infoSync",
474
+ "ProfileService.Pb.ReqSystemMsgNew.Group",
475
+ "StatSvc.SimpleGet",
476
+ "trpc.group_pro.synclogic.SyncLogic.SyncFirstView",
477
+ "RegPrxySvc.infoLogin",
478
+ "OidbSvcTrpcTcp.0x9a2_8",
479
+ "OidbSvc.0x59f",
480
+ "OidbSvcTrpcTcp.0xf59_1",
481
+ "StatSvc.SetStatusFromClient",
482
+ "StatSvc.GetDevLoginInfo",
483
+ "PubAccountSvc.get_follow_list",
484
+ "OidbSvc.0x6de",
485
+ "trpc.qq_new_tech.status_svc.StatusService.Register",
486
+ "OidbSvc.0x8a8",
487
+ "OidbSvcTrpcTcp.0x123c_1",
488
+ "OidbSvcTrpcTcp.0x1277_0",
489
+ "OidbSvcTrpcTcp.0xfe4_2",
490
+ "LightAppSvc.mini_app_userapp.GetDropdownAppList",
491
+ "OidbSvcTrpcTcp.0xfd4_1"
492
+ ];
493
+
494
+ function usesLocalSigner(client) {
495
+ return supportsLocalSigner && client.apk.ver === "9.2.0" && !client.config.sign_api_addr;
496
+ }
497
+
498
+ async function getLocalSigner(client) {
499
+ const guid = Buffer.isBuffer(client.device.guid) || client.device.guid instanceof Uint8Array
500
+ ? Buffer.from(client.device.guid).toString("hex")
501
+ : String(client.device.guid).toLowerCase();
502
+ const key = `${client.uin}:${String(client.device.android_id).toLowerCase()}:${guid}`;
503
+ let pending = localSigners.get(key);
504
+ if (!pending) {
505
+ const signer = require("./signer").createSigningSystem();
506
+ pending = Promise.resolve().then(async () => {
507
+ await signer.register({
508
+ uin: client.uin,
509
+ androidid: client.device.android_id,
510
+ guid: client.device.guid,
511
+ qua: client.apk.qua,
512
+ client,
513
+ });
514
+ return signer;
515
+ });
516
+ localSigners.set(key, pending);
517
+ pending.catch(() => {
518
+ if (localSigners.get(key) === pending) localSigners.delete(key);
519
+ if (typeof signer.close === "function") {
520
+ Promise.resolve().then(() => signer.close()).catch(() => {});
521
+ }
522
+ });
523
+ }
524
+ return pending;
525
+ }
526
+
16
527
  /**
17
528
  * seqid递增并返回
18
529
  */
@@ -396,6 +907,10 @@ const requestLock = new Lock();
396
907
  * @param {boolean} [lockAcquired=false] 调用者是否已持有requestLock
397
908
  */
398
909
  Client.prototype.registerQSign = async function(lockAcquired = false) {
910
+ if (usesLocalSigner(this)) {
911
+ await getLocalSigner(this);
912
+ return { code: 0, msg: "success" };
913
+ }
399
914
  if (!this.config.sign_api_addr) return BUF0;
400
915
  const url = buildUrl(this.config.sign_api_addr, 'register');
401
916
  const params = getCommonParams.call(this);
@@ -417,6 +932,7 @@ Client.prototype.registerQSign = async function(lockAcquired = false) {
417
932
  * @param {Array} callbackList
418
933
  */
419
934
  Client.prototype.handleSsoCallback = async function(callbackList = []) {
935
+ if (usesLocalSigner(this)) return;
420
936
  for (let packet of callbackList) {
421
937
  try {
422
938
  const cmd = String(packet.cmd);
@@ -439,6 +955,7 @@ Client.prototype.handleSsoCallback = async function(callbackList = []) {
439
955
  * @param {Buffer} body
440
956
  */
441
957
  Client.prototype.submitSsoCallback = async function(cmd, callbackId, body) {
958
+ if (usesLocalSigner(this)) return;
442
959
  const url = buildUrl(this.config.sign_api_addr, 'submit');
443
960
  const params = getCommonParams.call(this, {
444
961
  buffer: body.toString('hex'),
@@ -457,6 +974,8 @@ Client.prototype.submitSsoCallback = async function(cmd, callbackId, body) {
457
974
  * 刷新qsign的token
458
975
  */
459
976
  Client.prototype.refreshQSignToken = async function() {
977
+ // Local tokens are produced by sign(); there are no remote SSO callbacks.
978
+ if (usesLocalSigner(this)) return;
460
979
  if (!this.config.sign_api_addr) return;
461
980
  if (unsendSso.length > 0) {
462
981
  await this.handleSsoCallback(unsendSso.splice(0, unsendSso.length));
@@ -542,6 +1061,12 @@ Client.prototype.buildSSOReserveField = async function(cmd, body, seq_id = this.
542
1061
  * @param {number} seq_id
543
1062
  */
544
1063
  Client.prototype.getSign = async function(cmd, body, seq_id = this.seq_id) {
1064
+ if (usesLocalSigner(this)) {
1065
+ if (!this.apk.qua) return BUF0;
1066
+ const signer = await getLocalSigner(this);
1067
+ const data = await signer.sign({ uin: this.uin, cmd, body, seq: seq_id });
1068
+ return Buffer.from(pb.encode({ 1: data.sign, 2: data.token, 3: data.extra }));
1069
+ }
545
1070
  if (!this.config.sign_api_addr || !this.apk.qua) return BUF0;
546
1071
  const url = buildUrl(this.config.sign_api_addr, 'sign');
547
1072
  const params = getCommonParams.call(this, {
@@ -590,6 +1115,7 @@ Client.prototype.getSign = async function(cmd, body, seq_id = this.seq_id) {
590
1115
  * @param {string} cmd
591
1116
  */
592
1117
  Client.prototype.getT544 = async function(cmd) {
1118
+ if (usesLocalSigner(this)) return this.getT544CustomEnergy(cmd);
593
1119
  if (!this.config.sign_api_addr || !this.apk.qua) return BUF0;
594
1120
  if (this.config.force_algo_T544) return BUF0;
595
1121
  // 优先使用custom_energy,避免服务器使用不正确的 salt 组装
@@ -633,9 +1159,8 @@ Client.prototype.getT544 = async function(cmd) {
633
1159
  * @param {string} cmd
634
1160
  */
635
1161
  Client.prototype.getT544CustomEnergy = async function(cmd) {
636
- if (!this.config.sign_api_addr || !this.apk.qua) return BUF0;
1162
+ if ((!usesLocalSigner(this) && !this.config.sign_api_addr) || !this.apk.qua) return BUF0;
637
1163
  if (this.config.force_algo_T544) return BUF0;
638
- const url = buildUrl(this.config.sign_api_addr, 'custom_energy');
639
1164
  const salt = new Writer();
640
1165
  const subCmd = parseInt('0x' + (cmd.split("_")[1] || 9));
641
1166
  if (["810_9", "810_a", "810_d", "810_f"].includes(cmd)) {
@@ -650,6 +1175,11 @@ Client.prototype.getT544CustomEnergy = async function(cmd) {
650
1175
  salt.writeTlv(this.apk.sdkver)
651
1176
  salt.writeU32(subCmd)
652
1177
  }
1178
+ if (usesLocalSigner(this)) {
1179
+ const signer = await getLocalSigner(this);
1180
+ return (await signer.energy({ uin: this.uin, data: cmd, salt: salt.read() })).sign;
1181
+ }
1182
+ const url = buildUrl(this.config.sign_api_addr, 'custom_energy');
653
1183
  const params = getCommonParams.call(this, {
654
1184
  data: cmd,
655
1185
  salt: salt.read().toString('hex'),
@@ -683,6 +1213,7 @@ Client.prototype.getT544CustomEnergy = async function(cmd) {
683
1213
  * 从服务器获得XwDebugId
684
1214
  */
685
1215
  Client.prototype.getXwDebugId = async function() {
1216
+ if (usesLocalSigner(this)) return;
686
1217
  if (!this.config.sign_api_addr || !this.apk.qua) return;
687
1218
  const url = buildUrl(this.config.sign_api_addr, 'get_xw_debug_id');
688
1219
  const params = getCommonParams.call(this);
@@ -711,6 +1242,10 @@ Client.prototype.getXwDebugId = async function() {
711
1242
  * 从服务器拉取签名cmd名单
712
1243
  */
713
1244
  Client.prototype.updateCmdWhiteList = async function() {
1245
+ if (usesLocalSigner(this)) {
1246
+ this.needSignCmd = whitelist_920;
1247
+ return;
1248
+ }
714
1249
  if (!this.config.sign_api_addr || !this.apk.qua) return;
715
1250
  const url = buildUrl(this.config.sign_api_addr, 'cmd_whitelist');
716
1251
  const params = getCommonParams.call(this);
package/lib/client.js CHANGED
@@ -287,6 +287,7 @@ class Client extends EventEmitter {
287
287
  ffprobe_path: "ffprobe",
288
288
  apk_info: {},
289
289
  forceWt: false,
290
+ useNTImage: false,
290
291
  ...config
291
292
  };
292
293
  this.config = config;