yz-yuki-plugin 2.0.9-4 → 2.0.9-6

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/CHANGELOG.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # 2.0.9
2
+ * 修复哔哩cookie项混淆使用
2
3
  * 重构cookie管理
3
4
 
4
5
  # 2.0.8
@@ -14,7 +14,7 @@ class BilibiliWebDataFetcher {
14
14
  /**通过uid获取up动态数据表*/
15
15
  async getBiliDynamicListDataByUid(uid) {
16
16
  const url = BiliApi.BILIBIL_API.biliDynamicInfoList;
17
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
17
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
18
18
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
19
19
  const dmImg = await getDmImg();
20
20
  const data = {
@@ -30,8 +30,8 @@ class BilibiliWebDataFetcher {
30
30
  };
31
31
  // 根据 mark 的值计算 signCookie
32
32
  const signCookie = mark === 'localCk'
33
- ? (await BiliCookieManager.readSavedCookieItems(`${bili_jct}+${cookie}`, ['SESSDATA'], false)) ||
34
- (await BiliCookieManager.readSavedCookieOtherItems(`${bili_jct}+${cookie}`, ['SESSDATA']))
33
+ ? (await BiliCookieManager.readSavedCookieItems(`${bili_ticket};${cookie}`, ['SESSDATA'], false)) ||
34
+ (await BiliCookieManager.readSavedCookieOtherItems(`${bili_ticket};${cookie}`, ['SESSDATA']))
35
35
  : (await BiliCookieManager.readSavedCookieItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA'], false)) ||
36
36
  (await BiliCookieManager.readSavedCookieOtherItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA']));
37
37
  const { w_rid, time_stamp } = await getWbiSign(data, BiliApi.BILIBILI_HEADERS, signCookie);
@@ -41,7 +41,7 @@ class BilibiliWebDataFetcher {
41
41
  wts: time_stamp
42
42
  };
43
43
  const headers = lodash.merge(BiliApi.BILIBILI_HEADERS, {
44
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined,
44
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined,
45
45
  Host: `api.bilibili.com`,
46
46
  Origin: 'https://space.bilibili.com',
47
47
  Referer: `https://space.bilibili.com/${uid}/dynamic`
@@ -96,7 +96,7 @@ class BilibiliWebDataFetcher {
96
96
  /**通过uid获取up详情*/
97
97
  async getBilibiUserInfoByUid(uid) {
98
98
  const url = BiliApi.BILIBIL_API.biliSpaceUserInfoWbi;
99
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
99
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
100
100
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
101
101
  const dmImg = await getDmImg();
102
102
  const data = {
@@ -108,8 +108,8 @@ class BilibiliWebDataFetcher {
108
108
  };
109
109
  // 根据 mark 的值计算 signCookie
110
110
  const signCookie = mark === 'localCk'
111
- ? (await BiliCookieManager.readSavedCookieItems(`${bili_jct}+${cookie}`, ['SESSDATA'], false)) ||
112
- (await BiliCookieManager.readSavedCookieOtherItems(`${bili_jct}+${cookie}`, ['SESSDATA']))
111
+ ? (await BiliCookieManager.readSavedCookieItems(`${bili_ticket};${cookie}`, ['SESSDATA'], false)) ||
112
+ (await BiliCookieManager.readSavedCookieOtherItems(`${bili_ticket};${cookie}`, ['SESSDATA']))
113
113
  : (await BiliCookieManager.readSavedCookieItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA'], false)) ||
114
114
  (await BiliCookieManager.readSavedCookieOtherItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA']));
115
115
  const { w_rid, time_stamp } = await getWbiSign(data, BiliApi.BILIBILI_HEADERS, signCookie);
@@ -119,7 +119,7 @@ class BilibiliWebDataFetcher {
119
119
  wts: time_stamp
120
120
  };
121
121
  const headers = lodash.merge(BiliApi.BILIBILI_HEADERS, {
122
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined,
122
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined,
123
123
  Host: `api.bilibili.com`,
124
124
  Origin: 'https://space.bilibili.com',
125
125
  Referer: `https://space.bilibili.com/${uid}/dynamic`
@@ -136,7 +136,7 @@ class BilibiliWebDataFetcher {
136
136
  /**通过关键词搜索up*/
137
137
  async searchBiliUserInfoByKeyword(keyword) {
138
138
  const url = BiliApi.BILIBIL_API.biliSearchUpWbi;
139
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
139
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
140
140
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
141
141
  const data = {
142
142
  keyword: keyword,
@@ -146,8 +146,8 @@ class BilibiliWebDataFetcher {
146
146
  };
147
147
  // 根据 mark 的值计算 signCookie
148
148
  const signCookie = mark === 'localCk'
149
- ? (await BiliCookieManager.readSavedCookieItems(`${bili_jct}+${cookie}`, ['SESSDATA'], false)) ||
150
- (await BiliCookieManager.readSavedCookieOtherItems(`${bili_jct}+${cookie}`, ['SESSDATA']))
149
+ ? (await BiliCookieManager.readSavedCookieItems(`${bili_ticket};${cookie}`, ['SESSDATA'], false)) ||
150
+ (await BiliCookieManager.readSavedCookieOtherItems(`${bili_ticket};${cookie}`, ['SESSDATA']))
151
151
  : (await BiliCookieManager.readSavedCookieItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA'], false)) ||
152
152
  (await BiliCookieManager.readSavedCookieOtherItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA']));
153
153
  const { w_rid, time_stamp } = await getWbiSign(data, BiliApi.BILIBILI_HEADERS, signCookie);
@@ -157,7 +157,7 @@ class BilibiliWebDataFetcher {
157
157
  wts: time_stamp
158
158
  };
159
159
  const headers = lodash.merge(BiliApi.BILIBILI_HEADERS, {
160
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined,
160
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined,
161
161
  Host: `api.bilibili.com`,
162
162
  Origin: 'https://www.bilibili.com',
163
163
  Referer: `https://www.bilibili.com/`
@@ -174,14 +174,14 @@ class BilibiliWebDataFetcher {
174
174
  /*通过aid/bvid获取视频信息*/
175
175
  async getBiliVideoInfoByAid_BV(vedioID) {
176
176
  const url = BiliApi.BILIBIL_API.biliVideoInfoWbi;
177
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
177
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
178
178
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
179
179
  let referer = vedioID?.bvid ? `https://www.bilibili.com/video/${vedioID.bvid}` : `https://www.bilibili.com/video/av${vedioID.aid}`;
180
180
  let data = vedioID?.bvid ? { bvid: vedioID.bvid } : { aid: vedioID.aid };
181
181
  // 根据 mark 的值计算 signCookie
182
182
  const signCookie = mark === 'localCk'
183
- ? (await BiliCookieManager.readSavedCookieItems(`${bili_jct}+${cookie}`, ['SESSDATA'], false)) ||
184
- (await BiliCookieManager.readSavedCookieOtherItems(`${bili_jct}+${cookie}`, ['SESSDATA']))
183
+ ? (await BiliCookieManager.readSavedCookieItems(`${bili_ticket};${cookie}`, ['SESSDATA'], false)) ||
184
+ (await BiliCookieManager.readSavedCookieOtherItems(`${bili_ticket};${cookie}`, ['SESSDATA']))
185
185
  : (await BiliCookieManager.readSavedCookieItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA'], false)) ||
186
186
  (await BiliCookieManager.readSavedCookieOtherItems(await BiliCookieManager.getCookieStringForUrl(url), ['SESSDATA']));
187
187
  const { w_rid, time_stamp } = await getWbiSign(data, BiliApi.BILIBILI_HEADERS, signCookie);
@@ -191,7 +191,7 @@ class BilibiliWebDataFetcher {
191
191
  wts: time_stamp
192
192
  };
193
193
  const headers = lodash.merge(BiliApi.BILIBILI_HEADERS, {
194
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined,
194
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined,
195
195
  Host: `api.bilibili.com`,
196
196
  Origin: 'https://www.bilibili.com',
197
197
  Referer: referer
@@ -209,10 +209,10 @@ class BilibiliWebDataFetcher {
209
209
  async getBVIDByShortUrl(tvUrlID) {
210
210
  const ShortVideoUrlApi = BiliApi.BILIBIL_API.biliShortVideoUrl;
211
211
  const url = `${ShortVideoUrlApi}${tvUrlID}`;
212
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
212
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
213
213
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
214
214
  const headers = lodash.merge(BiliApi.BILIBILI_DYNAMIC_SPACE_HEADERS, {
215
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined
215
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined
216
216
  });
217
217
  const ck = cookie instanceof tough.CookieJar ? cookie : undefined;
218
218
  const res = await axios.get(url, {
@@ -247,11 +247,11 @@ class BiliQuery {
247
247
  * @returns 完整的B站文章内容json数据
248
248
  */
249
249
  static async getFullArticleContent(postUrl) {
250
- const bili_jct = await BiliCookieManager.checkCookieBiliTicket();
250
+ const bili_ticket = await BiliCookieManager.checkCookieBiliTicket();
251
251
  const { cookie, mark } = await BiliCookieManager.readSyncCookie();
252
252
  try {
253
253
  const headers = lodash.merge(BiliApi.BILIBILI_ARTICLE_HEADERS, {
254
- Cookie: mark === 'localCk' ? `${bili_jct}+${cookie}` : undefined,
254
+ Cookie: mark === 'localCk' ? `${bili_ticket};${cookie}` : undefined,
255
255
  Host: 'www.bilibili.com'
256
256
  });
257
257
  const ck = cookie instanceof tough.CookieJar ? cookie : undefined;
@@ -174,6 +174,13 @@ class BiliRiskCookie {
174
174
  if (data?.code === 0) {
175
175
  if (data?.data?.code === 0) {
176
176
  // 登录成功,获取 set-cookie header 并写入 Jar
177
+ // 手动提取并设置 cookie,兼容某些环境下 axios-cookiejar-support 可能未正确处理 set-cookie 的情况
178
+ const setCookieHeaders = response.headers['set-cookie'];
179
+ if (setCookieHeaders) {
180
+ for (const cookieStr of setCookieHeaders) {
181
+ await jar.setCookie(cookieStr, 'https://passport.bilibili.com');
182
+ }
183
+ }
177
184
  const SESSDATA_expires = await this.getCookieExpiration(jar, 'SESSDATA', 'https://passport.bilibili.com');
178
185
  try {
179
186
  if (SESSDATA_expires != null) {
@@ -190,7 +197,8 @@ class BiliRiskCookie {
190
197
  resolve(cookieString || '');
191
198
  });
192
199
  });
193
- const result = await this.postGateway(cookieString); //激活ck
200
+ const bili_ticket = await this.checkCookieBiliTicket(true);
201
+ const result = await this.postGateway(cookieString + ';' + bili_ticket); //激活ck
194
202
  const { code, data } = await result.data; // 解析校验结果
195
203
  switch (code) {
196
204
  case 0:
@@ -342,7 +350,7 @@ class BiliRiskCookie {
342
350
  headers: {
343
351
  'Host': 'passport.bilibili.com',
344
352
  'User-Agent': BiliApi.BILIBILI_HEADERS['User-Agent'],
345
- 'Cookie': `DedeUserID]=${DedeUserID};bili_jct=${biliCSRF};SESSDATA=${SESSDATA}`,
353
+ 'Cookie': `DedeUserID=${DedeUserID};bili_jct=${biliCSRF};SESSDATA=${SESSDATA}`,
346
354
  'Content-Type': 'application/x-www-form-urlencoded'
347
355
  }
348
356
  });
@@ -378,19 +386,20 @@ class BiliRiskCookie {
378
386
  /**
379
387
  * 获取有效bili_ticket并添加到cookie(bili_ticket 仍缓存于 Redis 单独 key)
380
388
  */
381
- async checkCookieBiliTicket() {
382
- const bili_jct_expires = await this.getCookieExpiration(this.cookieJar, 'bili_jct', 'https://api.bilibili.com');
383
- if (bili_jct_expires === null) {
389
+ async checkCookieBiliTicket(forseRefresh = false) {
390
+ const bili_ticket_expires = await this.getCookieExpiration(this.cookieJar, 'bili_ticket', 'https://api.bilibili.com');
391
+ if (bili_ticket_expires === null || forseRefresh) {
384
392
  try {
385
- const { ticket, ttl } = await getBiliTicket('');
393
+ const bili_jct = await this.getCookieValueByKeyFromString(this.cookieJar, 'bili_jct', 'https://api.bilibili.com');
394
+ const { ticket, ttl } = await getBiliTicket(bili_jct ? bili_jct : '');
386
395
  if (ticket && ttl) {
387
396
  await this.setCookieString([
388
397
  new tough.Cookie({
389
- key: 'bili_jct',
398
+ key: 'bili_ticket',
390
399
  value: ticket,
391
400
  domain: '.bilibili.com',
392
401
  path: '/',
393
- expires: new Date(Date.now() + ttl) // 3天后过期
402
+ expires: new Date(Date.now() + ttl * 1000) // 3天后过期
394
403
  })
395
404
  ]);
396
405
  return `bili_ticket=${ticket};`;
@@ -404,7 +413,7 @@ class BiliRiskCookie {
404
413
  }
405
414
  }
406
415
  else {
407
- return `bili_jct=${await this.getCookieValueByKeyFromString(this.cookieJar, 'bili_jct', 'https://api.bilibili.com')};`;
416
+ return `bili_ticket=${await this.getCookieValueByKeyFromString(this.cookieJar, 'bili_ticket', 'https://api.bilibili.com')};`;
408
417
  }
409
418
  }
410
419
  /**
@@ -466,7 +475,7 @@ class BiliRiskCookie {
466
475
  }
467
476
  }
468
477
  /**
469
- * 简单策略:优先从 Redis 读取长期 cookie(如 SUP/SUBP),若缺失则触发完整获取流程
478
+ * 简单策略:优先从 Redis 读取长期 cookie(如 SESSDATA),若缺失则触发完整获取流程
470
479
  * */
471
480
  async ensureLoginCookies(jar) {
472
481
  // 常见域名为 .weibo.cn 或 m.weibo.cn,根据实际情况检查
@@ -474,7 +483,7 @@ class BiliRiskCookie {
474
483
  const SESSDATA_Key2 = `${this.prefix}:bilibili.com:SESSDATA`;
475
484
  const isLogin = (await Redis.get(SESSDATA_Key1)) || (await Redis.get(SESSDATA_Key2));
476
485
  if (isLogin) {
477
- // 直接把 Redis 的所有 cookie 恢复到 jar(包含 SUP/SUBP
486
+ // 直接把 Redis 的所有 cookie 恢复到 jar(包含 SESSDATA
478
487
  await this.loadCookiesFromRedis(jar);
479
488
  return true;
480
489
  }
@@ -35,12 +35,12 @@ async function getBiliTicket(csrf) {
35
35
  }
36
36
  });
37
37
  if (!response.ok) {
38
- throw new Error(`get bili_jct HTTP error! status: ${response.status}`);
38
+ throw new Error(`get bili_ticket HTTP error! status: ${response.status}`);
39
39
  }
40
- const data = await response.json();
40
+ const data = (await response.json());
41
41
  if (data.code !== 0) {
42
42
  if (data.code === 400) {
43
- throw new Error(`get bili_jct Parameter error! ${data.message}`);
43
+ throw new Error(`get bili_ticket Parameter error! ${data.message}`);
44
44
  }
45
45
  throw new Error(`Failed to retrieve bili ticket: ${data.message}`);
46
46
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yz-yuki-plugin",
3
- "version": "2.0.9-4",
3
+ "version": "2.0.9-6",
4
4
  "description": "优纪插件,yunzaijs 关于 微博推送、B站推送 等功能的拓展插件",
5
5
  "author": "snowtafir",
6
6
  "type": "module",
@@ -8,7 +8,7 @@
8
8
  "private": false,
9
9
  "repository": {
10
10
  "type": "git",
11
- "url": "https://github.com/snowtafir/yuki-plugin.git"
11
+ "url": "git+https://github.com/snowtafir/yuki-plugin.git"
12
12
  },
13
13
  "scripts": {
14
14
  "app": "node lib/main.js",