@xunlei-open/miniapp-types 0.1.1-beta.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 miniapp-devkit contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # @xunlei-open/miniapp-types
2
+
3
+ 迅雷微应用 manifest、任务 API、生命周期事件和运行时能力的 TypeScript 类型。
4
+
5
+ ```bash
6
+ pnpm add -D @xunlei-open/miniapp-types
7
+ ```
8
+
9
+ 在 `tsconfig.json` 中启用全局类型:
10
+
11
+ ```json
12
+ {
13
+ "compilerOptions": {
14
+ "types": ["@xunlei-open/miniapp-types"]
15
+ }
16
+ }
17
+ ```
18
+
19
+ 之后可直接获得 `xunlei` 和 `MessageError` 的类型提示,也可按需导入类型:
20
+
21
+ ```ts
22
+ import type { MiniappManifest, OnResolveContext } from '@xunlei-open/miniapp-types'
23
+ ```
package/dist/index.cjs ADDED
File without changes
@@ -0,0 +1,482 @@
1
+ //#region src/index.d.ts
2
+ /** 微应用清单,描述应用元数据、入口、权限和扩展能力。 */
3
+ export interface MiniappManifest {
4
+ /** 清单格式版本,默认为 1 */
5
+ manifest_version?: 1;
6
+ /** 微应用内部名称,仅用于元数据和展示,不参与微应用 ID 生成。 */
7
+ name: string;
8
+ /** 面向用户展示的微应用名称。 */
9
+ title: string;
10
+ /** 微应用简介,最多 1024 个字符。 */
11
+ description?: string;
12
+ /** 微应用版本。 */
13
+ version: string;
14
+ /** 微应用作者。 */
15
+ author?: string;
16
+ /** 项目主页地址。 */
17
+ homepage?: string;
18
+ /** 源代码仓库信息。 */
19
+ repository?: MiniappRepositoryManifest;
20
+ /** 微应用图标,相对于微应用包根目录。 */
21
+ icon?: string;
22
+ /** 页面入口配置。 */
23
+ entry?: MiniappEntryManifest;
24
+ /** 窗口配置。 */
25
+ window?: MiniappWindowOptions;
26
+ /** 申请使用的平台权限。 */
27
+ permissions?: MiniappPermission[];
28
+ /** 网络访问配置。 */
29
+ network?: MiniappNetworkManifest;
30
+ /** 生命周期事件脚本配置。 */
31
+ scripts?: MiniappScriptManifest[];
32
+ /** 用户设置项。 */
33
+ settings?: MiniappSettingManifest[];
34
+ }
35
+ export type MiniappPermission = "network" | "tasks.create" | "tasks.list" | "tasks.detail" | "tasks.file.access" | "tasks.update" | "tasks.delete" | "blob" | "webview";
36
+ export interface MiniappNetworkManifest {
37
+ [key: string]: unknown;
38
+ /** 页面和事件脚本可直接访问的远程网址匹配模式。 */
39
+ urls?: string[];
40
+ }
41
+ export type MiniappEntryType = "miniapp" | "in_app_webview";
42
+ export interface MiniappEntryManifest {
43
+ /** 默认使用微应用自己的页面容器。 */
44
+ type?: MiniappEntryType;
45
+ /** 微应用页面(miniapp)使用包内相对地址;内嵌网页(in_app_webview)使用完整的 HTTP 或 HTTPS 地址。 */
46
+ url: string;
47
+ }
48
+ export interface MiniappRepositoryManifest {
49
+ url: string;
50
+ directory?: string;
51
+ }
52
+ export interface MiniappWindowOptions {
53
+ width?: number;
54
+ height?: number;
55
+ }
56
+ export interface MiniappScriptManifest {
57
+ event: MiniappLifecycleEventName;
58
+ match?: MiniappEventMatch;
59
+ entry: string;
60
+ }
61
+ export type MiniappLifecycleEventName = "onResolve" | "onStart" | "onError" | "onDone";
62
+ export type MiniappEventMatch = {
63
+ urls?: string[];
64
+ labels?: string[];
65
+ };
66
+ export type MiniappSettingValue = string | number | boolean;
67
+ export interface MiniappSettingManifest {
68
+ name: string;
69
+ title: string;
70
+ description?: string;
71
+ type?: "string" | "number" | "boolean";
72
+ value?: MiniappSettingValue;
73
+ options?: MiniappSettingOption[];
74
+ }
75
+ export interface MiniappSettingOption {
76
+ label: string;
77
+ value: MiniappSettingValue;
78
+ }
79
+ /** 下载协议类型。 */
80
+ export type Protocol = "http" | "bt" | "ed2k";
81
+ export type TaskStatus = "ready" | "running" | "pause" | "wait" | "error" | "done";
82
+ /** 支持的 HTTP 请求头 */
83
+ export type HttpHeader = {
84
+ "User-Agent"?: string;
85
+ Referer?: string;
86
+ Cookie?: string;
87
+ Authorization?: string;
88
+ };
89
+ export interface HttpReqExtra {
90
+ header?: HttpHeader;
91
+ }
92
+ export type ReqExtra = HttpReqExtra;
93
+ export interface Request {
94
+ /** 请求地址,支持 HTTP、HTTPS、磁力链接、电驴链接和本地种子文件。 */
95
+ url: string;
96
+ /** 请求的附加选项。 */
97
+ extra?: ReqExtra;
98
+ /** 请求标签,以键值对形式保存。 */
99
+ labels?: {
100
+ [key: string]: string;
101
+ };
102
+ }
103
+ export interface ExtensionRequest extends Request {
104
+ /** 全量覆盖任务请求的标签。 */
105
+ setLabels(labels: Record<string, string>): Promise<void>;
106
+ /** 设置任务请求的单个标签。 */
107
+ putLabel(key: string, value: string): Promise<void>;
108
+ /** 删除任务请求的单个标签。 */
109
+ delLabel(key: string): Promise<void>;
110
+ }
111
+ export interface FileInfo {
112
+ name: string;
113
+ /** 文件相对于资源根目录的路径。 */
114
+ path: string;
115
+ /** 文件大小,单位为字节。 */
116
+ size: number;
117
+ req?: Request;
118
+ }
119
+ export interface Resource {
120
+ /** 资源名称;资源为文件夹时,表示文件夹名称。 */
121
+ name: string;
122
+ /** 资源总大小,单位为字节。 */
123
+ size: number;
124
+ /** 资源包含的文件列表。 */
125
+ files: FileInfo[];
126
+ }
127
+ export interface HttpOptsExtra {
128
+ /** 并发连接数。 */
129
+ connections?: number;
130
+ }
131
+ export type OptsExtra = HttpOptsExtra;
132
+ export interface Options {
133
+ /** 指定保存的文件名。 */
134
+ name?: string;
135
+ /** 指定文件保存路径。 */
136
+ path?: string;
137
+ /** 下载的附加选项。 */
138
+ extra?: OptsExtra;
139
+ }
140
+ export type ExtractStatus = "" | "queued" | "waitingParts" | "extracting" | "done" | "error";
141
+ export interface TaskProgress {
142
+ /** 下载已用时间,单位为纳秒。 */
143
+ used: number;
144
+ /** 下载速度,单位为字节每秒。 */
145
+ speed: number;
146
+ /** 已下载大小,单位为字节。 */
147
+ downloaded: number;
148
+ }
149
+ export interface Task {
150
+ type: "single";
151
+ /** 任务标识。 */
152
+ id: string;
153
+ /** 下载协议类型。 */
154
+ protocol: Protocol;
155
+ /** 任务展示名称。 */
156
+ name: string;
157
+ /** 任务元数据,包含请求、资源和下载选项。 */
158
+ meta: {
159
+ req: Request;
160
+ res: Resource;
161
+ opts: Options;
162
+ };
163
+ /** 任务状态。 */
164
+ status: TaskStatus;
165
+ /** 任务进度。 */
166
+ progress: TaskProgress;
167
+ /** 任务总大小,单位为字节。 */
168
+ size: number;
169
+ /** 任务创建时间,采用 ISO 8601 格式。 */
170
+ createdAt: string;
171
+ /** 任务更新时间,采用 ISO 8601 格式。 */
172
+ updatedAt: string;
173
+ }
174
+ /** 普通任务与任务组均使用 id 字段标识,通过 type 字段区分类型。 */
175
+ export type TaskDetailResult = Task | TaskGroup;
176
+ export interface TaskGroup extends Omit<Task, "type" | "protocol" | "meta"> {
177
+ type: "group";
178
+ /** path 为父目录,name 为组目录名。 */
179
+ opts: {
180
+ path: string;
181
+ name: string;
182
+ };
183
+ /** 当前仍存在的子任务,不嵌套任务组。 */
184
+ children: Task[];
185
+ }
186
+ export interface TaskFileAccessInput {
187
+ taskId: string;
188
+ fileIndex: number;
189
+ }
190
+ export interface TaskFileAccessResult {
191
+ /** 用于只读访问任务文件内容的临时 HTTP 地址。 */
192
+ url: string;
193
+ }
194
+ /**
195
+ * 扩展任务类型,提供任务控制能力。
196
+ * 用于任务开始(onStart)和任务出错(onError)事件的上下文。
197
+ */
198
+ export interface ExtensionTask extends Task {
199
+ meta: Omit<Task["meta"], "req"> & {
200
+ req: ExtensionRequest;
201
+ };
202
+ /** 覆盖任务请求地址。 */
203
+ setUrl(url: string): Promise<void>;
204
+ }
205
+ export interface OnErrorExtensionTask extends ExtensionTask {
206
+ /** 恢复任务。 */
207
+ continue(): Promise<void>;
208
+ }
209
+ export interface TaskCreateInput {
210
+ req: Request;
211
+ opts?: Options;
212
+ }
213
+ /** 创建一组共享下载目录的任务,复用 tasks.create 权限。 */
214
+ export interface TaskCreateGroupInput {
215
+ /** 单个目录名,不允许路径分隔符、. 或 ..。 */
216
+ name: string;
217
+ reqs: Request[];
218
+ /** path 为父目录;未指定时使用宿主默认下载目录。 */
219
+ opts?: Options;
220
+ }
221
+ export interface TaskListInput {
222
+ offset?: number;
223
+ limit?: number;
224
+ status?: Task["status"] | Task["status"][];
225
+ sort?: "createdAtAsc" | "createdAtDesc";
226
+ }
227
+ export interface TaskListResult {
228
+ ids: string[];
229
+ total: number;
230
+ offset: number;
231
+ limit: number;
232
+ }
233
+ export interface TaskDetailInput {
234
+ id: string;
235
+ }
236
+ export interface TaskUpdateInput {
237
+ id: string;
238
+ req?: Request;
239
+ opts?: Options;
240
+ }
241
+ export interface TaskDeleteInput {
242
+ id: string;
243
+ deleteFiles?: boolean;
244
+ }
245
+ export interface TaskDeleteResult {
246
+ id: string;
247
+ deleted: boolean;
248
+ }
249
+ /** 资源解析事件(onResolve)的结果允许省略名称、总大小和断点续传标记。 */
250
+ export type OnResolveResource = Omit<Resource, "name" | "size"> & Partial<Pick<Resource, "name" | "size">>;
251
+ /** 资源解析事件(onResolve)的上下文。 */
252
+ export interface OnResolveContext {
253
+ /** 用户请求信息(只读)。 */
254
+ req: Request;
255
+ /** 解析结果,由事件脚本填充。 */
256
+ res?: OnResolveResource;
257
+ }
258
+ /** 任务开始事件(onStart)的上下文。 */
259
+ export interface OnStartContext {
260
+ /** 当前任务信息。 */
261
+ task: ExtensionTask;
262
+ }
263
+ /** 任务出错事件(onError)的上下文。 */
264
+ export interface OnErrorContext {
265
+ /** 出错时的任务信息。 */
266
+ task: OnErrorExtensionTask;
267
+ /** 错误详情(只读)。 */
268
+ error: Error;
269
+ }
270
+ /** 任务完成事件(onDone)的上下文。 */
271
+ export interface OnDoneContext {
272
+ /** 完成时的任务信息,只读,不提供修改请求地址或标签等控制方法。 */
273
+ task: Task;
274
+ }
275
+ export type XunleiOnResolveHandler = (ctx: OnResolveContext) => Promise<void> | void;
276
+ export type XunleiOnStartHandler = (ctx: OnStartContext) => Promise<void> | void;
277
+ export type XunleiOnErrorHandler = (ctx: OnErrorContext) => Promise<void> | void;
278
+ export type XunleiOnDoneHandler = (ctx: OnDoneContext) => Promise<void> | void;
279
+ /** 微应用信息(只读)。 */
280
+ export interface XunleiInfo {
281
+ /** 微应用稳定身份,由本地目录路径或签名公钥派生。 */
282
+ identity: string;
283
+ /** 微应用内部名称,对应清单中的 name 字段。 */
284
+ name: string;
285
+ /** 微应用作者。 */
286
+ author: string;
287
+ /** 微应用展示名称,对应清单中的 title 字段。 */
288
+ title: string;
289
+ /** 微应用版本,对应清单中的 version 字段。 */
290
+ version: string;
291
+ }
292
+ /** 微应用日志接口。 */
293
+ export interface XunleiLogger {
294
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
295
+ info(message?: unknown, ...optionalParams: unknown[]): void;
296
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
297
+ error(message?: unknown, ...optionalParams: unknown[]): void;
298
+ }
299
+ /** 微应用设置接口。 */
300
+ export interface XunleiSettings {
301
+ /** 以清单中各设置项的 name 字段为键,提供对应的设置值。 */
302
+ [key: string]: MiniappSettingValue | undefined;
303
+ }
304
+ /** 微应用键值对存储接口。 */
305
+ export interface XunleiStorage {
306
+ /**
307
+ * 获取指定键的值,键不存在时返回空字符串。
308
+ */
309
+ get(key: string): Promise<string>;
310
+ /**
311
+ * 设置指定键的值,键不存在时创建。
312
+ */
313
+ set(key: string, value: string): Promise<void>;
314
+ /**
315
+ * 移除指定键对应的键值对。
316
+ */
317
+ remove(key: string): Promise<void>;
318
+ /**
319
+ * 清除所有键值对。
320
+ */
321
+ clear(): Promise<void>;
322
+ /**
323
+ * 返回已存储的所有键。
324
+ */
325
+ keys(): Promise<string[]>;
326
+ }
327
+ /** 任务管理接口,可用于页面和事件脚本。 */
328
+ export interface XunleiTasks {
329
+ /** 创建下载任务。 */
330
+ create(input: TaskCreateInput): Promise<Task>;
331
+ /** 创建共享下载目录的任务组。 */
332
+ createGroup(input: TaskCreateGroupInput): Promise<TaskGroup>;
333
+ /** 按分页和筛选条件查询任务标识列表。 */
334
+ list(input?: TaskListInput): Promise<TaskListResult>;
335
+ /** 查询普通任务或任务组的详情。 */
336
+ detail(input: TaskDetailInput): Promise<TaskDetailResult>;
337
+ /** 更新任务请求或下载选项。 */
338
+ update(input: TaskUpdateInput): Promise<Task>;
339
+ /** 删除任务,并按参数决定是否删除文件。 */
340
+ delete(input: TaskDeleteInput): Promise<TaskDeleteResult>;
341
+ }
342
+ export interface XunleiMiniappTasks extends XunleiTasks {
343
+ /** 任务文件访问接口。 */
344
+ file: {
345
+ /** 获取用于只读访问任务文件的临时地址。 */
346
+ access(input: TaskFileAccessInput): Promise<TaskFileAccessResult>;
347
+ };
348
+ }
349
+ export interface XunleiEvents {
350
+ /** 注册资源解析事件处理函数。 */
351
+ onResolve(handler: XunleiOnResolveHandler): void;
352
+ /** 注册任务开始事件处理函数。 */
353
+ onStart(handler: XunleiOnStartHandler): void;
354
+ /** 注册任务出错事件处理函数。 */
355
+ onError(handler: XunleiOnErrorHandler): void;
356
+ /** 注册任务完成事件处理函数。 */
357
+ onDone(handler: XunleiOnDoneHandler): void;
358
+ }
359
+ /** 打开内嵌网页时的窗口配置。 */
360
+ export interface WebviewOpenOptions {
361
+ /**
362
+ * 是否隐藏网页窗口,默认为 false(显示窗口)。
363
+ * 非本地开发环境中,事件脚本打开的网页窗口会被强制隐藏。
364
+ */
365
+ headless?: boolean;
366
+ title?: string;
367
+ width?: number;
368
+ height?: number;
369
+ userAgent?: string;
370
+ }
371
+ export interface WebviewGotoOptions {
372
+ timeoutMs?: number;
373
+ waitUntil?: "load" | "domcontentloaded";
374
+ }
375
+ export interface WebviewClickOptions {
376
+ delay?: number;
377
+ }
378
+ export interface WebviewTypeOptions {
379
+ delay?: number;
380
+ }
381
+ export interface WebviewWaitOptions {
382
+ timeoutMs?: number;
383
+ pollIntervalMs?: number;
384
+ }
385
+ export interface WebviewWaitForSelectorOptions extends WebviewWaitOptions {
386
+ visible?: boolean;
387
+ hidden?: boolean;
388
+ }
389
+ export interface WebviewCookie {
390
+ name: string;
391
+ value: string;
392
+ domain?: string;
393
+ path?: string;
394
+ expires?: string | number | Date;
395
+ secure?: boolean;
396
+ httpOnly?: boolean;
397
+ }
398
+ export type WebviewExecutable<T = unknown> = string | ((...args: unknown[]) => T | Promise<T>);
399
+ export interface WebviewPage {
400
+ addInitScript(script: string): Promise<void>;
401
+ goto(url: string, opts?: WebviewGotoOptions): Promise<void>;
402
+ execute<T = unknown>(scriptOrFn: WebviewExecutable<T>, ...args: unknown[]): Promise<T>;
403
+ focus(selector: string): Promise<void>;
404
+ click(selector: string, opts?: WebviewClickOptions): Promise<void>;
405
+ type(selector: string, text: string, opts?: WebviewTypeOptions): Promise<void>;
406
+ waitForSelector(selector: string, opts?: WebviewWaitForSelectorOptions): Promise<boolean>;
407
+ waitForFunction<T = unknown>(scriptOrFn: WebviewExecutable<T>, ...args: unknown[]): Promise<T | null>;
408
+ getCookies(): Promise<WebviewCookie[]>;
409
+ setCookie(cookie: WebviewCookie): Promise<void>;
410
+ deleteCookie(cookie: WebviewCookie): Promise<void>;
411
+ clearCookies(): Promise<void>;
412
+ url(): Promise<string>;
413
+ content(): Promise<string>;
414
+ close(): Promise<void>;
415
+ }
416
+ export interface XunleiRuntimeWebview {
417
+ /** 检查内嵌网页能力是否可用。 */
418
+ isAvailable(): Promise<boolean>;
419
+ /** 打开内嵌网页并返回页面操作接口。 */
420
+ open(opts?: WebviewOpenOptions): Promise<WebviewPage>;
421
+ }
422
+ export interface BlobOpenRequest {
423
+ /** 起始字节偏移量,包含该位置的字节。 */
424
+ offset: number;
425
+ /** 结束字节偏移量,包含该位置的字节;未指定结束位置时为 -1。 */
426
+ end: number;
427
+ }
428
+ export type BlobOpener = (request: BlobOpenRequest) => ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
429
+ export interface BlobObjectURLOptions {
430
+ /** 本地 HTTP 服务返回的媒体类型(MIME)。 */
431
+ contentType?: string;
432
+ /** 数据源总大小,单位为字节;启用字节范围请求(range 为 true)时必填。 */
433
+ size?: number;
434
+ /** 数据源是否支持字节范围请求。 */
435
+ range?: boolean;
436
+ }
437
+ export interface XunleiRuntimeBlob {
438
+ /** 为二进制数据对象或按需打开的数据流创建本地 HTTP 地址。 */
439
+ createObjectURL(source: Blob | BlobOpener, options?: BlobObjectURLOptions): Promise<string>;
440
+ /** 撤销此前由 createObjectURL 创建的地址。 */
441
+ revokeObjectURL(url: string): Promise<void>;
442
+ }
443
+ export interface XunleiRuntime {
444
+ blob: XunleiRuntimeBlob;
445
+ webview: XunleiRuntimeWebview;
446
+ }
447
+ export interface Xunlei {
448
+ /** 微应用信息(只读)。 */
449
+ info: XunleiInfo;
450
+ /** 日志接口。 */
451
+ logger: XunleiLogger;
452
+ /** 设置接口。 */
453
+ settings: XunleiSettings;
454
+ /** 键值对存储接口。 */
455
+ storage: XunleiStorage;
456
+ /** 任务管理接口。 */
457
+ tasks: XunleiMiniappTasks;
458
+ /** 事件注册接口。 */
459
+ events: XunleiEvents;
460
+ /** 运行时能力接口。 */
461
+ runtime: XunleiRuntime;
462
+ }
463
+ export interface MiniappInfo {
464
+ id: string;
465
+ name: string;
466
+ version: string;
467
+ root?: string;
468
+ entry?: MiniappEntryManifest;
469
+ dev?: boolean;
470
+ }
471
+ export type MessageError = Error;
472
+ /** 用户可见错误的构造接口;微应用抛出此类错误后,宿主可通过轻提示展示错误消息。 */
473
+ export interface MessageErrorConstructor {
474
+ new (message?: string): MessageError;
475
+ (message?: string): MessageError;
476
+ }
477
+ declare global {
478
+ const xunlei: Xunlei;
479
+ const MessageError: MessageErrorConstructor;
480
+ }
481
+ //#endregion
482
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
@@ -0,0 +1,482 @@
1
+ //#region src/index.d.ts
2
+ /** 微应用清单,描述应用元数据、入口、权限和扩展能力。 */
3
+ export interface MiniappManifest {
4
+ /** 清单格式版本,默认为 1 */
5
+ manifest_version?: 1;
6
+ /** 微应用内部名称,仅用于元数据和展示,不参与微应用 ID 生成。 */
7
+ name: string;
8
+ /** 面向用户展示的微应用名称。 */
9
+ title: string;
10
+ /** 微应用简介,最多 1024 个字符。 */
11
+ description?: string;
12
+ /** 微应用版本。 */
13
+ version: string;
14
+ /** 微应用作者。 */
15
+ author?: string;
16
+ /** 项目主页地址。 */
17
+ homepage?: string;
18
+ /** 源代码仓库信息。 */
19
+ repository?: MiniappRepositoryManifest;
20
+ /** 微应用图标,相对于微应用包根目录。 */
21
+ icon?: string;
22
+ /** 页面入口配置。 */
23
+ entry?: MiniappEntryManifest;
24
+ /** 窗口配置。 */
25
+ window?: MiniappWindowOptions;
26
+ /** 申请使用的平台权限。 */
27
+ permissions?: MiniappPermission[];
28
+ /** 网络访问配置。 */
29
+ network?: MiniappNetworkManifest;
30
+ /** 生命周期事件脚本配置。 */
31
+ scripts?: MiniappScriptManifest[];
32
+ /** 用户设置项。 */
33
+ settings?: MiniappSettingManifest[];
34
+ }
35
+ export type MiniappPermission = "network" | "tasks.create" | "tasks.list" | "tasks.detail" | "tasks.file.access" | "tasks.update" | "tasks.delete" | "blob" | "webview";
36
+ export interface MiniappNetworkManifest {
37
+ [key: string]: unknown;
38
+ /** 页面和事件脚本可直接访问的远程网址匹配模式。 */
39
+ urls?: string[];
40
+ }
41
+ export type MiniappEntryType = "miniapp" | "in_app_webview";
42
+ export interface MiniappEntryManifest {
43
+ /** 默认使用微应用自己的页面容器。 */
44
+ type?: MiniappEntryType;
45
+ /** 微应用页面(miniapp)使用包内相对地址;内嵌网页(in_app_webview)使用完整的 HTTP 或 HTTPS 地址。 */
46
+ url: string;
47
+ }
48
+ export interface MiniappRepositoryManifest {
49
+ url: string;
50
+ directory?: string;
51
+ }
52
+ export interface MiniappWindowOptions {
53
+ width?: number;
54
+ height?: number;
55
+ }
56
+ export interface MiniappScriptManifest {
57
+ event: MiniappLifecycleEventName;
58
+ match?: MiniappEventMatch;
59
+ entry: string;
60
+ }
61
+ export type MiniappLifecycleEventName = "onResolve" | "onStart" | "onError" | "onDone";
62
+ export type MiniappEventMatch = {
63
+ urls?: string[];
64
+ labels?: string[];
65
+ };
66
+ export type MiniappSettingValue = string | number | boolean;
67
+ export interface MiniappSettingManifest {
68
+ name: string;
69
+ title: string;
70
+ description?: string;
71
+ type?: "string" | "number" | "boolean";
72
+ value?: MiniappSettingValue;
73
+ options?: MiniappSettingOption[];
74
+ }
75
+ export interface MiniappSettingOption {
76
+ label: string;
77
+ value: MiniappSettingValue;
78
+ }
79
+ /** 下载协议类型。 */
80
+ export type Protocol = "http" | "bt" | "ed2k";
81
+ export type TaskStatus = "ready" | "running" | "pause" | "wait" | "error" | "done";
82
+ /** 支持的 HTTP 请求头 */
83
+ export type HttpHeader = {
84
+ "User-Agent"?: string;
85
+ Referer?: string;
86
+ Cookie?: string;
87
+ Authorization?: string;
88
+ };
89
+ export interface HttpReqExtra {
90
+ header?: HttpHeader;
91
+ }
92
+ export type ReqExtra = HttpReqExtra;
93
+ export interface Request {
94
+ /** 请求地址,支持 HTTP、HTTPS、磁力链接、电驴链接和本地种子文件。 */
95
+ url: string;
96
+ /** 请求的附加选项。 */
97
+ extra?: ReqExtra;
98
+ /** 请求标签,以键值对形式保存。 */
99
+ labels?: {
100
+ [key: string]: string;
101
+ };
102
+ }
103
+ export interface ExtensionRequest extends Request {
104
+ /** 全量覆盖任务请求的标签。 */
105
+ setLabels(labels: Record<string, string>): Promise<void>;
106
+ /** 设置任务请求的单个标签。 */
107
+ putLabel(key: string, value: string): Promise<void>;
108
+ /** 删除任务请求的单个标签。 */
109
+ delLabel(key: string): Promise<void>;
110
+ }
111
+ export interface FileInfo {
112
+ name: string;
113
+ /** 文件相对于资源根目录的路径。 */
114
+ path: string;
115
+ /** 文件大小,单位为字节。 */
116
+ size: number;
117
+ req?: Request;
118
+ }
119
+ export interface Resource {
120
+ /** 资源名称;资源为文件夹时,表示文件夹名称。 */
121
+ name: string;
122
+ /** 资源总大小,单位为字节。 */
123
+ size: number;
124
+ /** 资源包含的文件列表。 */
125
+ files: FileInfo[];
126
+ }
127
+ export interface HttpOptsExtra {
128
+ /** 并发连接数。 */
129
+ connections?: number;
130
+ }
131
+ export type OptsExtra = HttpOptsExtra;
132
+ export interface Options {
133
+ /** 指定保存的文件名。 */
134
+ name?: string;
135
+ /** 指定文件保存路径。 */
136
+ path?: string;
137
+ /** 下载的附加选项。 */
138
+ extra?: OptsExtra;
139
+ }
140
+ export type ExtractStatus = "" | "queued" | "waitingParts" | "extracting" | "done" | "error";
141
+ export interface TaskProgress {
142
+ /** 下载已用时间,单位为纳秒。 */
143
+ used: number;
144
+ /** 下载速度,单位为字节每秒。 */
145
+ speed: number;
146
+ /** 已下载大小,单位为字节。 */
147
+ downloaded: number;
148
+ }
149
+ export interface Task {
150
+ type: "single";
151
+ /** 任务标识。 */
152
+ id: string;
153
+ /** 下载协议类型。 */
154
+ protocol: Protocol;
155
+ /** 任务展示名称。 */
156
+ name: string;
157
+ /** 任务元数据,包含请求、资源和下载选项。 */
158
+ meta: {
159
+ req: Request;
160
+ res: Resource;
161
+ opts: Options;
162
+ };
163
+ /** 任务状态。 */
164
+ status: TaskStatus;
165
+ /** 任务进度。 */
166
+ progress: TaskProgress;
167
+ /** 任务总大小,单位为字节。 */
168
+ size: number;
169
+ /** 任务创建时间,采用 ISO 8601 格式。 */
170
+ createdAt: string;
171
+ /** 任务更新时间,采用 ISO 8601 格式。 */
172
+ updatedAt: string;
173
+ }
174
+ /** 普通任务与任务组均使用 id 字段标识,通过 type 字段区分类型。 */
175
+ export type TaskDetailResult = Task | TaskGroup;
176
+ export interface TaskGroup extends Omit<Task, "type" | "protocol" | "meta"> {
177
+ type: "group";
178
+ /** path 为父目录,name 为组目录名。 */
179
+ opts: {
180
+ path: string;
181
+ name: string;
182
+ };
183
+ /** 当前仍存在的子任务,不嵌套任务组。 */
184
+ children: Task[];
185
+ }
186
+ export interface TaskFileAccessInput {
187
+ taskId: string;
188
+ fileIndex: number;
189
+ }
190
+ export interface TaskFileAccessResult {
191
+ /** 用于只读访问任务文件内容的临时 HTTP 地址。 */
192
+ url: string;
193
+ }
194
+ /**
195
+ * 扩展任务类型,提供任务控制能力。
196
+ * 用于任务开始(onStart)和任务出错(onError)事件的上下文。
197
+ */
198
+ export interface ExtensionTask extends Task {
199
+ meta: Omit<Task["meta"], "req"> & {
200
+ req: ExtensionRequest;
201
+ };
202
+ /** 覆盖任务请求地址。 */
203
+ setUrl(url: string): Promise<void>;
204
+ }
205
+ export interface OnErrorExtensionTask extends ExtensionTask {
206
+ /** 恢复任务。 */
207
+ continue(): Promise<void>;
208
+ }
209
+ export interface TaskCreateInput {
210
+ req: Request;
211
+ opts?: Options;
212
+ }
213
+ /** 创建一组共享下载目录的任务,复用 tasks.create 权限。 */
214
+ export interface TaskCreateGroupInput {
215
+ /** 单个目录名,不允许路径分隔符、. 或 ..。 */
216
+ name: string;
217
+ reqs: Request[];
218
+ /** path 为父目录;未指定时使用宿主默认下载目录。 */
219
+ opts?: Options;
220
+ }
221
+ export interface TaskListInput {
222
+ offset?: number;
223
+ limit?: number;
224
+ status?: Task["status"] | Task["status"][];
225
+ sort?: "createdAtAsc" | "createdAtDesc";
226
+ }
227
+ export interface TaskListResult {
228
+ ids: string[];
229
+ total: number;
230
+ offset: number;
231
+ limit: number;
232
+ }
233
+ export interface TaskDetailInput {
234
+ id: string;
235
+ }
236
+ export interface TaskUpdateInput {
237
+ id: string;
238
+ req?: Request;
239
+ opts?: Options;
240
+ }
241
+ export interface TaskDeleteInput {
242
+ id: string;
243
+ deleteFiles?: boolean;
244
+ }
245
+ export interface TaskDeleteResult {
246
+ id: string;
247
+ deleted: boolean;
248
+ }
249
+ /** 资源解析事件(onResolve)的结果允许省略名称、总大小和断点续传标记。 */
250
+ export type OnResolveResource = Omit<Resource, "name" | "size"> & Partial<Pick<Resource, "name" | "size">>;
251
+ /** 资源解析事件(onResolve)的上下文。 */
252
+ export interface OnResolveContext {
253
+ /** 用户请求信息(只读)。 */
254
+ req: Request;
255
+ /** 解析结果,由事件脚本填充。 */
256
+ res?: OnResolveResource;
257
+ }
258
+ /** 任务开始事件(onStart)的上下文。 */
259
+ export interface OnStartContext {
260
+ /** 当前任务信息。 */
261
+ task: ExtensionTask;
262
+ }
263
+ /** 任务出错事件(onError)的上下文。 */
264
+ export interface OnErrorContext {
265
+ /** 出错时的任务信息。 */
266
+ task: OnErrorExtensionTask;
267
+ /** 错误详情(只读)。 */
268
+ error: Error;
269
+ }
270
+ /** 任务完成事件(onDone)的上下文。 */
271
+ export interface OnDoneContext {
272
+ /** 完成时的任务信息,只读,不提供修改请求地址或标签等控制方法。 */
273
+ task: Task;
274
+ }
275
+ export type XunleiOnResolveHandler = (ctx: OnResolveContext) => Promise<void> | void;
276
+ export type XunleiOnStartHandler = (ctx: OnStartContext) => Promise<void> | void;
277
+ export type XunleiOnErrorHandler = (ctx: OnErrorContext) => Promise<void> | void;
278
+ export type XunleiOnDoneHandler = (ctx: OnDoneContext) => Promise<void> | void;
279
+ /** 微应用信息(只读)。 */
280
+ export interface XunleiInfo {
281
+ /** 微应用稳定身份,由本地目录路径或签名公钥派生。 */
282
+ identity: string;
283
+ /** 微应用内部名称,对应清单中的 name 字段。 */
284
+ name: string;
285
+ /** 微应用作者。 */
286
+ author: string;
287
+ /** 微应用展示名称,对应清单中的 title 字段。 */
288
+ title: string;
289
+ /** 微应用版本,对应清单中的 version 字段。 */
290
+ version: string;
291
+ }
292
+ /** 微应用日志接口。 */
293
+ export interface XunleiLogger {
294
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
295
+ info(message?: unknown, ...optionalParams: unknown[]): void;
296
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
297
+ error(message?: unknown, ...optionalParams: unknown[]): void;
298
+ }
299
+ /** 微应用设置接口。 */
300
+ export interface XunleiSettings {
301
+ /** 以清单中各设置项的 name 字段为键,提供对应的设置值。 */
302
+ [key: string]: MiniappSettingValue | undefined;
303
+ }
304
+ /** 微应用键值对存储接口。 */
305
+ export interface XunleiStorage {
306
+ /**
307
+ * 获取指定键的值,键不存在时返回空字符串。
308
+ */
309
+ get(key: string): Promise<string>;
310
+ /**
311
+ * 设置指定键的值,键不存在时创建。
312
+ */
313
+ set(key: string, value: string): Promise<void>;
314
+ /**
315
+ * 移除指定键对应的键值对。
316
+ */
317
+ remove(key: string): Promise<void>;
318
+ /**
319
+ * 清除所有键值对。
320
+ */
321
+ clear(): Promise<void>;
322
+ /**
323
+ * 返回已存储的所有键。
324
+ */
325
+ keys(): Promise<string[]>;
326
+ }
327
+ /** 任务管理接口,可用于页面和事件脚本。 */
328
+ export interface XunleiTasks {
329
+ /** 创建下载任务。 */
330
+ create(input: TaskCreateInput): Promise<Task>;
331
+ /** 创建共享下载目录的任务组。 */
332
+ createGroup(input: TaskCreateGroupInput): Promise<TaskGroup>;
333
+ /** 按分页和筛选条件查询任务标识列表。 */
334
+ list(input?: TaskListInput): Promise<TaskListResult>;
335
+ /** 查询普通任务或任务组的详情。 */
336
+ detail(input: TaskDetailInput): Promise<TaskDetailResult>;
337
+ /** 更新任务请求或下载选项。 */
338
+ update(input: TaskUpdateInput): Promise<Task>;
339
+ /** 删除任务,并按参数决定是否删除文件。 */
340
+ delete(input: TaskDeleteInput): Promise<TaskDeleteResult>;
341
+ }
342
+ export interface XunleiMiniappTasks extends XunleiTasks {
343
+ /** 任务文件访问接口。 */
344
+ file: {
345
+ /** 获取用于只读访问任务文件的临时地址。 */
346
+ access(input: TaskFileAccessInput): Promise<TaskFileAccessResult>;
347
+ };
348
+ }
349
+ export interface XunleiEvents {
350
+ /** 注册资源解析事件处理函数。 */
351
+ onResolve(handler: XunleiOnResolveHandler): void;
352
+ /** 注册任务开始事件处理函数。 */
353
+ onStart(handler: XunleiOnStartHandler): void;
354
+ /** 注册任务出错事件处理函数。 */
355
+ onError(handler: XunleiOnErrorHandler): void;
356
+ /** 注册任务完成事件处理函数。 */
357
+ onDone(handler: XunleiOnDoneHandler): void;
358
+ }
359
+ /** 打开内嵌网页时的窗口配置。 */
360
+ export interface WebviewOpenOptions {
361
+ /**
362
+ * 是否隐藏网页窗口,默认为 false(显示窗口)。
363
+ * 非本地开发环境中,事件脚本打开的网页窗口会被强制隐藏。
364
+ */
365
+ headless?: boolean;
366
+ title?: string;
367
+ width?: number;
368
+ height?: number;
369
+ userAgent?: string;
370
+ }
371
+ export interface WebviewGotoOptions {
372
+ timeoutMs?: number;
373
+ waitUntil?: "load" | "domcontentloaded";
374
+ }
375
+ export interface WebviewClickOptions {
376
+ delay?: number;
377
+ }
378
+ export interface WebviewTypeOptions {
379
+ delay?: number;
380
+ }
381
+ export interface WebviewWaitOptions {
382
+ timeoutMs?: number;
383
+ pollIntervalMs?: number;
384
+ }
385
+ export interface WebviewWaitForSelectorOptions extends WebviewWaitOptions {
386
+ visible?: boolean;
387
+ hidden?: boolean;
388
+ }
389
+ export interface WebviewCookie {
390
+ name: string;
391
+ value: string;
392
+ domain?: string;
393
+ path?: string;
394
+ expires?: string | number | Date;
395
+ secure?: boolean;
396
+ httpOnly?: boolean;
397
+ }
398
+ export type WebviewExecutable<T = unknown> = string | ((...args: unknown[]) => T | Promise<T>);
399
+ export interface WebviewPage {
400
+ addInitScript(script: string): Promise<void>;
401
+ goto(url: string, opts?: WebviewGotoOptions): Promise<void>;
402
+ execute<T = unknown>(scriptOrFn: WebviewExecutable<T>, ...args: unknown[]): Promise<T>;
403
+ focus(selector: string): Promise<void>;
404
+ click(selector: string, opts?: WebviewClickOptions): Promise<void>;
405
+ type(selector: string, text: string, opts?: WebviewTypeOptions): Promise<void>;
406
+ waitForSelector(selector: string, opts?: WebviewWaitForSelectorOptions): Promise<boolean>;
407
+ waitForFunction<T = unknown>(scriptOrFn: WebviewExecutable<T>, ...args: unknown[]): Promise<T | null>;
408
+ getCookies(): Promise<WebviewCookie[]>;
409
+ setCookie(cookie: WebviewCookie): Promise<void>;
410
+ deleteCookie(cookie: WebviewCookie): Promise<void>;
411
+ clearCookies(): Promise<void>;
412
+ url(): Promise<string>;
413
+ content(): Promise<string>;
414
+ close(): Promise<void>;
415
+ }
416
+ export interface XunleiRuntimeWebview {
417
+ /** 检查内嵌网页能力是否可用。 */
418
+ isAvailable(): Promise<boolean>;
419
+ /** 打开内嵌网页并返回页面操作接口。 */
420
+ open(opts?: WebviewOpenOptions): Promise<WebviewPage>;
421
+ }
422
+ export interface BlobOpenRequest {
423
+ /** 起始字节偏移量,包含该位置的字节。 */
424
+ offset: number;
425
+ /** 结束字节偏移量,包含该位置的字节;未指定结束位置时为 -1。 */
426
+ end: number;
427
+ }
428
+ export type BlobOpener = (request: BlobOpenRequest) => ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
429
+ export interface BlobObjectURLOptions {
430
+ /** 本地 HTTP 服务返回的媒体类型(MIME)。 */
431
+ contentType?: string;
432
+ /** 数据源总大小,单位为字节;启用字节范围请求(range 为 true)时必填。 */
433
+ size?: number;
434
+ /** 数据源是否支持字节范围请求。 */
435
+ range?: boolean;
436
+ }
437
+ export interface XunleiRuntimeBlob {
438
+ /** 为二进制数据对象或按需打开的数据流创建本地 HTTP 地址。 */
439
+ createObjectURL(source: Blob | BlobOpener, options?: BlobObjectURLOptions): Promise<string>;
440
+ /** 撤销此前由 createObjectURL 创建的地址。 */
441
+ revokeObjectURL(url: string): Promise<void>;
442
+ }
443
+ export interface XunleiRuntime {
444
+ blob: XunleiRuntimeBlob;
445
+ webview: XunleiRuntimeWebview;
446
+ }
447
+ export interface Xunlei {
448
+ /** 微应用信息(只读)。 */
449
+ info: XunleiInfo;
450
+ /** 日志接口。 */
451
+ logger: XunleiLogger;
452
+ /** 设置接口。 */
453
+ settings: XunleiSettings;
454
+ /** 键值对存储接口。 */
455
+ storage: XunleiStorage;
456
+ /** 任务管理接口。 */
457
+ tasks: XunleiMiniappTasks;
458
+ /** 事件注册接口。 */
459
+ events: XunleiEvents;
460
+ /** 运行时能力接口。 */
461
+ runtime: XunleiRuntime;
462
+ }
463
+ export interface MiniappInfo {
464
+ id: string;
465
+ name: string;
466
+ version: string;
467
+ root?: string;
468
+ entry?: MiniappEntryManifest;
469
+ dev?: boolean;
470
+ }
471
+ export type MessageError = Error;
472
+ /** 用户可见错误的构造接口;微应用抛出此类错误后,宿主可通过轻提示展示错误消息。 */
473
+ export interface MessageErrorConstructor {
474
+ new (message?: string): MessageError;
475
+ (message?: string): MessageError;
476
+ }
477
+ declare global {
478
+ const xunlei: Xunlei;
479
+ const MessageError: MessageErrorConstructor;
480
+ }
481
+ //#endregion
482
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@xunlei-open/miniapp-types",
3
+ "version": "0.1.1-beta.0",
4
+ "description": "TypeScript definitions for the Xunlei Miniapp manifest and runtime APIs",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.mts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.mts",
13
+ "default": "./dist/index.mjs"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md"
24
+ ],
25
+ "sideEffects": false,
26
+ "keywords": [
27
+ "xunlei",
28
+ "miniapp",
29
+ "types",
30
+ "typescript"
31
+ ],
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/xunlei-open/miniapp-devkit.git",
36
+ "directory": "packages/miniapp-types"
37
+ },
38
+ "bugs": {
39
+ "url": "https://github.com/xunlei-open/miniapp-devkit/issues"
40
+ },
41
+ "homepage": "https://github.com/xunlei-open/miniapp-devkit#readme",
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "engines": {
46
+ "node": ">=20.19.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsdown",
50
+ "dev": "tsdown --watch",
51
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
52
+ "check": "tsc --noEmit"
53
+ }
54
+ }