dsh-shlr-bilitoolkit 0.1.1 → 0.1.3
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/dist/apis/article.d.ts +2 -2
- package/dist/apis/article.js +4 -4
- package/dist/apis/auth.d.ts +1 -1
- package/dist/apis/auth.js +3 -3
- package/dist/apis/comment.d.ts +2 -2
- package/dist/apis/comment.js +5 -5
- package/dist/apis/download.js +1 -1
- package/dist/apis/dynamic.d.ts +2 -2
- package/dist/apis/dynamic.js +3 -3
- package/dist/apis/interact.d.ts +2 -2
- package/dist/apis/interact.js +4 -4
- package/dist/apis/message.d.ts +2 -2
- package/dist/apis/message.js +3 -3
- package/dist/apis/notify.d.ts +2 -2
- package/dist/apis/notify.js +2 -2
- package/dist/apis/profile.d.ts +1 -1
- package/dist/apis/profile.js +1 -1
- package/dist/apis/relation.d.ts +2 -2
- package/dist/apis/relation.js +3 -3
- package/dist/apis/search.d.ts +2 -2
- package/dist/apis/search.js +3 -3
- package/dist/apis/space.d.ts +2 -2
- package/dist/apis/space.js +3 -3
- package/dist/apis/video.d.ts +2 -2
- package/dist/apis/video.js +4 -4
- package/dist/client.d.ts +14 -14
- package/dist/client.js +17 -17
- package/dist/dsh.d.ts +6 -3
- package/dist/dsh.js +136 -21
- package/dist/index.d.ts +21 -21
- package/dist/index.js +20 -20
- package/dist/models.js +1 -1
- package/dist/wbi.d.ts +1 -1
- package/dist/wbi.js +2 -2
- package/package.json +2 -2
package/dist/apis/article.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** 专栏:详情、UP 主专栏列表。 */
|
|
2
|
-
import type { BiliClient } from "../client";
|
|
3
|
-
import { Article } from "../models";
|
|
2
|
+
import type { BiliClient } from "../client.js";
|
|
3
|
+
import { Article } from "../models.js";
|
|
4
4
|
export declare function parseArticleId(value: unknown): number;
|
|
5
5
|
export declare class ArticleAPI {
|
|
6
6
|
private client;
|
package/dist/apis/article.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** 专栏:详情、UP 主专栏列表。 */
|
|
2
|
-
import * as endpoints from "../endpoints";
|
|
3
|
-
import { BiliApiError } from "../errors";
|
|
4
|
-
import { Article } from "../models";
|
|
5
|
-
import { iterPages } from "../pagination";
|
|
2
|
+
import * as endpoints from "../endpoints.js";
|
|
3
|
+
import { BiliApiError } from "../errors.js";
|
|
4
|
+
import { Article } from "../models.js";
|
|
5
|
+
import { iterPages } from "../pagination.js";
|
|
6
6
|
const _ARTICLE_ID = /cv(\d+)/i;
|
|
7
7
|
const _NUMBER = /(\d+)/;
|
|
8
8
|
export function parseArticleId(value) {
|
package/dist/apis/auth.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
generate / poll / wait / login 的核心流程;如需在终端展示二维码,可另行
|
|
5
5
|
调用 qrcode 库对 generate 返回的 url 进行渲染。
|
|
6
6
|
*/
|
|
7
|
-
import type { BiliClient } from "../client";
|
|
7
|
+
import type { BiliClient } from "../client.js";
|
|
8
8
|
export declare const QR_STATUS_SUCCESS = 0;
|
|
9
9
|
export declare const QR_STATUS_EXPIRED = 86038;
|
|
10
10
|
export declare const QR_STATUS_WAITING = 86101;
|
package/dist/apis/auth.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
generate / poll / wait / login 的核心流程;如需在终端展示二维码,可另行
|
|
5
5
|
调用 qrcode 库对 generate 返回的 url 进行渲染。
|
|
6
6
|
*/
|
|
7
|
-
import * as endpoints from "../endpoints";
|
|
8
|
-
import { BiliApiError } from "../errors";
|
|
9
|
-
import { sleep } from "../util";
|
|
7
|
+
import * as endpoints from "../endpoints.js";
|
|
8
|
+
import { BiliApiError } from "../errors.js";
|
|
9
|
+
import { sleep } from "../util.js";
|
|
10
10
|
export const QR_STATUS_SUCCESS = 0;
|
|
11
11
|
export const QR_STATUS_EXPIRED = 86038;
|
|
12
12
|
export const QR_STATUS_WAITING = 86101;
|
package/dist/apis/comment.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ B 站评论是「type + oid」的通用模型:
|
|
|
5
5
|
- 动态:type 由动态的 comment_type 决定,oid 取 comment_id
|
|
6
6
|
- 专栏:type=12,oid=cvid
|
|
7
7
|
*/
|
|
8
|
-
import type { BiliClient } from "../client";
|
|
9
|
-
import { Comment } from "../models";
|
|
8
|
+
import type { BiliClient } from "../client.js";
|
|
9
|
+
import { Comment } from "../models.js";
|
|
10
10
|
export declare class CommentAPI {
|
|
11
11
|
private client;
|
|
12
12
|
constructor(client: BiliClient);
|
package/dist/apis/comment.js
CHANGED
|
@@ -5,11 +5,11 @@ B 站评论是「type + oid」的通用模型:
|
|
|
5
5
|
- 动态:type 由动态的 comment_type 决定,oid 取 comment_id
|
|
6
6
|
- 专栏:type=12,oid=cvid
|
|
7
7
|
*/
|
|
8
|
-
import * as endpoints from "../endpoints";
|
|
9
|
-
import { BiliApiError } from "../errors";
|
|
10
|
-
import { Comment } from "../models";
|
|
11
|
-
import { iterPages } from "../pagination";
|
|
12
|
-
import { parseArticleId } from "./article";
|
|
8
|
+
import * as endpoints from "../endpoints.js";
|
|
9
|
+
import { BiliApiError } from "../errors.js";
|
|
10
|
+
import { Comment } from "../models.js";
|
|
11
|
+
import { iterPages } from "../pagination.js";
|
|
12
|
+
import { parseArticleId } from "./article.js";
|
|
13
13
|
const SORT_BY_NAME = { time: 0, like: 1, reply: 2 };
|
|
14
14
|
export class CommentAPI {
|
|
15
15
|
client;
|
package/dist/apis/download.js
CHANGED
|
@@ -8,7 +8,7 @@ import { mkdir } from "node:fs/promises";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import { spawn } from "node:child_process";
|
|
10
10
|
import axios from "axios";
|
|
11
|
-
import { BiliApiError } from "../errors";
|
|
11
|
+
import { BiliApiError } from "../errors.js";
|
|
12
12
|
const CHUNK_SIZE = 1 << 20;
|
|
13
13
|
const UNSAFE_FILENAME = /[\\/:*?"<>|]/;
|
|
14
14
|
export function safeFilename(text, fallback = "video") {
|
package/dist/apis/dynamic.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
读取走网页版 polymer 接口,需要登录态。写操作(publish / repost / thumb /
|
|
4
4
|
delete)都是公开行为,受风控和人机验证限制,使用前请自行确认。
|
|
5
5
|
*/
|
|
6
|
-
import type { BiliClient } from "../client";
|
|
7
|
-
import { Dynamic } from "../models";
|
|
6
|
+
import type { BiliClient } from "../client.js";
|
|
7
|
+
import { Dynamic } from "../models.js";
|
|
8
8
|
export declare class DynamicAPI {
|
|
9
9
|
private client;
|
|
10
10
|
constructor(client: BiliClient);
|
package/dist/apis/dynamic.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
读取走网页版 polymer 接口,需要登录态。写操作(publish / repost / thumb /
|
|
4
4
|
delete)都是公开行为,受风控和人机验证限制,使用前请自行确认。
|
|
5
5
|
*/
|
|
6
|
-
import * as endpoints from "../endpoints";
|
|
7
|
-
import { BiliApiError } from "../errors";
|
|
8
|
-
import { Dynamic } from "../models";
|
|
6
|
+
import * as endpoints from "../endpoints.js";
|
|
7
|
+
import { BiliApiError } from "../errors.js";
|
|
8
|
+
import { Dynamic } from "../models.js";
|
|
9
9
|
const FEATURES = "itemOpusStyle";
|
|
10
10
|
const REFERER = "https://t.bilibili.com/";
|
|
11
11
|
export class DynamicAPI {
|
package/dist/apis/interact.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** 互动接口:点赞、收藏、关注(真实写操作,需要登录并依赖 bili_jct)。 */
|
|
2
|
-
import type { BiliClient } from "../client";
|
|
3
|
-
import { Video } from "../models";
|
|
2
|
+
import type { BiliClient } from "../client.js";
|
|
3
|
+
import { Video } from "../models.js";
|
|
4
4
|
export declare class InteractAPI {
|
|
5
5
|
private client;
|
|
6
6
|
constructor(client: BiliClient);
|
package/dist/apis/interact.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** 互动接口:点赞、收藏、关注(真实写操作,需要登录并依赖 bili_jct)。 */
|
|
2
|
-
import * as endpoints from "../endpoints";
|
|
3
|
-
import { BiliApiError, CookieError } from "../errors";
|
|
4
|
-
import { Video } from "../models";
|
|
5
|
-
import { iterPages } from "../pagination";
|
|
2
|
+
import * as endpoints from "../endpoints.js";
|
|
3
|
+
import { BiliApiError, CookieError } from "../errors.js";
|
|
4
|
+
import { Video } from "../models.js";
|
|
5
|
+
import { iterPages } from "../pagination.js";
|
|
6
6
|
export class InteractAPI {
|
|
7
7
|
client;
|
|
8
8
|
constructor(client) {
|
package/dist/apis/message.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
web 端私信要求带一个 UUID 形式的 msg[dev_id];同一 client 实例内复用,
|
|
4
4
|
避免每次都被当成新设备。dev_id 生成本次会话内稳定即可(不落盘)。
|
|
5
5
|
*/
|
|
6
|
-
import type { BiliClient } from "../client";
|
|
7
|
-
import { PrivateMessage } from "../models";
|
|
6
|
+
import type { BiliClient } from "../client.js";
|
|
7
|
+
import { PrivateMessage } from "../models.js";
|
|
8
8
|
export declare function generateDevId(): string;
|
|
9
9
|
export declare class MessageAPI {
|
|
10
10
|
private client;
|
package/dist/apis/message.js
CHANGED
|
@@ -4,9 +4,9 @@ web 端私信要求带一个 UUID 形式的 msg[dev_id];同一 client 实例
|
|
|
4
4
|
避免每次都被当成新设备。dev_id 生成本次会话内稳定即可(不落盘)。
|
|
5
5
|
*/
|
|
6
6
|
import { randomInt } from "node:crypto";
|
|
7
|
-
import * as endpoints from "../endpoints";
|
|
8
|
-
import { BiliApiError, CookieError } from "../errors";
|
|
9
|
-
import { PrivateMessage } from "../models";
|
|
7
|
+
import * as endpoints from "../endpoints.js";
|
|
8
|
+
import { BiliApiError, CookieError } from "../errors.js";
|
|
9
|
+
import { PrivateMessage } from "../models.js";
|
|
10
10
|
const DEV_ID_TEMPLATE = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
|
|
11
11
|
const IM_HEADERS = {
|
|
12
12
|
Referer: "https://message.bilibili.com/",
|
package/dist/apis/notify.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
注意:这类列表接口的分页游标(cursor.id)实测传回去仍返回同一页,
|
|
4
4
|
所以这里只保证「最近一页」;更早的消息请到网页端查看。
|
|
5
5
|
*/
|
|
6
|
-
import type { BiliClient } from "../client";
|
|
7
|
-
import { Notice } from "../models";
|
|
6
|
+
import type { BiliClient } from "../client.js";
|
|
7
|
+
import { Notice } from "../models.js";
|
|
8
8
|
export declare class NotifyAPI {
|
|
9
9
|
private client;
|
|
10
10
|
constructor(client: BiliClient);
|
package/dist/apis/notify.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
注意:这类列表接口的分页游标(cursor.id)实测传回去仍返回同一页,
|
|
4
4
|
所以这里只保证「最近一页」;更早的消息请到网页端查看。
|
|
5
5
|
*/
|
|
6
|
-
import * as endpoints from "../endpoints";
|
|
7
|
-
import { Notice } from "../models";
|
|
6
|
+
import * as endpoints from "../endpoints.js";
|
|
7
|
+
import { Notice } from "../models.js";
|
|
8
8
|
const COMMON_PARAMS = { platform: "web", build: 0, mobi_app: "web" };
|
|
9
9
|
function cursorId(cursor) {
|
|
10
10
|
if (cursor && typeof cursor === "object")
|
package/dist/apis/profile.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- updateSign 用的是 x/member/web/sign/update,改完进入审核队列。
|
|
5
5
|
- updateProfile 用的是 x/member/web/update,只支持昵称、性别、生日。
|
|
6
6
|
*/
|
|
7
|
-
import type { BiliClient } from "../client";
|
|
7
|
+
import type { BiliClient } from "../client.js";
|
|
8
8
|
export declare class ProfileAPI {
|
|
9
9
|
private client;
|
|
10
10
|
constructor(client: BiliClient);
|
package/dist/apis/profile.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- updateSign 用的是 x/member/web/sign/update,改完进入审核队列。
|
|
5
5
|
- updateProfile 用的是 x/member/web/update,只支持昵称、性别、生日。
|
|
6
6
|
*/
|
|
7
|
-
import * as endpoints from "../endpoints";
|
|
7
|
+
import * as endpoints from "../endpoints.js";
|
|
8
8
|
const SEX_VALUES = ["男", "女", "保密"];
|
|
9
9
|
const MAX_SIGN_LENGTH = 70;
|
|
10
10
|
export class ProfileAPI {
|
package/dist/apis/relation.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** 关注列表、粉丝列表与关系统计。 */
|
|
2
|
-
import type { BiliClient } from "../client";
|
|
3
|
-
import { RelationUser } from "../models";
|
|
2
|
+
import type { BiliClient } from "../client.js";
|
|
3
|
+
import { RelationUser } from "../models.js";
|
|
4
4
|
export declare class RelationAPI {
|
|
5
5
|
private client;
|
|
6
6
|
constructor(client: BiliClient);
|
package/dist/apis/relation.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** 关注列表、粉丝列表与关系统计。 */
|
|
2
|
-
import * as endpoints from "../endpoints";
|
|
3
|
-
import { RelationUser } from "../models";
|
|
4
|
-
import { iterPages } from "../pagination";
|
|
2
|
+
import * as endpoints from "../endpoints.js";
|
|
3
|
+
import { RelationUser } from "../models.js";
|
|
4
|
+
import { iterPages } from "../pagination.js";
|
|
5
5
|
export class RelationAPI {
|
|
6
6
|
client;
|
|
7
7
|
constructor(client) {
|
package/dist/apis/search.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
搜索走 WBI 签名接口,并带搜索页 Referer。B 站会对搜索做风控,
|
|
4
4
|
这里把网页端常见的 dm_img_* 环境参数一并带上,降低被 -412 拦截的概率。
|
|
5
5
|
*/
|
|
6
|
-
import type { BiliClient } from "../client";
|
|
7
|
-
import { User, Video } from "../models";
|
|
6
|
+
import type { BiliClient } from "../client.js";
|
|
7
|
+
import { User, Video } from "../models.js";
|
|
8
8
|
export declare const VIDEO_ORDERS: readonly ["totalrank", "click", "pubdate", "dm", "stow", "scores"];
|
|
9
9
|
export declare class SearchAPI {
|
|
10
10
|
private client;
|
package/dist/apis/search.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
搜索走 WBI 签名接口,并带搜索页 Referer。B 站会对搜索做风控,
|
|
4
4
|
这里把网页端常见的 dm_img_* 环境参数一并带上,降低被 -412 拦截的概率。
|
|
5
5
|
*/
|
|
6
|
-
import * as endpoints from "../endpoints";
|
|
7
|
-
import { User, Video } from "../models";
|
|
8
|
-
import { iterPages } from "../pagination";
|
|
6
|
+
import * as endpoints from "../endpoints.js";
|
|
7
|
+
import { User, Video } from "../models.js";
|
|
8
|
+
import { iterPages } from "../pagination.js";
|
|
9
9
|
// 视频搜索支持的排序
|
|
10
10
|
export const VIDEO_ORDERS = [
|
|
11
11
|
"totalrank",
|
package/dist/apis/space.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
这些接口都要求 WBI 签名,统一走 client.getSigned(),并带上空间页 Referer。
|
|
4
4
|
*/
|
|
5
|
-
import type { BiliClient } from "../client";
|
|
6
|
-
import { Collection, Video } from "../models";
|
|
5
|
+
import type { BiliClient } from "../client.js";
|
|
6
|
+
import { Collection, Video } from "../models.js";
|
|
7
7
|
export declare class SpaceAPI {
|
|
8
8
|
private client;
|
|
9
9
|
constructor(client: BiliClient);
|
package/dist/apis/space.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
这些接口都要求 WBI 签名,统一走 client.getSigned(),并带上空间页 Referer。
|
|
4
4
|
*/
|
|
5
|
-
import * as endpoints from "../endpoints";
|
|
6
|
-
import { Collection, Video } from "../models";
|
|
7
|
-
import { iterPages } from "../pagination";
|
|
5
|
+
import * as endpoints from "../endpoints.js";
|
|
6
|
+
import { Collection, Video } from "../models.js";
|
|
7
|
+
import { iterPages } from "../pagination.js";
|
|
8
8
|
export class SpaceAPI {
|
|
9
9
|
client;
|
|
10
10
|
constructor(client) {
|
package/dist/apis/video.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** 视频相关接口:首页推荐流、视频详情、分P、播放地址、字幕。 */
|
|
2
|
-
import type { BiliClient } from "../client";
|
|
3
|
-
import { Page, PlayInfo, Subtitle, Video } from "../models";
|
|
2
|
+
import type { BiliClient } from "../client.js";
|
|
3
|
+
import { Page, PlayInfo, Subtitle, Video } from "../models.js";
|
|
4
4
|
export declare class VideoAPI {
|
|
5
5
|
private client;
|
|
6
6
|
private pageInterval;
|
package/dist/apis/video.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** 视频相关接口:首页推荐流、视频详情、分P、播放地址、字幕。 */
|
|
2
|
-
import { BiliApiError } from "../errors";
|
|
3
|
-
import * as endpoints from "../endpoints";
|
|
4
|
-
import { Page, PlayInfo, Subtitle, Video } from "../models";
|
|
5
|
-
import { sleep } from "../util";
|
|
2
|
+
import { BiliApiError } from "../errors.js";
|
|
3
|
+
import * as endpoints from "../endpoints.js";
|
|
4
|
+
import { Page, PlayInfo, Subtitle, Video } from "../models.js";
|
|
5
|
+
import { sleep } from "../util.js";
|
|
6
6
|
export class VideoAPI {
|
|
7
7
|
client;
|
|
8
8
|
pageInterval;
|
package/dist/client.d.ts
CHANGED
|
@@ -9,20 +9,20 @@
|
|
|
9
9
|
- HTTP 412 与业务码 -412 视为风控信号,立即停止,不做重试
|
|
10
10
|
*/
|
|
11
11
|
import { AxiosInstance } from "axios";
|
|
12
|
-
import { VideoAPI } from "./apis/video";
|
|
13
|
-
import { SearchAPI } from "./apis/search";
|
|
14
|
-
import { SpaceAPI } from "./apis/space";
|
|
15
|
-
import { CommentAPI } from "./apis/comment";
|
|
16
|
-
import { MessageAPI } from "./apis/message";
|
|
17
|
-
import { NotifyAPI } from "./apis/notify";
|
|
18
|
-
import { InteractAPI } from "./apis/interact";
|
|
19
|
-
import { RelationAPI } from "./apis/relation";
|
|
20
|
-
import { DynamicAPI } from "./apis/dynamic";
|
|
21
|
-
import { ArticleAPI } from "./apis/article";
|
|
22
|
-
import { ProfileAPI } from "./apis/profile";
|
|
23
|
-
import { QrCodeLogin } from "./apis/auth";
|
|
24
|
-
import { WbiSigner } from "./wbi";
|
|
25
|
-
import { JsonCache } from "./cache";
|
|
12
|
+
import { VideoAPI } from "./apis/video.js";
|
|
13
|
+
import { SearchAPI } from "./apis/search.js";
|
|
14
|
+
import { SpaceAPI } from "./apis/space.js";
|
|
15
|
+
import { CommentAPI } from "./apis/comment.js";
|
|
16
|
+
import { MessageAPI } from "./apis/message.js";
|
|
17
|
+
import { NotifyAPI } from "./apis/notify.js";
|
|
18
|
+
import { InteractAPI } from "./apis/interact.js";
|
|
19
|
+
import { RelationAPI } from "./apis/relation.js";
|
|
20
|
+
import { DynamicAPI } from "./apis/dynamic.js";
|
|
21
|
+
import { ArticleAPI } from "./apis/article.js";
|
|
22
|
+
import { ProfileAPI } from "./apis/profile.js";
|
|
23
|
+
import { QrCodeLogin } from "./apis/auth.js";
|
|
24
|
+
import { WbiSigner } from "./wbi.js";
|
|
25
|
+
import { JsonCache } from "./cache.js";
|
|
26
26
|
export declare const USER_AGENT: string;
|
|
27
27
|
export declare const DEFAULT_HEADERS: Record<string, string>;
|
|
28
28
|
export interface BiliClientOptions {
|
package/dist/client.js
CHANGED
|
@@ -12,23 +12,23 @@ import axios from "axios";
|
|
|
12
12
|
import { existsSync } from "node:fs";
|
|
13
13
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
14
14
|
import * as path from "node:path";
|
|
15
|
-
import * as endpoints from "./endpoints";
|
|
16
|
-
import { BiliApiError, CaptchaRequired, CookieError } from "./errors";
|
|
17
|
-
import { VideoAPI } from "./apis/video";
|
|
18
|
-
import { SearchAPI } from "./apis/search";
|
|
19
|
-
import { SpaceAPI } from "./apis/space";
|
|
20
|
-
import { CommentAPI } from "./apis/comment";
|
|
21
|
-
import { MessageAPI } from "./apis/message";
|
|
22
|
-
import { NotifyAPI } from "./apis/notify";
|
|
23
|
-
import { InteractAPI } from "./apis/interact";
|
|
24
|
-
import { RelationAPI } from "./apis/relation";
|
|
25
|
-
import { DynamicAPI } from "./apis/dynamic";
|
|
26
|
-
import { ArticleAPI } from "./apis/article";
|
|
27
|
-
import { ProfileAPI } from "./apis/profile";
|
|
28
|
-
import { QrCodeLogin } from "./apis/auth";
|
|
29
|
-
import { WbiSigner } from "./wbi";
|
|
30
|
-
import { JsonCache } from "./cache";
|
|
31
|
-
import { sleep } from "./util";
|
|
15
|
+
import * as endpoints from "./endpoints.js";
|
|
16
|
+
import { BiliApiError, CaptchaRequired, CookieError } from "./errors.js";
|
|
17
|
+
import { VideoAPI } from "./apis/video.js";
|
|
18
|
+
import { SearchAPI } from "./apis/search.js";
|
|
19
|
+
import { SpaceAPI } from "./apis/space.js";
|
|
20
|
+
import { CommentAPI } from "./apis/comment.js";
|
|
21
|
+
import { MessageAPI } from "./apis/message.js";
|
|
22
|
+
import { NotifyAPI } from "./apis/notify.js";
|
|
23
|
+
import { InteractAPI } from "./apis/interact.js";
|
|
24
|
+
import { RelationAPI } from "./apis/relation.js";
|
|
25
|
+
import { DynamicAPI } from "./apis/dynamic.js";
|
|
26
|
+
import { ArticleAPI } from "./apis/article.js";
|
|
27
|
+
import { ProfileAPI } from "./apis/profile.js";
|
|
28
|
+
import { QrCodeLogin } from "./apis/auth.js";
|
|
29
|
+
import { WbiSigner } from "./wbi.js";
|
|
30
|
+
import { JsonCache } from "./cache.js";
|
|
31
|
+
import { sleep } from "./util.js";
|
|
32
32
|
export const USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
|
|
33
33
|
"(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
34
34
|
export const DEFAULT_HEADERS = {
|
package/dist/dsh.d.ts
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
工具定义仍以 JSON-Schema 形式写在 `TOOLS` 里(便于阅读),`apply` 会转换成
|
|
10
10
|
官方的 `defineTool({ name, description, parameters, output, execute })` 形式。
|
|
11
11
|
*/
|
|
12
|
-
import { BiliClient } from "./client";
|
|
13
|
-
import { Collection, Page, PlayInfo, Subtitle, User, Video } from "./models";
|
|
12
|
+
import { BiliClient } from "./client.js";
|
|
13
|
+
import { Collection, Page, PlayInfo, Subtitle, User, Video } from "./models.js";
|
|
14
14
|
export declare const name = "bili-toolkit";
|
|
15
15
|
export declare const inject: string[];
|
|
16
16
|
export interface DshTool {
|
|
@@ -18,8 +18,11 @@ export interface DshTool {
|
|
|
18
18
|
description: string;
|
|
19
19
|
parameters: Record<string, unknown>;
|
|
20
20
|
handler: (args: any) => Promise<unknown>;
|
|
21
|
+
render?: (args: any, value: any) => any[];
|
|
22
|
+
presentationMeta?: (args: any, value: any) => unknown;
|
|
23
|
+
presentResult?: (args: any, result: any) => any;
|
|
21
24
|
}
|
|
22
25
|
export declare const TOOLS: DshTool[];
|
|
23
26
|
export declare function apply(ctx: any): void;
|
|
24
|
-
export * from "./index";
|
|
27
|
+
export * from "./index.js";
|
|
25
28
|
export { BiliClient, Video, User, Page, PlayInfo, Subtitle, Collection };
|
package/dist/dsh.js
CHANGED
|
@@ -11,12 +11,18 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
13
13
|
import QRCode from "qrcode";
|
|
14
|
-
import { BiliClient } from "./client";
|
|
15
|
-
import { Collection, Page, PlayInfo, Subtitle, User, Video } from "./models";
|
|
16
|
-
|
|
14
|
+
import { BiliClient } from "./client.js";
|
|
15
|
+
import { Collection, Page, PlayInfo, Subtitle, User, Video } from "./models.js";
|
|
16
|
+
import { QR_STATUS_EXPIRED, QR_STATUS_SCANNED, QR_STATUS_SUCCESS, } from "./apis/auth.js";
|
|
17
|
+
// 插件入口必须导出的字段(Cordis 据此识别并注入相应服务)
|
|
17
18
|
export const name = "bili-toolkit";
|
|
18
|
-
|
|
19
|
+
// tools:注册工具;attachments:把二维码等图片登记成可在 UI 渲染的持久附件
|
|
20
|
+
export const inject = ["tools", "attachments"];
|
|
19
21
|
let cached = null;
|
|
22
|
+
// 附件服务(apply 时从 ctx 捕获);缺失时二维码退化为文本
|
|
23
|
+
let attachmentStore = null;
|
|
24
|
+
// 最近一次生成、等待扫码确认的二维码 key(登录完成链路用)
|
|
25
|
+
let pendingQrKey = null;
|
|
20
26
|
async function getClient() {
|
|
21
27
|
if (!cached) {
|
|
22
28
|
cached = new BiliClient({
|
|
@@ -406,27 +412,127 @@ export const TOOLS = [
|
|
|
406
412
|
// ---- 登录状态 ----
|
|
407
413
|
{
|
|
408
414
|
id: "bili_login_status",
|
|
409
|
-
description: "查询当前是否已登录 B
|
|
415
|
+
description: "查询当前是否已登录 B 站(返回用户名)。若此前调用过 bili_gen_qr,本工具会顺带轮询扫码状态:用户扫码并在手机确认后,这里返回登录成功并自动保存 Cookie。",
|
|
410
416
|
parameters: { type: "object", properties: {} },
|
|
411
417
|
handler: async () => {
|
|
412
418
|
const c = await getClient();
|
|
413
419
|
const account = await c.getAccount();
|
|
420
|
+
if (account) {
|
|
421
|
+
return { isLoggedIn: true, username: account.uname, mid: account.mid };
|
|
422
|
+
}
|
|
423
|
+
// 未登录:若有等待确认的扫码,轮询一次
|
|
424
|
+
if (pendingQrKey) {
|
|
425
|
+
const [code, message] = await c.auth.poll(pendingQrKey);
|
|
426
|
+
if (code === QR_STATUS_SUCCESS) {
|
|
427
|
+
await c.saveCookies();
|
|
428
|
+
pendingQrKey = null;
|
|
429
|
+
const acc = await c.getAccount();
|
|
430
|
+
return {
|
|
431
|
+
isLoggedIn: true,
|
|
432
|
+
justLoggedIn: true,
|
|
433
|
+
username: acc?.uname ?? null,
|
|
434
|
+
mid: acc?.mid ?? null,
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
if (code === QR_STATUS_EXPIRED) {
|
|
438
|
+
pendingQrKey = null;
|
|
439
|
+
return {
|
|
440
|
+
isLoggedIn: false,
|
|
441
|
+
qrStatus: "expired",
|
|
442
|
+
hint: "二维码已过期,请重新调用 bili_gen_qr 生成新的二维码。",
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
isLoggedIn: false,
|
|
447
|
+
qrStatus: code === QR_STATUS_SCANNED ? "scanned" : "waiting",
|
|
448
|
+
hint: code === QR_STATUS_SCANNED
|
|
449
|
+
? "已扫码,请在手机上点击「确认登录」,然后再调用一次 bili_login_status。"
|
|
450
|
+
: "请用「哔哩哔哩」App 扫描刚生成的二维码,确认后再调用 bili_login_status。",
|
|
451
|
+
message,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
414
454
|
return {
|
|
415
|
-
isLoggedIn:
|
|
416
|
-
username:
|
|
417
|
-
mid:
|
|
455
|
+
isLoggedIn: false,
|
|
456
|
+
username: null,
|
|
457
|
+
mid: null,
|
|
458
|
+
hint: "未登录,请先调用 bili_gen_qr 生成登录二维码。",
|
|
418
459
|
};
|
|
419
460
|
},
|
|
420
461
|
},
|
|
421
462
|
{
|
|
422
463
|
id: "bili_gen_qr",
|
|
423
|
-
description: "生成 B
|
|
464
|
+
description: "生成 B 站扫码登录二维码,并在对话中以「图片」形式展示(用「哔哩哔哩」App 扫码)。返回二维码内容链接 url 与轮询用的 qrcodeKey。用户扫码确认后,调用 bili_login_status 完成登录并保存 Cookie。",
|
|
424
465
|
parameters: { type: "object", properties: {} },
|
|
425
466
|
handler: async () => {
|
|
426
467
|
const c = await getClient();
|
|
427
468
|
const [url, key] = await c.auth.generate();
|
|
428
|
-
|
|
429
|
-
|
|
469
|
+
pendingQrKey = key;
|
|
470
|
+
// 生成 PNG 二维码并登记为附件,供 UI 以图片渲染
|
|
471
|
+
let qrImage = null;
|
|
472
|
+
try {
|
|
473
|
+
const png = await QRCode.toBuffer(url, {
|
|
474
|
+
type: "png",
|
|
475
|
+
errorCorrectionLevel: "M",
|
|
476
|
+
margin: 2,
|
|
477
|
+
width: 320,
|
|
478
|
+
});
|
|
479
|
+
if (attachmentStore?.saveImage) {
|
|
480
|
+
qrImage = await attachmentStore.saveImage({
|
|
481
|
+
data: new Uint8Array(png),
|
|
482
|
+
mediaType: "image/png",
|
|
483
|
+
name: "bili-login-qr.png",
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
catch {
|
|
488
|
+
qrImage = null; // 附件不可用时退化为下方 ascii
|
|
489
|
+
}
|
|
490
|
+
// ascii 仅作为附件不可用时的兜底
|
|
491
|
+
let ascii = null;
|
|
492
|
+
if (!qrImage) {
|
|
493
|
+
try {
|
|
494
|
+
ascii = await QRCode.toString(url, { type: "utf8" });
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
ascii = null;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return { url, qrcodeKey: key, qrImage, ascii };
|
|
501
|
+
},
|
|
502
|
+
// 面向模型的文本:不塞图片 / ascii,给指引即可
|
|
503
|
+
render: (_args, value) => [
|
|
504
|
+
{
|
|
505
|
+
type: "text",
|
|
506
|
+
text: "已生成 B 站登录二维码(已在界面上以图片展示)。请让用户用「哔哩哔哩」App 扫码," +
|
|
507
|
+
"并在手机上确认登录;用户确认后,调用 bili_login_status 查询登录态并保存 Cookie。" +
|
|
508
|
+
`qrcodeKey=${value?.qrcodeKey ?? ""}`,
|
|
509
|
+
},
|
|
510
|
+
],
|
|
511
|
+
// 把图片引用 / ascii / url 透传给 presentResult(仅 UI 用)
|
|
512
|
+
presentationMeta: (_args, value) => ({
|
|
513
|
+
qrImage: value?.qrImage ?? null,
|
|
514
|
+
ascii: value?.ascii ?? null,
|
|
515
|
+
url: value?.url ?? null,
|
|
516
|
+
}),
|
|
517
|
+
// UI 呈现:优先渲染图片二维码;无附件时退化为 ascii 代码块 + 链接
|
|
518
|
+
presentResult: (_args, result) => {
|
|
519
|
+
const meta = (result?.meta ?? {});
|
|
520
|
+
const content = [];
|
|
521
|
+
if (meta.qrImage) {
|
|
522
|
+
content.push({ type: "image", attachment: meta.qrImage });
|
|
523
|
+
content.push({
|
|
524
|
+
type: "text",
|
|
525
|
+
text: "请用「哔哩哔哩」App 扫描上方二维码,并在手机上确认登录。",
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
else if (meta.ascii) {
|
|
529
|
+
content.push({ type: "text", text: "```\n" + meta.ascii + "\n```" });
|
|
530
|
+
content.push({ type: "text", text: `二维码链接:${meta.url ?? ""}` });
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
content.push({ type: "text", text: `二维码链接:${meta.url ?? ""}` });
|
|
534
|
+
}
|
|
535
|
+
return { card: "generic", title: "扫码登录 B 站", content };
|
|
430
536
|
},
|
|
431
537
|
},
|
|
432
538
|
// ---- 缓存维护 ----
|
|
@@ -442,22 +548,31 @@ export const TOOLS = [
|
|
|
442
548
|
},
|
|
443
549
|
];
|
|
444
550
|
export function apply(ctx) {
|
|
551
|
+
// 捕获附件服务,供 bili_gen_qr 把二维码登记成可在 UI 渲染的图片
|
|
552
|
+
attachmentStore = ctx?.attachments ?? null;
|
|
445
553
|
for (const tool of TOOLS) {
|
|
446
|
-
|
|
447
|
-
|
|
554
|
+
const output = {
|
|
555
|
+
schema: { type: "object", additionalProperties: true },
|
|
556
|
+
render: tool.render ??
|
|
557
|
+
((_args, value) => [{ type: "text", text: textOf(value) }]),
|
|
558
|
+
};
|
|
559
|
+
if (tool.presentationMeta) {
|
|
560
|
+
output.presentationMeta = tool.presentationMeta;
|
|
561
|
+
}
|
|
562
|
+
const options = {
|
|
448
563
|
name: tool.id,
|
|
449
564
|
description: tool.description,
|
|
450
565
|
parameters: toDshParameters(tool.parameters),
|
|
451
|
-
output
|
|
452
|
-
schema: { type: "object", additionalProperties: true },
|
|
453
|
-
render: (_args, value) => [
|
|
454
|
-
{ type: "text", text: textOf(value) },
|
|
455
|
-
],
|
|
456
|
-
},
|
|
566
|
+
output,
|
|
457
567
|
async execute(args) {
|
|
458
568
|
return await tool.handler(args);
|
|
459
569
|
},
|
|
460
|
-
}
|
|
570
|
+
};
|
|
571
|
+
if (tool.presentResult) {
|
|
572
|
+
options.presentResult = tool.presentResult;
|
|
573
|
+
}
|
|
574
|
+
// 官方路径:ctx.tools.register(defineTool({...}))
|
|
575
|
+
const def = defineTool(options);
|
|
461
576
|
if (ctx?.tools?.register) {
|
|
462
577
|
ctx.tools.register(def);
|
|
463
578
|
}
|
|
@@ -480,5 +595,5 @@ export function apply(ctx) {
|
|
|
480
595
|
}
|
|
481
596
|
// 同时导出库的全部公共 API(BiliClient / 各 API 类 / 模型等),
|
|
482
597
|
// 让 `import "dsh-bili-toolkit"` 既可作为插件入口,也可当普通库使用。
|
|
483
|
-
export * from "./index";
|
|
598
|
+
export * from "./index.js";
|
|
484
599
|
export { BiliClient, Video, User, Page, PlayInfo, Subtitle, Collection };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/** dsh-bili-toolkit 对外导出入口。 */
|
|
2
|
-
export { BiliClient, USER_AGENT, DEFAULT_HEADERS } from "./client";
|
|
3
|
-
export type { BiliClientOptions } from "./client";
|
|
4
|
-
export { BiliApiError, CaptchaRequired, CookieError, ERROR_HINTS, } from "./errors";
|
|
5
|
-
export { WbiSigner, mixinKey } from "./wbi";
|
|
6
|
-
export { VideoAPI } from "./apis/video";
|
|
7
|
-
export { SearchAPI, VIDEO_ORDERS } from "./apis/search";
|
|
8
|
-
export { SpaceAPI } from "./apis/space";
|
|
9
|
-
export { CommentAPI } from "./apis/comment";
|
|
10
|
-
export { MessageAPI, generateDevId } from "./apis/message";
|
|
11
|
-
export { NotifyAPI } from "./apis/notify";
|
|
12
|
-
export { InteractAPI } from "./apis/interact";
|
|
13
|
-
export { RelationAPI } from "./apis/relation";
|
|
14
|
-
export { DynamicAPI } from "./apis/dynamic";
|
|
15
|
-
export { ArticleAPI, parseArticleId } from "./apis/article";
|
|
16
|
-
export { ProfileAPI } from "./apis/profile";
|
|
17
|
-
export { QrCodeLogin, QR_STATUS_SUCCESS, QR_STATUS_EXPIRED, QR_STATUS_WAITING, QR_STATUS_SCANNED } from "./apis/auth";
|
|
18
|
-
export { safeFilename, downloadUrl, mergeWithFfmpeg } from "./apis/download";
|
|
19
|
-
export { iterPages } from "./pagination";
|
|
20
|
-
export * from "./models";
|
|
21
|
-
export * from "./formatting";
|
|
22
|
-
export * as endpoints from "./endpoints";
|
|
2
|
+
export { BiliClient, USER_AGENT, DEFAULT_HEADERS } from "./client.js";
|
|
3
|
+
export type { BiliClientOptions } from "./client.js";
|
|
4
|
+
export { BiliApiError, CaptchaRequired, CookieError, ERROR_HINTS, } from "./errors.js";
|
|
5
|
+
export { WbiSigner, mixinKey } from "./wbi.js";
|
|
6
|
+
export { VideoAPI } from "./apis/video.js";
|
|
7
|
+
export { SearchAPI, VIDEO_ORDERS } from "./apis/search.js";
|
|
8
|
+
export { SpaceAPI } from "./apis/space.js";
|
|
9
|
+
export { CommentAPI } from "./apis/comment.js";
|
|
10
|
+
export { MessageAPI, generateDevId } from "./apis/message.js";
|
|
11
|
+
export { NotifyAPI } from "./apis/notify.js";
|
|
12
|
+
export { InteractAPI } from "./apis/interact.js";
|
|
13
|
+
export { RelationAPI } from "./apis/relation.js";
|
|
14
|
+
export { DynamicAPI } from "./apis/dynamic.js";
|
|
15
|
+
export { ArticleAPI, parseArticleId } from "./apis/article.js";
|
|
16
|
+
export { ProfileAPI } from "./apis/profile.js";
|
|
17
|
+
export { QrCodeLogin, QR_STATUS_SUCCESS, QR_STATUS_EXPIRED, QR_STATUS_WAITING, QR_STATUS_SCANNED } from "./apis/auth.js";
|
|
18
|
+
export { safeFilename, downloadUrl, mergeWithFfmpeg } from "./apis/download.js";
|
|
19
|
+
export { iterPages } from "./pagination.js";
|
|
20
|
+
export * from "./models.js";
|
|
21
|
+
export * from "./formatting.js";
|
|
22
|
+
export * as endpoints from "./endpoints.js";
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/** dsh-bili-toolkit 对外导出入口。 */
|
|
2
|
-
export { BiliClient, USER_AGENT, DEFAULT_HEADERS } from "./client";
|
|
3
|
-
export { BiliApiError, CaptchaRequired, CookieError, ERROR_HINTS, } from "./errors";
|
|
4
|
-
export { WbiSigner, mixinKey } from "./wbi";
|
|
5
|
-
export { VideoAPI } from "./apis/video";
|
|
6
|
-
export { SearchAPI, VIDEO_ORDERS } from "./apis/search";
|
|
7
|
-
export { SpaceAPI } from "./apis/space";
|
|
8
|
-
export { CommentAPI } from "./apis/comment";
|
|
9
|
-
export { MessageAPI, generateDevId } from "./apis/message";
|
|
10
|
-
export { NotifyAPI } from "./apis/notify";
|
|
11
|
-
export { InteractAPI } from "./apis/interact";
|
|
12
|
-
export { RelationAPI } from "./apis/relation";
|
|
13
|
-
export { DynamicAPI } from "./apis/dynamic";
|
|
14
|
-
export { ArticleAPI, parseArticleId } from "./apis/article";
|
|
15
|
-
export { ProfileAPI } from "./apis/profile";
|
|
16
|
-
export { QrCodeLogin, QR_STATUS_SUCCESS, QR_STATUS_EXPIRED, QR_STATUS_WAITING, QR_STATUS_SCANNED } from "./apis/auth";
|
|
17
|
-
export { safeFilename, downloadUrl, mergeWithFfmpeg } from "./apis/download";
|
|
18
|
-
export { iterPages } from "./pagination";
|
|
19
|
-
export * from "./models";
|
|
20
|
-
export * from "./formatting";
|
|
21
|
-
export * as endpoints from "./endpoints";
|
|
2
|
+
export { BiliClient, USER_AGENT, DEFAULT_HEADERS } from "./client.js";
|
|
3
|
+
export { BiliApiError, CaptchaRequired, CookieError, ERROR_HINTS, } from "./errors.js";
|
|
4
|
+
export { WbiSigner, mixinKey } from "./wbi.js";
|
|
5
|
+
export { VideoAPI } from "./apis/video.js";
|
|
6
|
+
export { SearchAPI, VIDEO_ORDERS } from "./apis/search.js";
|
|
7
|
+
export { SpaceAPI } from "./apis/space.js";
|
|
8
|
+
export { CommentAPI } from "./apis/comment.js";
|
|
9
|
+
export { MessageAPI, generateDevId } from "./apis/message.js";
|
|
10
|
+
export { NotifyAPI } from "./apis/notify.js";
|
|
11
|
+
export { InteractAPI } from "./apis/interact.js";
|
|
12
|
+
export { RelationAPI } from "./apis/relation.js";
|
|
13
|
+
export { DynamicAPI } from "./apis/dynamic.js";
|
|
14
|
+
export { ArticleAPI, parseArticleId } from "./apis/article.js";
|
|
15
|
+
export { ProfileAPI } from "./apis/profile.js";
|
|
16
|
+
export { QrCodeLogin, QR_STATUS_SUCCESS, QR_STATUS_EXPIRED, QR_STATUS_WAITING, QR_STATUS_SCANNED } from "./apis/auth.js";
|
|
17
|
+
export { safeFilename, downloadUrl, mergeWithFfmpeg } from "./apis/download.js";
|
|
18
|
+
export { iterPages } from "./pagination.js";
|
|
19
|
+
export * from "./models.js";
|
|
20
|
+
export * from "./formatting.js";
|
|
21
|
+
export * as endpoints from "./endpoints.js";
|
package/dist/models.js
CHANGED
package/dist/wbi.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ B 站从 2023 年起对空间、搜索、视频详情等接口启用 Wbi 鉴权
|
|
|
4
4
|
在若干次之后会返回 -403「非法访问」。签名需要 nav 接口里的 img_key/sub_key,
|
|
5
5
|
这两个 key 每天都会变,所以这里做了缓存,并在签名失效时刷新重试。
|
|
6
6
|
*/
|
|
7
|
-
import type { BiliClient } from "./client";
|
|
7
|
+
import type { BiliClient } from "./client.js";
|
|
8
8
|
export declare function mixinKey(imgKey: string, subKey: string): string;
|
|
9
9
|
export declare class WbiSigner {
|
|
10
10
|
private client;
|
package/dist/wbi.js
CHANGED
|
@@ -5,8 +5,8 @@ B 站从 2023 年起对空间、搜索、视频详情等接口启用 Wbi 鉴权
|
|
|
5
5
|
这两个 key 每天都会变,所以这里做了缓存,并在签名失效时刷新重试。
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
|
-
import { BiliApiError } from "./errors";
|
|
9
|
-
import * as endpoints from "./endpoints";
|
|
8
|
+
import { BiliApiError } from "./errors.js";
|
|
9
|
+
import * as endpoints from "./endpoints.js";
|
|
10
10
|
// 官方实现里的 64 位字符重排表
|
|
11
11
|
const MIXIN_KEY_ENC_TAB = [
|
|
12
12
|
46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-shlr-bilitoolkit",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "B
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "深海猎人专用B站接口工具箱 dsh 插件。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/dsh.js",
|
|
7
7
|
"types": "dist/dsh.d.ts",
|