@skillbuilder/miniapp-simulator 0.0.0-beta-20261023084421
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/README.md +214 -0
- package/assets/phones/Nexus-5X.png +0 -0
- package/assets/phones/iPhone-14ProMax.png +0 -0
- package/assets/rednote-preview/cover/homebar-1439.jpg +0 -0
- package/assets/rednote-preview/cover/homebar-1679.jpg +0 -0
- package/assets/rednote-preview/cover/homebar-1919.jpg +0 -0
- package/assets/rednote-preview/cover/homebar-2284.jpg +0 -0
- package/assets/rednote-preview/cover/homebar-2285.jpg +0 -0
- package/assets/rednote-preview/cover/like.png +0 -0
- package/assets/rednote-preview/cover/play.png +0 -0
- package/assets/rednote-preview/cover/topbar-1439.jpg +0 -0
- package/assets/rednote-preview/cover/topbar-1679.jpg +0 -0
- package/assets/rednote-preview/cover/topbar-1919.jpg +0 -0
- package/assets/rednote-preview/cover/topbar-2284.jpg +0 -0
- package/assets/rednote-preview/cover/topbar-2285.jpg +0 -0
- package/assets/workbench/index.html +77 -0
- package/dist/sw/miniapp-simulator-service-worker.js +855 -0
- package/dist/sw/miniapp-simulator-service-worker.min.js +1 -0
- package/docs/consumer-guide.md +143 -0
- package/docs/electron-review.md +21 -0
- package/docs/external-cli-workbench.md +197 -0
- package/docs/file-system-design.md +334 -0
- package/docs/host-external-api.md +235 -0
- package/docs/iframe-service-worker.md +190 -0
- package/docs/local-dev.md +106 -0
- package/docs/npm-integration-verification.md +45 -0
- package/docs/remote-architecture.md +403 -0
- package/docs/remote-load-observability.md +268 -0
- package/docs/remote-usage.md +371 -0
- package/docs/request-design.md +247 -0
- package/docs/sdk-usage.md +260 -0
- package/docs/server-playground-https-debugging.md +150 -0
- package/docs/storage-api-design.md +275 -0
- package/docs/tracker.md +339 -0
- package/lib/business-line-CMb3ehRn.mjs +15 -0
- package/lib/client-BZtD2VtP.mjs +772 -0
- package/lib/index-BW85h7kT.mjs +505 -0
- package/lib/index.js +10686 -0
- package/lib/preload/webview-preload.js +37 -0
- package/lib/remote-client.js +11 -0
- package/lib/types/business-line.d.ts +7 -0
- package/lib/types/capabilities/constants.d.ts +28 -0
- package/lib/types/capabilities/csp-snippet.d.ts +32 -0
- package/lib/types/capabilities/launch-options.d.ts +7 -0
- package/lib/types/capabilities/performance-policy.d.ts +5 -0
- package/lib/types/capabilities/security-head-snippet.d.ts +20 -0
- package/lib/types/capabilities/security.d.ts +25 -0
- package/lib/types/capabilities/style-snippet.d.ts +2 -0
- package/lib/types/core/controllers/game-playtest.d.ts +9 -0
- package/lib/types/core/controllers/gesture.d.ts +8 -0
- package/lib/types/core/controllers/host-api.d.ts +19 -0
- package/lib/types/core/controllers/index.d.ts +11 -0
- package/lib/types/core/controllers/inspector.d.ts +20 -0
- package/lib/types/core/controllers/note-preview.d.ts +9 -0
- package/lib/types/core/controllers/permission-sheet.d.ts +7 -0
- package/lib/types/core/controllers/widget-cover.d.ts +12 -0
- package/lib/types/core/lifecycle.d.ts +7 -0
- package/lib/types/core/options.d.ts +33 -0
- package/lib/types/core/simulator.d.ts +9 -0
- package/lib/types/errors.d.ts +11 -0
- package/lib/types/event-bus.d.ts +15 -0
- package/lib/types/gesture/host-bus.d.ts +113 -0
- package/lib/types/gesture/index.d.ts +27 -0
- package/lib/types/gesture/plugins/double-tap.d.ts +10 -0
- package/lib/types/gesture/plugins/index.d.ts +27 -0
- package/lib/types/gesture/plugins/long-press.d.ts +13 -0
- package/lib/types/gesture/plugins/multi-touch-hint.d.ts +11 -0
- package/lib/types/gesture/plugins/multi-touch-switch.d.ts +18 -0
- package/lib/types/gesture/plugins/selection-disabler.d.ts +11 -0
- package/lib/types/gesture/plugins/tap.d.ts +11 -0
- package/lib/types/gesture/plugins/touch-emitter.d.ts +11 -0
- package/lib/types/gesture/plugins/wheel-scroll.d.ts +11 -0
- package/lib/types/gesture/receiver-runtime.d.ts +10 -0
- package/lib/types/gesture/receiver-runtime.impl.d.ts +6 -0
- package/lib/types/gesture/touch-cursor.d.ts +78 -0
- package/lib/types/gesture/touch-dot.d.ts +12 -0
- package/lib/types/gesture/types.d.ts +206 -0
- package/lib/types/host/shadow-host.d.ts +40 -0
- package/lib/types/index.d.ts +49 -0
- package/lib/types/injection/guest-log-mark.d.ts +7 -0
- package/lib/types/injection/head-builder.d.ts +4 -0
- package/lib/types/injection/index.d.ts +19 -0
- package/lib/types/injection/modules/console-forward.d.ts +2 -0
- package/lib/types/injection/modules/gesture.d.ts +6 -0
- package/lib/types/injection/modules/inspector-guest-runtime.d.ts +5 -0
- package/lib/types/injection/modules/inspector-pause-runtime.d.ts +6 -0
- package/lib/types/injection/modules/inspector.d.ts +8 -0
- package/lib/types/injection/modules/jsapi-channel.d.ts +9 -0
- package/lib/types/injection/modules/jsapi.d.ts +22 -0
- package/lib/types/injection/modules/render-done.d.ts +2 -0
- package/lib/types/injection/modules/resource-guard.d.ts +7 -0
- package/lib/types/injection/modules/scroll-containment.d.ts +3 -0
- package/lib/types/injection/modules/security.d.ts +3 -0
- package/lib/types/injection/modules/widget-snapshot.d.ts +13 -0
- package/lib/types/injection/preload-builder.d.ts +41 -0
- package/lib/types/injection/registry.d.ts +20 -0
- package/lib/types/injection/types.d.ts +43 -0
- package/lib/types/inspector/host-inspector.d.ts +108 -0
- package/lib/types/inspector/index.d.ts +8 -0
- package/lib/types/inspector/selector.d.ts +18 -0
- package/lib/types/native-ui/devtools/CapabilitiesView.d.ts +18 -0
- package/lib/types/native-ui/devtools/DevtoolsPanel.d.ts +24 -0
- package/lib/types/native-ui/devtools/LogsView.d.ts +17 -0
- package/lib/types/native-ui/devtools/dom.d.ts +40 -0
- package/lib/types/native-ui/devtools/index.d.ts +19 -0
- package/lib/types/native-ui/devtools/log-entry.d.ts +8 -0
- package/lib/types/native-ui/devtools/shortcut.d.ts +12 -0
- package/lib/types/native-ui/devtools/tokens.d.ts +14 -0
- package/lib/types/native-ui/devtools/types.d.ts +51 -0
- package/lib/types/native-ui/index.d.ts +17 -0
- package/lib/types/native-ui/note-publish/defaults.d.ts +40 -0
- package/lib/types/native-ui/note-publish/index.d.ts +2 -0
- package/lib/types/native-ui/note-publish/miniapp-note-publish.d.ts +15 -0
- package/lib/types/native-ui/note-publish/note-publish-host.d.ts +15 -0
- package/lib/types/native-ui/note-publish/view-data.d.ts +21 -0
- package/lib/types/native-ui/permission-sheet/defaults.d.ts +12 -0
- package/lib/types/native-ui/permission-sheet/index.d.ts +4 -0
- package/lib/types/native-ui/permission-sheet/miniapp-permission-sheet.d.ts +19 -0
- package/lib/types/native-ui/permission-sheet/permission-sheet-host.d.ts +23 -0
- package/lib/types/native-ui/permission-sheet/types.d.ts +8 -0
- package/lib/types/native-ui/rednote-preview/chrome-tone.d.ts +44 -0
- package/lib/types/native-ui/rednote-preview/defaults.d.ts +30 -0
- package/lib/types/native-ui/rednote-preview/half-sheet-drag.d.ts +61 -0
- package/lib/types/native-ui/rednote-preview/index.d.ts +2 -0
- package/lib/types/native-ui/rednote-preview/register.d.ts +7 -0
- package/lib/types/native-ui/rednote-preview/styles.d.ts +4 -0
- package/lib/types/native-ui/rednote-preview/xhs-note-detail-shell.d.ts +70 -0
- package/lib/types/native-ui/rednote-preview/xhs-note-half-sheet.d.ts +100 -0
- package/lib/types/native-ui/rednote-preview/xhs-profile-shell.d.ts +31 -0
- package/lib/types/native-ui/toast/frame-toast-host.d.ts +18 -0
- package/lib/types/native-ui/toast/index.d.ts +19 -0
- package/lib/types/presets.d.ts +11 -0
- package/lib/types/remote/client.d.ts +89 -0
- package/lib/types/remote/jsapi-config.d.ts +9 -0
- package/lib/types/remote/load-timing.d.ts +46 -0
- package/lib/types/remote/protocol.d.ts +160 -0
- package/lib/types/remote/review-launch.d.ts +6 -0
- package/lib/types/remote/runtime-entry.d.ts +1 -0
- package/lib/types/remote/runtime.d.ts +14 -0
- package/lib/types/remote/simulator-prompt.d.ts +9 -0
- package/lib/types/remote/widget-snapshot-guest-runtime.d.ts +1 -0
- package/lib/types/remote-client.d.ts +5 -0
- package/lib/types/renderer/base.d.ts +8 -0
- package/lib/types/renderer/content-host/iframe-content-host.d.ts +83 -0
- package/lib/types/renderer/content-host/index.d.ts +3 -0
- package/lib/types/renderer/content-host/types.d.ts +89 -0
- package/lib/types/renderer/content-host/webview-content-host.d.ts +53 -0
- package/lib/types/renderer/iframe.d.ts +93 -0
- package/lib/types/renderer/index.d.ts +2 -0
- package/lib/types/renderer/rednote-shell.d.ts +73 -0
- package/lib/types/renderer/webview.d.ts +59 -0
- package/lib/types/runtime/context.d.ts +31 -0
- package/lib/types/runtime/jsapi-modules/context.d.ts +19 -0
- package/lib/types/runtime/jsapi-modules/filesystem.d.ts +19 -0
- package/lib/types/runtime/jsapi-modules/index.d.ts +9 -0
- package/lib/types/runtime/jsapi-modules/interaction.d.ts +4 -0
- package/lib/types/runtime/jsapi-modules/location.d.ts +3 -0
- package/lib/types/runtime/jsapi-modules/media.d.ts +13 -0
- package/lib/types/runtime/jsapi-modules/network.d.ts +3 -0
- package/lib/types/runtime/jsapi-modules/storage.d.ts +26 -0
- package/lib/types/runtime/jsapi-modules/system.d.ts +4 -0
- package/lib/types/runtime/jsapi-modules/types.d.ts +21 -0
- package/lib/types/runtime/jsapi-modules/window-info.d.ts +43 -0
- package/lib/types/runtime/request/host-request.d.ts +13 -0
- package/lib/types/runtime/request/request-manager-frame.d.ts +29 -0
- package/lib/types/runtime/request/request-runtime.d.ts +26 -0
- package/lib/types/runtime/request/request-types.d.ts +26 -0
- package/lib/types/runtime/request/sse-text-framer.d.ts +16 -0
- package/lib/types/seal-config.d.ts +134 -0
- package/lib/types/sw/index.d.ts +9 -0
- package/lib/types/sw/parse-raw.d.ts +34 -0
- package/lib/types/sw/protocol.d.ts +17 -0
- package/lib/types/sw/served-entry.d.ts +9 -0
- package/lib/types/sw/service-worker-content-host.d.ts +11 -0
- package/lib/types/sw/service-worker-host.d.ts +73 -0
- package/lib/types/sw/service-worker-renderer.d.ts +10 -0
- package/lib/types/sw/worker/fs-codec.d.ts +23 -0
- package/lib/types/sw/worker/fs-ops.d.ts +22 -0
- package/lib/types/sw/worker/fs-store.d.ts +29 -0
- package/lib/types/sw/worker/globals.d.ts +49 -0
- package/lib/types/sw/worker/main.d.ts +6 -0
- package/lib/types/sw/worker/mime.d.ts +2 -0
- package/lib/types/sw/worker/mount-store.d.ts +43 -0
- package/lib/types/sw/worker/paths.d.ts +4 -0
- package/lib/types/sw/worker/serve.d.ts +13 -0
- package/lib/types/tracker/constants.d.ts +14 -0
- package/lib/types/tracker/default-tracker.d.ts +19 -0
- package/lib/types/tracker/index.d.ts +70 -0
- package/lib/types/transport/bridge-protocol.d.ts +78 -0
- package/lib/types/transport/iframe-transport.d.ts +39 -0
- package/lib/types/transport/index.d.ts +14 -0
- package/lib/types/transport/jsapi-bridge-messages.d.ts +36 -0
- package/lib/types/transport/types.d.ts +48 -0
- package/lib/types/transport/webview-transport.d.ts +52 -0
- package/lib/types/types/events.d.ts +130 -0
- package/lib/types/types/index.d.ts +11 -0
- package/lib/types/types/inspector.d.ts +172 -0
- package/lib/types/types/jsapi.d.ts +18 -0
- package/lib/types/types/options.d.ts +844 -0
- package/lib/types/types/renderer.d.ts +145 -0
- package/lib/types/utils/ancestor-scroll.d.ts +11 -0
- package/lib/types/utils/error-svg.d.ts +12 -0
- package/lib/types/utils/frameless-shell.d.ts +114 -0
- package/lib/types/utils/miniapp-chrome-svg.d.ts +47 -0
- package/lib/types/utils/package-constants.d.ts +8 -0
- package/lib/types/utils/screenshot.d.ts +14 -0
- package/lib/types/utils/simulator-pc-guard.d.ts +10 -0
- package/lib/types/utils/stage-fit.d.ts +6 -0
- package/lib/types/utils/touch-emulate.d.ts +26 -0
- package/lib/types/utils/zip-entry.d.ts +13 -0
- package/lib/types/workbench/index.d.ts +63 -0
- package/lib/types/workbench/preview-transition.d.ts +8 -0
- package/lib/types/workbench/server/artifact.d.ts +8 -0
- package/lib/types/workbench/server/index.d.ts +19 -0
- package/lib/types/workbench/server/watch.d.ts +6 -0
- package/lib/types/workbench/view.d.ts +36 -0
- package/lib/workbench-server.mjs +183 -0
- package/lib/workbench.js +1404 -0
- package/package.json +63 -0
- package/scripts/mock-cli-dev.mjs +52 -0
|
@@ -0,0 +1,844 @@
|
|
|
1
|
+
import type { MiniAppCapability } from '../seal-config';
|
|
2
|
+
import type { MiniAppMountTarget } from '../host/shadow-host';
|
|
3
|
+
import type { MiniAppPermissionKind, MiniAppPermissionSheetResult } from '../native-ui/permission-sheet/types';
|
|
4
|
+
import type { MiniAppEventHandler, MiniAppEventName } from './events';
|
|
5
|
+
import type { MiniAppInspectorController } from './inspector';
|
|
6
|
+
import type { GestureDispatchInput, GestureDispatchResult } from '../gesture/types';
|
|
7
|
+
export type { GestureDispatchAction, GestureDispatchInput, GestureDispatchResult } from '../gesture/types';
|
|
8
|
+
/**
|
|
9
|
+
* 配置与运行态类型(原 types.ts 段落 1)。
|
|
10
|
+
*/
|
|
11
|
+
export type MiniAppRendererType = 'webview' | 'iframe-service-worker';
|
|
12
|
+
/**
|
|
13
|
+
* `renderer: "iframe-service-worker"` 模式的配置。
|
|
14
|
+
*
|
|
15
|
+
* 该模式用 Service Worker 把解压后的小工具文件当「同源虚拟服务器」按真实路径
|
|
16
|
+
* (`/miniapp-simulator/<id>/index.html`)提供,iframe 以真实 URL 直连,相对路径 / ESM / fetch /
|
|
17
|
+
* `import.meta.url` / Worker 原生可用,无需内联改写。
|
|
18
|
+
*
|
|
19
|
+
* 远程 `appUrl`:当 `appUrl` 是**跨域 http(s) 远程链接**时,本模式会自动把它也接入 SW 代理——
|
|
20
|
+
* 拉取远程入口 HTML 挂载为同源虚拟入口,iframe 加载同源 `/miniapp-simulator/<id>/...`,子资源由
|
|
21
|
+
* SW 回源到远程。如此浏览器视文档为同源:自然绕过远程站点 `X-Frame-Options` / `frame-ancestors`,
|
|
22
|
+
* 注入(seal/jsapi/render-done) 与 CSP 照常生效。**前提:远程服务端必须开 CORS**
|
|
23
|
+
* (返回 `Access-Control-Allow-Origin`)以便读取入口 HTML。
|
|
24
|
+
*
|
|
25
|
+
* SW 作用域默认为 `/miniapp-simulator/`。SW 脚本必须由消费方自托管在**同源 http(s)**
|
|
26
|
+
* 路径(不能跨域 / blob 注册);远程 Runtime 可通过 `scope` 把所有路径收敛在
|
|
27
|
+
* `/simulator/*`下。若脚本路径未覆盖该 scope,需在脚本响应头加 `Service-Worker-Allowed`。
|
|
28
|
+
* 需配置 `scriptUrl` 且运行在支持 SW 的安全上下文;注册 / 挂载失败时通过 `error` 事件暴露。
|
|
29
|
+
*/
|
|
30
|
+
export interface MiniAppServiceWorkerOptions {
|
|
31
|
+
/**
|
|
32
|
+
* SW 脚本 URL,相对当前 Runtime 页面解析。
|
|
33
|
+
* 远程模式下由模拟器服务注入,直接使用与 Runtime 同一 release 的 SW。
|
|
34
|
+
*/
|
|
35
|
+
scriptUrl: string;
|
|
36
|
+
/**
|
|
37
|
+
* SW scope,默认 `/miniapp-simulator/`。必须是同源绝对 pathname,且以 `/` 结尾。
|
|
38
|
+
* 托管 Runtime 通常传 `/simulator/app/`,使虚拟文件也落在统一网关前缀内。
|
|
39
|
+
*/
|
|
40
|
+
scope?: string;
|
|
41
|
+
/**
|
|
42
|
+
* 由托管 Runtime 注入的外层宿主 origin,仅用于生成虚拟 HTML 的
|
|
43
|
+
* `frame-ancestors`。普通 SDK 接入无需配置。
|
|
44
|
+
*/
|
|
45
|
+
frameAncestors?: string[];
|
|
46
|
+
/** 等待 MOUNT ACK 的超时(ms),超时视为挂载失败经 `error` 事件暴露;默认 5000。 */
|
|
47
|
+
mountTimeout?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* JS-API 注入模式:
|
|
51
|
+
* - `auto`(默认):自动注入;若检测到原 HTML 已自带 jsapi(meta 显式声明或 script 引入)则跳过
|
|
52
|
+
* - `external`:强制不注入(业务自管 jsapi 引入)
|
|
53
|
+
* - `off`:完全不注入,连 `<base href>` 都不加(仅用于不依赖 jsapi 的纯 H5 场景)
|
|
54
|
+
*/
|
|
55
|
+
export type JsApiInjectionMode = 'auto' | 'external' | 'off';
|
|
56
|
+
/**
|
|
57
|
+
* Host API handler 入参:jsapi 调用解析后的协议字段。
|
|
58
|
+
* 与小工具 jsapi SDK 的 bridge 消息形态保持一致。
|
|
59
|
+
*/
|
|
60
|
+
export interface MiniAppHostApiRequest {
|
|
61
|
+
/** jsapi event 名(如 `share` / `getUserInfo`) */
|
|
62
|
+
event: string;
|
|
63
|
+
/** sdk 传给 invoke 的业务参数(不含 success/fail/complete) */
|
|
64
|
+
message: Record<string, unknown>;
|
|
65
|
+
/** callbackId,可用于自定义异步回调时序 */
|
|
66
|
+
callbackId: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Host API handler 返回的"业务数据"会被 simulator 包装成 `{ code: 0, data }` 回写。
|
|
70
|
+
* 抛错(同步或 reject)将被视为失败,错误对象可通过 `code` 指定错误码。
|
|
71
|
+
*/
|
|
72
|
+
export type MiniAppHostApiHandler = (request: MiniAppHostApiRequest) => unknown | Promise<unknown>;
|
|
73
|
+
/** 宿主请求适配器接收的统一请求参数,与具体 HTTP 库无关。 */
|
|
74
|
+
export interface MiniAppHostRequestOptions {
|
|
75
|
+
url: string;
|
|
76
|
+
method: string;
|
|
77
|
+
header?: Record<string, string>;
|
|
78
|
+
data?: unknown;
|
|
79
|
+
responseType: 'text';
|
|
80
|
+
enableChunked: boolean;
|
|
81
|
+
signal: AbortSignal;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 宿主请求适配器返回的统一响应。宿主负责把 `@xhs/launcher`、XHR 或其他请求库
|
|
85
|
+
* 的响应转换为该结构;流式响应可把 `data` 设为 ReadableStream。
|
|
86
|
+
*/
|
|
87
|
+
export interface MiniAppHostRequestResponse {
|
|
88
|
+
statusCode: number;
|
|
89
|
+
header?: Record<string, string>;
|
|
90
|
+
data?: unknown;
|
|
91
|
+
}
|
|
92
|
+
/** 宿主注入的通用请求适配器;不包含 taskId 或任何 JS Bridge 事件概念。 */
|
|
93
|
+
export type MiniAppHostRequest = (options: MiniAppHostRequestOptions) => MiniAppHostRequestResponse | Promise<MiniAppHostRequestResponse>;
|
|
94
|
+
/**
|
|
95
|
+
* 只改内置占位行为的 toast 文案,不接管 api 逻辑。
|
|
96
|
+
* 调用时弹出该文案并回成功(`{ code: 0 }`)。
|
|
97
|
+
*/
|
|
98
|
+
export interface MiniAppHostApiStub {
|
|
99
|
+
toast: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* `hostApi` 单个 event 的定制项:
|
|
103
|
+
* - 传函数 → 宿主完整接管该 api 的行为
|
|
104
|
+
* - 传 `{ toast }` → 沿用内置占位,仅替换提示文案
|
|
105
|
+
*/
|
|
106
|
+
export type MiniAppHostApiEntry = MiniAppHostApiHandler | MiniAppHostRequest | MiniAppHostApiStub;
|
|
107
|
+
export type MiniAppUnsupportedJsApiBehavior = {
|
|
108
|
+
type: 'toast';
|
|
109
|
+
message: string;
|
|
110
|
+
} | {
|
|
111
|
+
type: 'alert';
|
|
112
|
+
message: string;
|
|
113
|
+
};
|
|
114
|
+
export interface MiniAppJsApiOptions {
|
|
115
|
+
/**
|
|
116
|
+
* 整体 jsapi 注入是否启用,默认 `true`。
|
|
117
|
+
* 关闭后既不会注入 stub,也不会注入 jsapi UMD,iframe 内表现与原始 H5 一致。
|
|
118
|
+
*/
|
|
119
|
+
enabled?: boolean;
|
|
120
|
+
/** 注入模式,详见 {@link JsApiInjectionMode};默认 `auto` */
|
|
121
|
+
mode?: JsApiInjectionMode;
|
|
122
|
+
/** jsapi 调用的回调延迟(毫秒),用于模拟端到端往返;默认 60 */
|
|
123
|
+
defaultDelay?: number;
|
|
124
|
+
/** 未支持 JSAPI 的统一提示行为;远端 Runtime 可按业务线注入。 */
|
|
125
|
+
unsupportedBehavior?: MiniAppUnsupportedJsApiBehavior;
|
|
126
|
+
}
|
|
127
|
+
export interface NormalizedMiniAppJsApiOptions {
|
|
128
|
+
enabled: boolean;
|
|
129
|
+
mode: JsApiInjectionMode;
|
|
130
|
+
defaultDelay: number;
|
|
131
|
+
unsupportedBehavior?: MiniAppUnsupportedJsApiBehavior;
|
|
132
|
+
}
|
|
133
|
+
export type MiniAppSimulatorStatus = 'idle' | 'loading' | 'ready' | 'error' | 'destroyed';
|
|
134
|
+
export interface MiniAppViewport {
|
|
135
|
+
width: number;
|
|
136
|
+
height: number;
|
|
137
|
+
}
|
|
138
|
+
export interface MiniAppPhoneFrameScreen {
|
|
139
|
+
x: number;
|
|
140
|
+
y: number;
|
|
141
|
+
width: number;
|
|
142
|
+
height: number;
|
|
143
|
+
/** 屏幕内容层的圆角半径(px),默认 42 */
|
|
144
|
+
cornerRadius?: number;
|
|
145
|
+
}
|
|
146
|
+
export interface MiniAppPhoneFrame {
|
|
147
|
+
id: string;
|
|
148
|
+
name: string;
|
|
149
|
+
imageUrl: string;
|
|
150
|
+
width: number;
|
|
151
|
+
height: number;
|
|
152
|
+
screen: MiniAppPhoneFrameScreen;
|
|
153
|
+
}
|
|
154
|
+
/** CSP 指令名。 */
|
|
155
|
+
export type CspDirective = 'default-src' | 'script-src' | 'style-src' | 'img-src' | 'font-src' | 'media-src' | 'connect-src' | 'base-uri' | 'object-src' | 'form-action' | 'frame-src' | 'worker-src' | 'child-src' | 'frame-ancestors';
|
|
156
|
+
/**
|
|
157
|
+
* 统一安全配置:控制 iframe 内被加载内容的运行时行为(CSP / seal 能力封印 / iframe sandbox / 权限策略)。
|
|
158
|
+
*
|
|
159
|
+
* 所有分隔符列表型配置一律用「token 合并表」表示——内部有默认表,消费方传 partial 覆盖:
|
|
160
|
+
* 增一项 / 删默认项(详见各字段)。取值有效的键按各自分隔符拼接成最终串。
|
|
161
|
+
*/
|
|
162
|
+
export interface MiniAppSecurityOptions {
|
|
163
|
+
/**
|
|
164
|
+
* iframe `sandbox` 标志表(`token → boolean`)。
|
|
165
|
+
* 默认 `allow-scripts/allow-forms/allow-modals/allow-downloads/allow-same-origin`。
|
|
166
|
+
* `true` 加一个 flag,`false` 删掉某个默认 flag(如需强隔离可传 `{ "allow-same-origin": false }`)。
|
|
167
|
+
*/
|
|
168
|
+
sandbox?: Record<string, boolean>;
|
|
169
|
+
/**
|
|
170
|
+
* iframe `allow`(Permissions Policy 委托)表:`feature → allowlist`。
|
|
171
|
+
* 默认 `{ camera: "*", microphone: "*", autoplay: "*" }`。
|
|
172
|
+
* 值:`"*"` 放行全部来源;`"self"` / `["self", "https://cdn.jsdelivr.net"]` 指定来源;`false` 删掉某个默认项。
|
|
173
|
+
*/
|
|
174
|
+
iframeAllow?: Record<string, string | string[] | boolean>;
|
|
175
|
+
/**
|
|
176
|
+
* 子文档 `<meta http-equiv="Permissions-Policy">` 表:`feature → allowlist`。默认全部传感器禁用(`=()`)。
|
|
177
|
+
* 值:`true` 放行全部(`feature=*`);`false` 禁用(`feature=()`);`"self"` / `["self", "https://cdn.jsdelivr.net"]` → `feature=(self "https://cdn.jsdelivr.net")`。
|
|
178
|
+
*/
|
|
179
|
+
permissionsPolicy?: Record<string, boolean | string | string[]>;
|
|
180
|
+
/**
|
|
181
|
+
* CSP 逐指令 token 表覆盖:`{ 'connect-src': { 'https://cdn.jsdelivr.net': true }, 'img-src': { 'data:': false } }`。
|
|
182
|
+
* `true` 加一个源/关键字,`false` 删掉某个默认 token。`'none'` 那几个指令锁死,忽略此处输入。
|
|
183
|
+
*/
|
|
184
|
+
cspDirectives?: Partial<Record<CspDirective, Record<string, boolean>>>;
|
|
185
|
+
/**
|
|
186
|
+
* seal 能力白名单(值为 `MiniAppCapability` 枚举字符串)。
|
|
187
|
+
* 不传 → seal 内部使用 DEFAULT_ALLOW;传数组(含空 `[]`)→ 严格按列表放开,未列出的全部封禁。
|
|
188
|
+
*/
|
|
189
|
+
sealAllow?: ReadonlyArray<MiniAppCapability>;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 归一化后的 security:各表已与默认表合并(形态仍与 raw 兼容,保证 `mergeOptions` 再归一化幂等)。
|
|
193
|
+
* 最终串(sandbox 属性 / iframe allow / permissions-policy / CSP)在消费处按需序列化。
|
|
194
|
+
*/
|
|
195
|
+
export interface NormalizedMiniAppSecurityOptions {
|
|
196
|
+
/** 合并后的 iframe `sandbox` 标志表(取值 `true` 的 flag 序列化为 sandbox 属性) */
|
|
197
|
+
sandbox: Record<string, boolean>;
|
|
198
|
+
/** 合并后的 iframe `allow` 表(feature → allowlist) */
|
|
199
|
+
iframeAllow: Record<string, string | string[] | boolean>;
|
|
200
|
+
/** 合并后的 Permissions-Policy 表(feature → allowlist) */
|
|
201
|
+
permissionsPolicy: Record<string, boolean | string | string[]>;
|
|
202
|
+
/** 合并后的 CSP 逐指令 token 表(全指令;拼串留到 snippet 处,需 appUrl 做内部增强) */
|
|
203
|
+
cspDirectives: Record<CspDirective, Record<string, boolean>>;
|
|
204
|
+
/** undefined = 走 seal 内置 DEFAULT_ALLOW;数组 = 显式覆盖 */
|
|
205
|
+
sealAllow?: ReadonlyArray<MiniAppCapability>;
|
|
206
|
+
}
|
|
207
|
+
export interface MiniAppReviewOptions {
|
|
208
|
+
collectConsole?: boolean;
|
|
209
|
+
collectNavigation?: boolean;
|
|
210
|
+
collectNetwork?: boolean;
|
|
211
|
+
enableScreenshot?: boolean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* 小应用运行期资源保护。默认按 renderer 总 JS heap 绝对水位熔断,且不改写浏览器内置 API。
|
|
215
|
+
* 浏览器只暴露 renderer/V8 isolate 级的 `performance.memory`,不是 iframe 独占内存;同进程
|
|
216
|
+
* 存在多个模拟器时,采样可能包含其他实例的内存,因此它是兜底熔断,不能替代 Electron
|
|
217
|
+
* webContents 级的独立内存监控。
|
|
218
|
+
*/
|
|
219
|
+
export interface MiniAppRuntimeLimits {
|
|
220
|
+
/** renderer 总 JS heap 绝对水位;false 关闭。默认 1 GiB。 */
|
|
221
|
+
maxHeapUsedBytes?: number | false;
|
|
222
|
+
}
|
|
223
|
+
export interface NormalizedMiniAppRuntimeLimits {
|
|
224
|
+
maxHeapUsedBytes: number | false;
|
|
225
|
+
heapSampleIntervalMs: number;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 将模拟器容器在指定边界元素内按比例缩放并水平居中(保持 layout 尺寸与 transform 后视觉一致,便于触摸坐标换算)。
|
|
229
|
+
* - 默认开启:无拖拽手柄时 100% 撑满 bounds(`scaleMultiplier: 1` + `capToBounds: true`)
|
|
230
|
+
* - `true`:使用默认边界为 shadow host 内 bounds
|
|
231
|
+
* - `false`:不启用自适应缩放
|
|
232
|
+
*/
|
|
233
|
+
export interface MiniAppStageFitOptions {
|
|
234
|
+
/** 可用区域参照元素,默认 shadow host 内 bounds */
|
|
235
|
+
bounds?: HTMLElement;
|
|
236
|
+
padding?: {
|
|
237
|
+
top?: number;
|
|
238
|
+
right?: number;
|
|
239
|
+
bottom?: number;
|
|
240
|
+
left?: number;
|
|
241
|
+
};
|
|
242
|
+
/** 相对「撑满 bounds」的比例再乘的系数;无拖拽手柄时默认 1,有手柄时默认 0.78 */
|
|
243
|
+
scaleMultiplier?: number;
|
|
244
|
+
minScaleMultiplier?: number;
|
|
245
|
+
maxScaleMultiplier?: number;
|
|
246
|
+
/** 是否在右上角显示拖拽缩放手柄,默认 false */
|
|
247
|
+
resizeHandle?: boolean;
|
|
248
|
+
/** 水平拖动灵敏度(每像素对应的 scaleMultiplier 增量),默认 0.004 */
|
|
249
|
+
dragSensitivity?: number;
|
|
250
|
+
/** 手柄相对 bounds 顶部的偏移(px),默认 22 */
|
|
251
|
+
handleTop?: number;
|
|
252
|
+
/** 容器相对 bounds 顶部的偏移(px),默认 18 */
|
|
253
|
+
contentTop?: number;
|
|
254
|
+
/** 最终 `transform: scale()` 的下限,默认 0.05 */
|
|
255
|
+
minScale?: number;
|
|
256
|
+
/** 最终 `transform: scale()` 的上限,默认不限制 */
|
|
257
|
+
maxScale?: number;
|
|
258
|
+
/**
|
|
259
|
+
* 在 bounds 内水平 + 垂直居中(`translate(-50%, -50%)` + `transform-origin: center`)。
|
|
260
|
+
* 无拖拽手柄时默认 true;有手柄时默认 false(顶部用 `contentTop`)。
|
|
261
|
+
*/
|
|
262
|
+
centerInBounds?: boolean;
|
|
263
|
+
/**
|
|
264
|
+
* 将显示比例限制在 padding 内「整页装入」的最大比例之内(不超过 `fitScale`),避免拖拽放大溢出视口。
|
|
265
|
+
* 无拖拽手柄时默认 true;有手柄时默认 false。
|
|
266
|
+
*/
|
|
267
|
+
capToBounds?: boolean;
|
|
268
|
+
}
|
|
269
|
+
export interface NormalizedMiniAppStageFitOptions {
|
|
270
|
+
bounds: HTMLElement;
|
|
271
|
+
padding: {
|
|
272
|
+
top: number;
|
|
273
|
+
right: number;
|
|
274
|
+
bottom: number;
|
|
275
|
+
left: number;
|
|
276
|
+
};
|
|
277
|
+
scaleMultiplier: number;
|
|
278
|
+
minScaleMultiplier: number;
|
|
279
|
+
maxScaleMultiplier: number;
|
|
280
|
+
resizeHandle: boolean;
|
|
281
|
+
dragSensitivity: number;
|
|
282
|
+
handleTop: number;
|
|
283
|
+
contentTop: number;
|
|
284
|
+
minScale: number;
|
|
285
|
+
maxScale: number;
|
|
286
|
+
centerInBounds: boolean;
|
|
287
|
+
capToBounds: boolean;
|
|
288
|
+
}
|
|
289
|
+
/** 模拟器内容模式:`fullscreen` 全屏(右侧滑入、返回键关闭) / `half` 半屏(下滑收起、上滑展开) */
|
|
290
|
+
export type MiniAppContentMode = 'fullscreen' | 'half';
|
|
291
|
+
/** 外壳模式:`rednote` 小红书笔记详情壳(默认) / `none` 无壳纯面板 */
|
|
292
|
+
export type MiniAppShellMode = 'rednote' | 'none';
|
|
293
|
+
/**
|
|
294
|
+
* 模拟器页面路由:
|
|
295
|
+
* - `note` 笔记页
|
|
296
|
+
* - `minitool` 小工具页(运行内容,默认全屏)
|
|
297
|
+
* - `profile` 个人页
|
|
298
|
+
*/
|
|
299
|
+
export type MiniAppSimulatorRoute = 'note' | 'minitool' | 'profile';
|
|
300
|
+
/** `redirectTo` 可选参数 */
|
|
301
|
+
export interface MiniAppRedirectOptions {
|
|
302
|
+
/** 仅 `route === "minitool"` 时生效:half 半屏 / full 全屏,默认 `full` */
|
|
303
|
+
sheetMode?: 'half' | 'full';
|
|
304
|
+
}
|
|
305
|
+
/** 小工具信息:笔记轮播尾卡 + 个人页「作品 → 小工具」卡片共用 */
|
|
306
|
+
export interface XhsWidgetCoverData {
|
|
307
|
+
/** 标题;不传默认「小工具模拟器」 */
|
|
308
|
+
title?: string;
|
|
309
|
+
/** 封面图 url / dataURL;不传用 SDK 自动截图结果(内部按 3:4 裁剪展示) */
|
|
310
|
+
cover?: string;
|
|
311
|
+
}
|
|
312
|
+
/** `simulator.widgetCover` 控制器:运行时更新小工具封面(笔记尾卡 + 个人页卡片两处生效,无需 reload) */
|
|
313
|
+
export interface MiniAppWidgetCoverController {
|
|
314
|
+
/** 部分字段更新(title / cover 单独覆盖) */
|
|
315
|
+
update(data: Partial<XhsWidgetCoverData>): void;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* 个人页用户信息(内部数据,非对外 API):由 hostApi `getUserInfo` 自动填充,
|
|
319
|
+
* 驱动个人页卡片作者行的头像 / 昵称。
|
|
320
|
+
*/
|
|
321
|
+
export interface XhsProfilePreviewData {
|
|
322
|
+
user?: XhsNotePreviewUser;
|
|
323
|
+
}
|
|
324
|
+
/** `screenShot` 失败码:not-loaded 未加载 / render-failed 渲染异常 / timeout 截图超时 / unsupported 环境不支持 */
|
|
325
|
+
export declare const MINIAPP_SCREENSHOT_ERROR_CODE: {
|
|
326
|
+
/** 小工具尚未加载(含占位态 / 不在小工具页) */
|
|
327
|
+
readonly notLoaded: "not-loaded";
|
|
328
|
+
/** 页面渲染异常,截图内容不可用 */
|
|
329
|
+
readonly renderFailed: "render-failed";
|
|
330
|
+
/** 截图超时 */
|
|
331
|
+
readonly timeout: "timeout";
|
|
332
|
+
/** 当前环境不支持截图 */
|
|
333
|
+
readonly unsupported: "unsupported";
|
|
334
|
+
};
|
|
335
|
+
export type MiniAppScreenShotErrorCode = (typeof MINIAPP_SCREENSHOT_ERROR_CODE)[keyof typeof MINIAPP_SCREENSHOT_ERROR_CODE];
|
|
336
|
+
/** `screenShot` 结果:成功携带 base64 dataURL,失败携带 code + reason */
|
|
337
|
+
export type MiniAppScreenShotResult = {
|
|
338
|
+
success: true;
|
|
339
|
+
/** 完整 dataURL(`data:image/png;base64,xxx`),可直接用于 `<img>` 或上传 */
|
|
340
|
+
base64: string;
|
|
341
|
+
width: number;
|
|
342
|
+
height: number;
|
|
343
|
+
/** auto = 部署成功后自动截图;manual = 宿主主动调用 `screenShot()` */
|
|
344
|
+
source: 'auto' | 'manual';
|
|
345
|
+
} | {
|
|
346
|
+
success: false;
|
|
347
|
+
code: MiniAppScreenShotErrorCode;
|
|
348
|
+
/** 人类可读的失败原因 */
|
|
349
|
+
reason: string;
|
|
350
|
+
};
|
|
351
|
+
export interface XhsNotePreviewUser {
|
|
352
|
+
avatar: string;
|
|
353
|
+
nickname: string;
|
|
354
|
+
}
|
|
355
|
+
export interface XhsNotePreviewImage {
|
|
356
|
+
url: string;
|
|
357
|
+
ratio?: number;
|
|
358
|
+
}
|
|
359
|
+
/** 笔记正文里的小工具入口卡片(点击「使用」唤起半屏预览) */
|
|
360
|
+
export interface XhsNoteAppCardData {
|
|
361
|
+
/** 卡片标题(小工具名称),默认「小工具模拟器」 */
|
|
362
|
+
name?: string;
|
|
363
|
+
/** 卡片副标题/描述 */
|
|
364
|
+
desc?: string;
|
|
365
|
+
/** 卡片左侧图标 URL;不传则用默认渐变占位 */
|
|
366
|
+
icon?: string;
|
|
367
|
+
}
|
|
368
|
+
export interface XhsNotePreviewData {
|
|
369
|
+
user: XhsNotePreviewUser;
|
|
370
|
+
title?: string;
|
|
371
|
+
descHtml?: string;
|
|
372
|
+
images?: XhsNotePreviewImage[];
|
|
373
|
+
cover?: XhsNotePreviewImage;
|
|
374
|
+
/** 聚焦小工具时展示的首页截图;不影响 1/2、2/2 笔记图片页。 */
|
|
375
|
+
widgetCover?: XhsNotePreviewImage;
|
|
376
|
+
noteType?: 'image' | 'video';
|
|
377
|
+
/** 笔记内的小工具入口卡片信息 */
|
|
378
|
+
appCard?: XhsNoteAppCardData;
|
|
379
|
+
}
|
|
380
|
+
export interface RednoteDetailSheetOptions {
|
|
381
|
+
/** 半屏占屏幕内容区高度比例,默认 0.85 */
|
|
382
|
+
heightRatio?: number;
|
|
383
|
+
/** 无 appUrl 时的占位文案 */
|
|
384
|
+
placeholderText?: string;
|
|
385
|
+
}
|
|
386
|
+
export interface NormalizedRednoteDetailSheetOptions {
|
|
387
|
+
heightRatio: number;
|
|
388
|
+
placeholderText: string;
|
|
389
|
+
}
|
|
390
|
+
export interface MiniAppNotePreviewController {
|
|
391
|
+
/** 更新壳层笔记数据(部分字段,未传字段保留当前值并与 SDK 默认兜底 merge) */
|
|
392
|
+
update(data: Partial<XhsNotePreviewData>): void;
|
|
393
|
+
/** 仅更新顶栏用户头像与昵称(运行时切换,无需 reload) */
|
|
394
|
+
updateUser(user: Partial<XhsNotePreviewUser>): void;
|
|
395
|
+
/** 仅更新笔记内小工具入口卡片(名称 / 描述 / 图标,运行时切换,无需 reload) */
|
|
396
|
+
updateAppCard(appCard: Partial<XhsNoteAppCardData>): void;
|
|
397
|
+
}
|
|
398
|
+
/** Visual Inspector 的可选运行时能力。默认只注入轻量场景桥,不改写页面调度器。 */
|
|
399
|
+
export interface MiniAppVisualInspectorOptions {
|
|
400
|
+
/**
|
|
401
|
+
* 是否注入游戏暂停运行时。开启后会从业务脚本执行前代理 RAF / timer,供圈选时冻结场景。
|
|
402
|
+
* 仅应由明确的 2D / 3D 游戏预览开启;普通小工具保持 false,避免改变调度行为。
|
|
403
|
+
*/
|
|
404
|
+
pauseRuntime?: boolean;
|
|
405
|
+
}
|
|
406
|
+
export interface NormalizedMiniAppVisualInspectorOptions {
|
|
407
|
+
pauseRuntime: boolean;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* 加载链路生命周期回调(option 级),等价于对应 `simulator.on(eventName, handler)`,
|
|
411
|
+
* 在实例创建时即绑定,便于在首帧加载前注册。
|
|
412
|
+
*/
|
|
413
|
+
export interface MiniAppLifecycleCallbacks {
|
|
414
|
+
/** 渲染容器初始化完成(renderer mount 之后、加载之前) */
|
|
415
|
+
onReady?: MiniAppEventHandler<'ready'>;
|
|
416
|
+
/** 即将开始加载(renderer.load 之前),可用于 .zip/url 加载前埋点 */
|
|
417
|
+
onBeforeLoad?: MiniAppEventHandler<'beforeLoad'>;
|
|
418
|
+
/** URL 加载完成(iframe/webview onload) */
|
|
419
|
+
onLoad?: MiniAppEventHandler<'load'>;
|
|
420
|
+
/** 小应用首屏渲染完毕(子文档首帧绘制后回报) */
|
|
421
|
+
onRenderDone?: MiniAppEventHandler<'renderDone'>;
|
|
422
|
+
onError?: MiniAppEventHandler<'error'>;
|
|
423
|
+
onNavigation?: MiniAppEventHandler<'navigation'>;
|
|
424
|
+
onConsole?: MiniAppEventHandler<'console'>;
|
|
425
|
+
onNetwork?: MiniAppEventHandler<'network'>;
|
|
426
|
+
onDestroy?: MiniAppEventHandler<'destroy'>;
|
|
427
|
+
}
|
|
428
|
+
export interface MiniAppSimulatorOptions extends MiniAppLifecycleCallbacks {
|
|
429
|
+
/** 页面切换回调(宿主调用 `redirectTo` 与模拟器内部跳转均触发) */
|
|
430
|
+
onRouterChange?: MiniAppEventHandler<'routerChange'>;
|
|
431
|
+
/** 截图结果回调(auto 自动截图与 manual 主动截图均触发) */
|
|
432
|
+
onScreenShot?: MiniAppEventHandler<'screenShot'>;
|
|
433
|
+
/**
|
|
434
|
+
* 挂载目标:CSS 选择器或 HTMLElement。SDK 会在其内部创建自己的宿主元素,
|
|
435
|
+
* 并默认以 Shadow DOM 隔离样式,仅渲染"干净的设备舞台"(手机本体)。
|
|
436
|
+
*/
|
|
437
|
+
mount: MiniAppMountTarget;
|
|
438
|
+
/** 是否启用 Shadow DOM 样式隔离,默认 `true` */
|
|
439
|
+
shadow?: boolean;
|
|
440
|
+
/**
|
|
441
|
+
* 可选的稳定 app 身份(如 projectId / miniappId / appId),作为运行期文件系统
|
|
442
|
+
* (writeTempFile 等)的持久化存储桶 key。**传入即持久化到 IndexedDB、跨会话可读**;
|
|
443
|
+
* 不传则以随机 mountId 为桶、仅当前会话内存有效。接入方一行 opt-in,无需层层下传。
|
|
444
|
+
*/
|
|
445
|
+
appId?: string;
|
|
446
|
+
/** 内容展示模式,默认 `fullscreen` */
|
|
447
|
+
contentMode?: MiniAppContentMode;
|
|
448
|
+
/**
|
|
449
|
+
* 外壳模式,默认 `rednote`(小红书笔记详情壳:状态栏 / 顶栏 / home indicator / 设备边框)。
|
|
450
|
+
* `none` 为无壳纯面板:不挂 rednote 壳层、不加设备边框圆角,内容直接铺满挂载区,
|
|
451
|
+
* 与「把 HTML 直接内嵌到 iframe」的裸预览效果一致。仅 iframe 渲染器生效。
|
|
452
|
+
*/
|
|
453
|
+
shell?: MiniAppShellMode;
|
|
454
|
+
/** Feed / Detail 壳层笔记数据 */
|
|
455
|
+
notePreview?: XhsNotePreviewData;
|
|
456
|
+
/** 小工具封面初始数据(笔记尾卡 + 个人页卡片两处生效) */
|
|
457
|
+
widgetCover?: XhsWidgetCoverData;
|
|
458
|
+
/** half / fullscreen 壳层共用的半屏配置 */
|
|
459
|
+
rednoteDetail?: RednoteDetailSheetOptions;
|
|
460
|
+
renderer?: MiniAppRendererType;
|
|
461
|
+
/** `renderer: "iframe-service-worker"` 模式的配置(消费方自托管 SW 脚本)。 */
|
|
462
|
+
serviceWorker?: MiniAppServiceWorkerOptions;
|
|
463
|
+
viewport?: MiniAppViewport;
|
|
464
|
+
device?: 'iphone-15-pro' | 'iphone-15-pro-max' | 'ipad-pro' | 'pc' | string;
|
|
465
|
+
/** 贴图手机外壳 id 或配置;默认 `false`(无贴图壳,保留标准深色圆角边框) */
|
|
466
|
+
phoneFrame?: string | MiniAppPhoneFrame | false;
|
|
467
|
+
query?: Record<string, string | number | boolean | undefined | null>;
|
|
468
|
+
review?: MiniAppReviewOptions;
|
|
469
|
+
/** 失控业务的运行期熔断配置。 */
|
|
470
|
+
runtimeLimits?: MiniAppRuntimeLimits;
|
|
471
|
+
timeout?: number;
|
|
472
|
+
/**
|
|
473
|
+
* 开启内置调试模式(默认 `false`,由模拟器开发者控制)。
|
|
474
|
+
* 开启后:
|
|
475
|
+
* - 各子系统输出 `console` 调试日志;
|
|
476
|
+
* - 支持 `Shift + Cmd/Ctrl + U` 快捷键在模拟器内唤起调试面板,
|
|
477
|
+
* 覆盖「能力管控(动态启停封印能力并重载)」与「运行日志 / 关键事件」。
|
|
478
|
+
*/
|
|
479
|
+
debug?: boolean;
|
|
480
|
+
/** 开启鼠标→触摸事件模拟,使桌面端鼠标操作还原真机 touch 行为(显示小手光标与触点圆点) */
|
|
481
|
+
touchEmulation?: boolean;
|
|
482
|
+
/** Visual Inspector 运行时能力;游戏暂停代理默认关闭。 */
|
|
483
|
+
visualInspector?: MiniAppVisualInspectorOptions;
|
|
484
|
+
/** 在父级 bounds 内自适应缩放;默认开启,可传 `false` 关闭或 `{ resizeHandle: true }` 启用手动拖拽缩放 */
|
|
485
|
+
stageFit?: boolean | MiniAppStageFitOptions;
|
|
486
|
+
/**
|
|
487
|
+
* 内置 jsapi 注入与 PC mock 行为。默认开启(auto 模式 + toast)。
|
|
488
|
+
* 传 `false` 等同于 `{ enabled: false }`。
|
|
489
|
+
*/
|
|
490
|
+
jsapi?: boolean | MiniAppJsApiOptions;
|
|
491
|
+
/**
|
|
492
|
+
* 统一安全配置:控制 iframe 内被加载内容的运行时行为(CSP / seal 封印 / iframe sandbox / 权限策略)。
|
|
493
|
+
* 各项均有默认、可逐项覆盖(token 合并表语义,见 {@link MiniAppSecurityOptions})。
|
|
494
|
+
*/
|
|
495
|
+
security?: MiniAppSecurityOptions;
|
|
496
|
+
/**
|
|
497
|
+
* 宿主能力 map —— 注入到 jsapi bridge。
|
|
498
|
+
*
|
|
499
|
+
* key 为能力名,value 为 {@link MiniAppHostApiEntry}:
|
|
500
|
+
* 传函数则宿主完整接管该 api;传 `{ toast }` 则沿用内置占位、仅替换提示文案。
|
|
501
|
+
* 等价于实例化后调用 `simulator.hostApi.set(event, entry)`。
|
|
502
|
+
*
|
|
503
|
+
* 优先级:某 event 注册了 entry → 用宿主定制,覆盖模拟器内置行为
|
|
504
|
+
* (如 `postNote` 默认「请前往真机调试」占位);未注册的 event 走模拟器内置能力。
|
|
505
|
+
* 按 event 逐个定制。私有 `xhsRequest` 会使用 `hostApi.request` 注入的统一
|
|
506
|
+
* 请求适配器;宿主只需适配所用 HTTP 库,无需理解 taskId 或 Bridge 事件。
|
|
507
|
+
*/
|
|
508
|
+
hostApi?: Record<string, MiniAppHostApiEntry>;
|
|
509
|
+
/**
|
|
510
|
+
* 全局事件订阅(埋点 / tracker)。等价于 `simulator.on('*', handler)`。
|
|
511
|
+
* 收到任意 simulator 事件(load/renderDone/error/navigation/...)都会触发。
|
|
512
|
+
*/
|
|
513
|
+
onEvent?: (event: MiniAppEventName, payload: unknown) => void;
|
|
514
|
+
/**
|
|
515
|
+
* 模拟器生命周期 Tracker。监听启动/加载/渲染/销毁等流程事件并上报。
|
|
516
|
+
* - `{ business_line }` → 内置默认上报(直接 POST 自定义打点到 APM 端点,可用 `endpoint` 覆盖)
|
|
517
|
+
* - 不传 / `false` → 不启用
|
|
518
|
+
*
|
|
519
|
+
* `business_line` 必填,用于区分使用模拟器的平台(`creator` / `audit`);
|
|
520
|
+
* 如需上报用户 ID,可提供 `getUserInfo`。
|
|
521
|
+
*/
|
|
522
|
+
tracker?: MiniAppTrackerInput;
|
|
523
|
+
}
|
|
524
|
+
export interface NormalizedMiniAppSimulatorOptions extends Omit<MiniAppSimulatorOptions, 'mount' | 'shadow' | 'stageFit' | 'jsapi' | 'rednoteDetail' | 'security' | 'inject' | 'runtimeLimits' | 'visualInspector' | keyof MiniAppLifecycleCallbacks> {
|
|
525
|
+
/** 渲染器实际挂载点(shadow host 内的 stage 元素) */
|
|
526
|
+
container: HTMLElement;
|
|
527
|
+
appUrl: string;
|
|
528
|
+
contentMode: MiniAppContentMode;
|
|
529
|
+
shell: MiniAppShellMode;
|
|
530
|
+
notePreview: XhsNotePreviewData;
|
|
531
|
+
profilePreview: XhsProfilePreviewData;
|
|
532
|
+
widgetCover: XhsWidgetCoverData;
|
|
533
|
+
rednoteDetail: NormalizedRednoteDetailSheetOptions;
|
|
534
|
+
renderer: MiniAppRendererType;
|
|
535
|
+
viewport: MiniAppViewport;
|
|
536
|
+
phoneFrame?: MiniAppPhoneFrame;
|
|
537
|
+
query: Record<string, string | number | boolean | undefined | null>;
|
|
538
|
+
review: Required<MiniAppReviewOptions>;
|
|
539
|
+
runtimeLimits: NormalizedMiniAppRuntimeLimits;
|
|
540
|
+
timeout: number;
|
|
541
|
+
debug: boolean;
|
|
542
|
+
touchEmulation: boolean;
|
|
543
|
+
visualInspector: NormalizedMiniAppVisualInspectorOptions;
|
|
544
|
+
stageFit: false | NormalizedMiniAppStageFitOptions;
|
|
545
|
+
jsapi: NormalizedMiniAppJsApiOptions;
|
|
546
|
+
security: NormalizedMiniAppSecurityOptions;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* 运行时 gesture 控制器,挂在 `simulator.gesture` 上。
|
|
550
|
+
*
|
|
551
|
+
* 当前 renderer 已挂载手势总线且 `touchEmulation: true` 时生效;其他场景 dispatch 会明确失败,
|
|
552
|
+
* plugin 管理方法仍按 renderer 能力生效。
|
|
553
|
+
* 业务可注册自定义 plugin 扩展宿主侧手势能力(例如"摇一摇"模拟、自定义双指轨迹等)。
|
|
554
|
+
* Plugin 接口见 `src/gesture/types` 中的 `GestureHostPlugin`(包内模块,非主入口导出)。
|
|
555
|
+
*/
|
|
556
|
+
export interface MiniAppGestureController {
|
|
557
|
+
/** 回放一段通用手势;坐标使用小应用 guest CSS 像素,由当前 renderer 负责换算。 */
|
|
558
|
+
dispatch(input: GestureDispatchInput): Promise<GestureDispatchResult>;
|
|
559
|
+
/** 注册或替换一个 plugin(按 name 去重;同名 plugin 会先 uninstall 再 install) */
|
|
560
|
+
use(plugin: GestureHostPluginLike): void;
|
|
561
|
+
/** 卸载一个 plugin,返回是否命中 */
|
|
562
|
+
remove(name: string): boolean;
|
|
563
|
+
/** 当前是否安装了某个 plugin */
|
|
564
|
+
has(name: string): boolean;
|
|
565
|
+
/** 当前所有 plugin 名称(顺序与注册顺序一致) */
|
|
566
|
+
list(): string[];
|
|
567
|
+
}
|
|
568
|
+
/** 受控的 `window.__GAME_TEST__` 调用面;不接受任意脚本字符串。 */
|
|
569
|
+
export interface MiniAppGamePlaytestController {
|
|
570
|
+
manifest(): Promise<unknown>;
|
|
571
|
+
snapshot(): Promise<unknown>;
|
|
572
|
+
act(action: Record<string, unknown>): Promise<unknown>;
|
|
573
|
+
step(ms: number): Promise<unknown>;
|
|
574
|
+
reset(seed?: number): Promise<unknown>;
|
|
575
|
+
/** 当前预览是否安装了 version=1 的游戏测试桥。 */
|
|
576
|
+
isAvailable(): Promise<boolean>;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Plugin 接口的最小骨架;详细定义见 `GestureHostPlugin`。
|
|
580
|
+
* 这里用结构化类型避免 types 文件直接依赖 gesture 模块。
|
|
581
|
+
*/
|
|
582
|
+
export interface GestureHostPluginLike {
|
|
583
|
+
readonly name: string;
|
|
584
|
+
install(ctx: unknown): void;
|
|
585
|
+
uninstall?(): void;
|
|
586
|
+
}
|
|
587
|
+
/** 宿主权限授权 Bottom Sheet(仅 iframe 渲染器) */
|
|
588
|
+
export interface MiniAppPermissionSheetController {
|
|
589
|
+
/**
|
|
590
|
+
* 展示授权弹窗。
|
|
591
|
+
* @param kinds 要展示的权限项;省略则使用 V1 入口写死的全量列表
|
|
592
|
+
*/
|
|
593
|
+
show(kinds?: MiniAppPermissionKind[]): Promise<MiniAppPermissionSheetResult>;
|
|
594
|
+
hide(): void;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* 运行时 host api 控制器,挂在 `simulator.hostApi` 上。
|
|
598
|
+
*
|
|
599
|
+
* 在 simulator load 之前/之后均可调用,下一次回调时生效。
|
|
600
|
+
* 与构造时的 `options.hostApi` 共用同一个 handler 池:构造时是声明式 map,
|
|
601
|
+
* 这里是命令式增删。
|
|
602
|
+
*/
|
|
603
|
+
export interface MiniAppHostApiController {
|
|
604
|
+
/** 注册或覆盖某个 event 的定制项(函数 or `{ toast }`) */
|
|
605
|
+
set(event: string, entry: MiniAppHostApiEntry): void;
|
|
606
|
+
/** 批量注册(与 `options.hostApi` 同语义) */
|
|
607
|
+
registerAll(map: Record<string, MiniAppHostApiEntry>): void;
|
|
608
|
+
/** 移除某个 event 的定制项,下次调用回落到模拟器内置能力 */
|
|
609
|
+
remove(event: string): void;
|
|
610
|
+
/** 清空所有定制项 */
|
|
611
|
+
clear(): void;
|
|
612
|
+
/** 是否已注册定制项 */
|
|
613
|
+
has(event: string): boolean;
|
|
614
|
+
/**
|
|
615
|
+
* 主动向小应用推送事件,触发 jsapi 的 `subscribe(method, ...)` 监听。
|
|
616
|
+
* 等价于真机宿主调用 `window.XHS_SDK_EVENTS_CALLBACKS({type:'events', method, payload})`。
|
|
617
|
+
*/
|
|
618
|
+
emit(method: string, payload?: unknown): void;
|
|
619
|
+
}
|
|
620
|
+
/** `simulator.loadZip()` 可接收的二进制来源。 */
|
|
621
|
+
export type MiniAppLoadZipSource = Blob | File | ArrayBuffer | Uint8Array;
|
|
622
|
+
/** `simulator.loadZip()` 可选注入的 JSZip 兼容对象(仅需静态 `loadAsync`)。 */
|
|
623
|
+
export interface MiniAppLoadZipJsZip {
|
|
624
|
+
loadAsync(input: Blob | ArrayBuffer | Uint8Array): Promise<unknown>;
|
|
625
|
+
}
|
|
626
|
+
/** `simulator.loadZip()` 返回的包内文件条目。 */
|
|
627
|
+
export interface MiniAppLoadZipFileEntry {
|
|
628
|
+
path: string;
|
|
629
|
+
size: number;
|
|
630
|
+
}
|
|
631
|
+
/** `simulator.loadZip()` 返回结果(包元信息)。 */
|
|
632
|
+
export interface MiniAppLoadZipResult {
|
|
633
|
+
entry: string;
|
|
634
|
+
files: MiniAppLoadZipFileEntry[];
|
|
635
|
+
}
|
|
636
|
+
/** loadZip/loadFiles 的包体积准入上限。 */
|
|
637
|
+
export interface MiniAppPackageLimits {
|
|
638
|
+
/** ZIP 压缩包最大字节数,默认 50 MiB。仅 loadZip 生效。 */
|
|
639
|
+
maxZipBytes: number;
|
|
640
|
+
/** 任一文件最大字节数,默认 15 MiB。 */
|
|
641
|
+
maxSingleFileBytes: number;
|
|
642
|
+
/** JS/TS 脚本单文件最大字节数,默认 15 MiB。 */
|
|
643
|
+
maxScriptBytes: number;
|
|
644
|
+
}
|
|
645
|
+
/** `simulator.loadZip()` 选项。 */
|
|
646
|
+
export interface MiniAppLoadZipOptions {
|
|
647
|
+
/**
|
|
648
|
+
* JSZip 兼容对象(含静态 `loadAsync`)。
|
|
649
|
+
* 不传则回退到全局 `window.JSZip`(CDN / UMD 注入);仍缺失时抛错。
|
|
650
|
+
*/
|
|
651
|
+
jszip?: MiniAppLoadZipJsZip;
|
|
652
|
+
/** 入口 HTML 文件名,默认 `index.html`。 */
|
|
653
|
+
entry?: string;
|
|
654
|
+
/** 追加 / 覆盖到加载 URL 的 query(与现有 query 合并)。 */
|
|
655
|
+
query?: MiniAppSimulatorOptions['query'];
|
|
656
|
+
/** 解包准入上限;传 false 关闭,partial 覆盖默认保护值。 */
|
|
657
|
+
limits?: Partial<MiniAppPackageLimits> | false;
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* `simulator.loadFiles()` 单个文件内容。
|
|
661
|
+
* - 文本资源(html / css / js / json):传 `string`
|
|
662
|
+
* - 二进制资源(图片 / 字体):传 `ArrayBuffer` / `Uint8Array`(或已编码的 `data:` URI 字符串)
|
|
663
|
+
*/
|
|
664
|
+
export type MiniAppFileContent = string | ArrayBuffer | Uint8Array;
|
|
665
|
+
/**
|
|
666
|
+
* `simulator.loadFiles()` 入参:相对路径 → 文件内容 的映射。
|
|
667
|
+
* 适用于「AI 出码目录产物」等无 zip 打包场景:宿主(Node / Electron)读好目录后传入,
|
|
668
|
+
* SDK 复用与 loadZip 相同的路径 → 字节文件表,交 Service Worker 直供,自身不做文件系统 IO。
|
|
669
|
+
*
|
|
670
|
+
* @example
|
|
671
|
+
* await simulator.loadFiles({
|
|
672
|
+
* "index.html": htmlText,
|
|
673
|
+
* "style.css": cssText,
|
|
674
|
+
* "logo.png": pngBytes, // Uint8Array
|
|
675
|
+
* });
|
|
676
|
+
*/
|
|
677
|
+
export type MiniAppFileMap = Record<string, MiniAppFileContent>;
|
|
678
|
+
/** `simulator.loadFiles()` 选项。 */
|
|
679
|
+
export interface MiniAppLoadFilesOptions {
|
|
680
|
+
/** 入口 HTML 文件名,默认 `index.html`。 */
|
|
681
|
+
entry?: string;
|
|
682
|
+
/** 追加 / 覆盖到加载 URL 的 query(与现有 query 合并)。 */
|
|
683
|
+
query?: MiniAppSimulatorOptions['query'];
|
|
684
|
+
/** 文件表准入上限;传 false 关闭,partial 覆盖默认保护值。 */
|
|
685
|
+
limits?: Partial<MiniAppPackageLimits> | false;
|
|
686
|
+
}
|
|
687
|
+
/** `simulator.loadFiles()` 返回结果(文件清单),结构与 loadZip 对齐。 */
|
|
688
|
+
export interface MiniAppLoadFilesResult {
|
|
689
|
+
entry: string;
|
|
690
|
+
files: MiniAppLoadZipFileEntry[];
|
|
691
|
+
}
|
|
692
|
+
export interface MiniAppSimulator {
|
|
693
|
+
readonly status: MiniAppSimulatorStatus;
|
|
694
|
+
/**
|
|
695
|
+
* 运行时 host api 控制器;仅当 jsapi.enabled 时生效,关闭时所有调用为 no-op。
|
|
696
|
+
* 与构造时传入的 `options.hostApi` 共用同一个 handler 池。
|
|
697
|
+
*/
|
|
698
|
+
readonly hostApi: MiniAppHostApiController;
|
|
699
|
+
/** 运行时 gesture 控制器;不支持手势回放的 renderer 调用 dispatch 会明确失败 */
|
|
700
|
+
readonly gesture: MiniAppGestureController;
|
|
701
|
+
/** `?playtest=1` 游戏预览的受控语义操作器;iframe/webview 统一实现。 */
|
|
702
|
+
readonly gamePlaytest: MiniAppGamePlaytestController;
|
|
703
|
+
/**
|
|
704
|
+
* 可视化元素选取控制器;仅 iframe + 同源可访问时生效,其余场景为 no-op。
|
|
705
|
+
* 配合 `on('elementSelected' | 'elementHovered', ...)` 消费选区结果。
|
|
706
|
+
*/
|
|
707
|
+
readonly inspector: MiniAppInspectorController;
|
|
708
|
+
/** 更新 Feed / Detail 壳层笔记数据(无需 reload) */
|
|
709
|
+
readonly notePreview: MiniAppNotePreviewController;
|
|
710
|
+
/** 更新小工具封面:笔记尾卡 + 个人页卡片两处生效(无需 reload) */
|
|
711
|
+
readonly widgetCover: MiniAppWidgetCoverController;
|
|
712
|
+
/** 权限授权 Bottom Sheet(iframe 渲染器挂载) */
|
|
713
|
+
readonly permissionSheet: MiniAppPermissionSheetController;
|
|
714
|
+
load(): Promise<void>;
|
|
715
|
+
/** 立即终止当前 guest 并回收 iframe / WebGL / SW 挂载;实例本身可继续 load。 */
|
|
716
|
+
unload(): void;
|
|
717
|
+
/**
|
|
718
|
+
* 跳转页面(note 笔记页 / minitool 小工具页 / profile 个人页)。
|
|
719
|
+
* `minitool` 默认全屏打开,可用 `options.sheetMode: "half"` 指定半屏。
|
|
720
|
+
* 跳转同样会触发 `routerChange` 事件(宿主可据此去重回声)。
|
|
721
|
+
*/
|
|
722
|
+
redirectTo(route: MiniAppSimulatorRoute, options?: MiniAppRedirectOptions): Promise<void>;
|
|
723
|
+
/** 当前页面路由 */
|
|
724
|
+
getCurrentRoute(): MiniAppSimulatorRoute;
|
|
725
|
+
/**
|
|
726
|
+
* 主动截取小工具运行画面(完整画面):成功返回 base64 dataURL,失败返回 code + reason。
|
|
727
|
+
* 结果同时以 `screenShot` 事件(source: "manual")对外发出。
|
|
728
|
+
*/
|
|
729
|
+
screenShot(): Promise<MiniAppScreenShotResult>;
|
|
730
|
+
reload(): Promise<void>;
|
|
731
|
+
resize(viewport: MiniAppViewport): void;
|
|
732
|
+
/** 设置逻辑视口尺寸(`resize` 的语义化别名) */
|
|
733
|
+
setViewport(viewport: MiniAppViewport): void;
|
|
734
|
+
/**
|
|
735
|
+
* 设置渲染缩放系数(1 = 100%)。仅 webview 渲染器生效(走 guest `webContents.setZoomFactor`),
|
|
736
|
+
* iframe 渲染器为 no-op(其缩放由 stageFit 负责)。可在 load 前调用,dom-ready 后自动补应用。
|
|
737
|
+
*/
|
|
738
|
+
setZoomFactor(factor: number): void;
|
|
739
|
+
/** 切换内容模式:fullscreen / half(会重新加载) */
|
|
740
|
+
switchContentMode(mode: MiniAppContentMode): Promise<void>;
|
|
741
|
+
/** `switchContentMode` 的简写别名 */
|
|
742
|
+
switchMode(mode: MiniAppContentMode): Promise<void>;
|
|
743
|
+
/** 切换 / 关闭手机外壳(会重建渲染器并重新加载) */
|
|
744
|
+
switchPhoneFrame(frame: string | MiniAppPhoneFrame | false): Promise<void>;
|
|
745
|
+
/** 切换设备预设(联动逻辑视口;仅 resize,不重载) */
|
|
746
|
+
switchDevice(device: string): void;
|
|
747
|
+
/** 加载新的小工具入口 URL(可附带 query,会重新加载) */
|
|
748
|
+
loadApp(appUrl: string, options?: {
|
|
749
|
+
query?: MiniAppSimulatorOptions['query'];
|
|
750
|
+
}): Promise<void>;
|
|
751
|
+
/**
|
|
752
|
+
* 自动加载 .zip 小工具包:内部解压为原始文件表 → 挂载给 Service Worker 当同源虚拟服务器直供
|
|
753
|
+
* → iframe 直连虚拟 URL(会重新加载)。需 renderer: "iframe-service-worker"。
|
|
754
|
+
* 返回包元信息(文件清单),便于业务侧展示。
|
|
755
|
+
*/
|
|
756
|
+
loadZip(source: MiniAppLoadZipSource, options?: MiniAppLoadZipOptions): Promise<MiniAppLoadZipResult>;
|
|
757
|
+
/**
|
|
758
|
+
* 加载「目录文件表」:宿主读好目录后传入「相对路径 → 内容」映射,
|
|
759
|
+
* 内部复用 loadZip 的文件表挂载链路交 Service Worker 直供(会重新加载)。
|
|
760
|
+
* 适用于 AI 出码目录产物等无 zip 打包场景。返回文件清单。
|
|
761
|
+
*/
|
|
762
|
+
loadFiles(files: MiniAppFileMap, options?: MiniAppLoadFilesOptions): Promise<MiniAppLoadFilesResult>;
|
|
763
|
+
/** 开关鼠标→触摸事件模拟(会重新加载渲染器) */
|
|
764
|
+
setTouchEmulation(enabled: boolean): Promise<void>;
|
|
765
|
+
/**
|
|
766
|
+
* @deprecated 创建实例时传入完整配置;配置变化时销毁并重新创建实例。
|
|
767
|
+
*/
|
|
768
|
+
updateConfig(options: Partial<Omit<MiniAppSimulatorOptions, 'mount' | 'shadow'>>): void;
|
|
769
|
+
capture(): Promise<Blob>;
|
|
770
|
+
/**
|
|
771
|
+
* 开关小应用 DevTools。
|
|
772
|
+
* 仅 webview 渲染器生效(弹出小应用专属 Chrome DevTools);
|
|
773
|
+
* iframe 渲染器为 no-op(DevTools 由宿主整窗负责)。
|
|
774
|
+
*/
|
|
775
|
+
setDevtools(open: boolean): void;
|
|
776
|
+
/**
|
|
777
|
+
* 开关手势 overlay 的 pointer-events。
|
|
778
|
+
* 宿主嵌入 DevTools 做 Elements 审查时设为 false,让点击穿透到 guest webview/iframe。
|
|
779
|
+
*/
|
|
780
|
+
setGestureOverlayInteractionEnabled(enabled: boolean): void;
|
|
781
|
+
/**
|
|
782
|
+
* 返回小应用渲染容器的 webContents id(仅 webview 渲染器,dom-ready 后可用,否则 null)。
|
|
783
|
+
* 宿主可据此在主进程把真 Chrome DevTools 嵌入自定义面板(setDevToolsWebContents)。
|
|
784
|
+
*/
|
|
785
|
+
getWebContentsId(): number | null;
|
|
786
|
+
destroy(reason?: string): void;
|
|
787
|
+
on<E extends MiniAppEventName>(event: E, handler: MiniAppEventHandler<E>): () => void;
|
|
788
|
+
once<E extends MiniAppEventName>(event: E, handler: MiniAppEventHandler<E>): () => void;
|
|
789
|
+
off<E extends MiniAppEventName>(event: E, handler: MiniAppEventHandler<E>): void;
|
|
790
|
+
}
|
|
791
|
+
/**
|
|
792
|
+
* 框架 Adapter 选项:去掉 mount(由 adapter 提供 DOM ref),其余配置与生命周期回调
|
|
793
|
+
* 直接复用 `MiniAppSimulatorOptions`(回调已内置于核心选项中)。
|
|
794
|
+
*/
|
|
795
|
+
export type MiniAppFrameworkAdapterOptions = Omit<MiniAppSimulatorOptions, 'mount'>;
|
|
796
|
+
/**
|
|
797
|
+
* Tracker 上报事件结构。
|
|
798
|
+
* name 为事件名(如 `simulator_load`),payload 为事件负载。
|
|
799
|
+
*/
|
|
800
|
+
export interface MiniAppTrackerEvent {
|
|
801
|
+
name: string;
|
|
802
|
+
payload: Record<string, unknown>;
|
|
803
|
+
timestamp: number;
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* 业务线:区分使用模拟器的平台,作为公共字段注入每条打点。
|
|
807
|
+
* 由接入方自定义,如 `creator`(创作平台)/ `audit`(审核平台)。
|
|
808
|
+
*/
|
|
809
|
+
export type MiniAppBusinessLine = string;
|
|
810
|
+
/** 默认上报用的用户信息:当前仅取 `userId` 作为 APM 用户标识。 */
|
|
811
|
+
export interface MiniAppTrackerUserInfo {
|
|
812
|
+
userId: string;
|
|
813
|
+
}
|
|
814
|
+
/** APM 上报 region:`cn` 国内、`sg` 海外(rednote) */
|
|
815
|
+
export type MiniAppApmRegion = 'cn' | 'sg';
|
|
816
|
+
/**
|
|
817
|
+
* 默认上报选项。
|
|
818
|
+
* 走内置默认上报:直接 POST 自定义打点到 APM 端点,`business_line` 必填。
|
|
819
|
+
*/
|
|
820
|
+
export interface MiniAppDefaultTrackerOptions {
|
|
821
|
+
/** 业务线:区分使用模拟器的平台(必填,公共字段) */
|
|
822
|
+
business_line: MiniAppBusinessLine;
|
|
823
|
+
/**
|
|
824
|
+
* 获取当前用户信息:默认上报会取其中的 `userId` 作为 APM 用户标识注入上报。
|
|
825
|
+
* 可同步或异步返回;不提供 / 返回空时 `userId` 留空,不影响其它字段上报。
|
|
826
|
+
*/
|
|
827
|
+
getUserInfo?: () => MiniAppTrackerUserInfo | Promise<MiniAppTrackerUserInfo>;
|
|
828
|
+
/** 上报 region,决定默认端点:`cn`(默认)/ `sg` */
|
|
829
|
+
region?: MiniAppApmRegion;
|
|
830
|
+
/** 覆盖 APM 上报端点 URL;传了则忽略 `region` */
|
|
831
|
+
endpoint?: string;
|
|
832
|
+
/** 打印到 console 而非真正上报;仅显式传 true 时开启。 */
|
|
833
|
+
debug?: boolean;
|
|
834
|
+
/** 附加到每条事件的稳定诊断上下文;仅用于内部链路关联,避免放入动态阶段字段。 */
|
|
835
|
+
context?: Record<string, string | number | boolean | undefined>;
|
|
836
|
+
}
|
|
837
|
+
/** Tracker 选项(等价于默认上报选项)。 */
|
|
838
|
+
export type MiniAppTrackerOptions = MiniAppDefaultTrackerOptions;
|
|
839
|
+
/**
|
|
840
|
+
* Tracker 输入:
|
|
841
|
+
* - `{ business_line }` → 内置默认上报
|
|
842
|
+
* - `false` / 不传 → 不启用
|
|
843
|
+
*/
|
|
844
|
+
export type MiniAppTrackerInput = MiniAppTrackerOptions | false;
|