@dino-dev/bridge-core-ts 0.0.1
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 +145 -0
- package/dist/generated/ai_tutor.d.ts +63 -0
- package/dist/generated/ai_tutor.d.ts.map +1 -0
- package/dist/generated/ai_tutor.js +6 -0
- package/dist/generated/ai_tutor.js.map +1 -0
- package/dist/generated/audio.d.ts +29 -0
- package/dist/generated/audio.d.ts.map +1 -0
- package/dist/generated/audio.js +6 -0
- package/dist/generated/audio.js.map +1 -0
- package/dist/generated/device.d.ts +23 -0
- package/dist/generated/device.d.ts.map +1 -0
- package/dist/generated/device.js +6 -0
- package/dist/generated/device.js.map +1 -0
- package/dist/generated/index.d.ts +17 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +25 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/user.d.ts +25 -0
- package/dist/generated/user.d.ts.map +1 -0
- package/dist/generated/user.js +6 -0
- package/dist/generated/user.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lifecycle.d.ts +85 -0
- package/dist/src/lifecycle.d.ts.map +1 -0
- package/dist/src/lifecycle.js +97 -0
- package/dist/src/lifecycle.js.map +1 -0
- package/dist/src/mrp-bridge.d.ts +108 -0
- package/dist/src/mrp-bridge.d.ts.map +1 -0
- package/dist/src/mrp-bridge.js +185 -0
- package/dist/src/mrp-bridge.js.map +1 -0
- package/dist/src/system-module.d.ts +59 -0
- package/dist/src/system-module.d.ts.map +1 -0
- package/dist/src/system-module.js +33 -0
- package/dist/src/system-module.js.map +1 -0
- package/generated/ai_tutor.ts +72 -0
- package/generated/audio.ts +35 -0
- package/generated/device.ts +28 -0
- package/generated/index.ts +40 -0
- package/generated/user.ts +30 -0
- package/package.json +44 -0
- package/src/index.ts +33 -0
- package/src/lifecycle.ts +127 -0
- package/src/mrp-bridge.ts +297 -0
- package/src/system-module.ts +77 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* h5_app_container Bridge SDK
|
|
3
|
+
*
|
|
4
|
+
* H5 端与 Flutter 容器通信的核心 SDK。
|
|
5
|
+
* 提供 Bridge 消息通信 + 原生模块调用能力。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { bridge } from './mrp-bridge';
|
|
10
|
+
*
|
|
11
|
+
* // 发送消息到 Flutter
|
|
12
|
+
* bridge.send('interaction', 'onFindTarget', { target: 'ladybug' });
|
|
13
|
+
*
|
|
14
|
+
* // 调用原生模块(类型安全,搭配 generated 类型使用)
|
|
15
|
+
* const audio = bridge.module<AudioModule>('audio');
|
|
16
|
+
* await audio.play({ soundId: 'success', volume: 0.8 });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/** Bridge 消息格式 */
|
|
20
|
+
export interface BridgeMessage<T = Record<string, unknown>> {
|
|
21
|
+
type: string;
|
|
22
|
+
action: string;
|
|
23
|
+
payload: T;
|
|
24
|
+
messageId?: string;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
}
|
|
27
|
+
/** 消息处理函数 */
|
|
28
|
+
export type MessageHandler<T = Record<string, unknown>> = (message: BridgeMessage<T>) => void;
|
|
29
|
+
/** 取消监听函数 */
|
|
30
|
+
export type Unsubscribe = () => void;
|
|
31
|
+
declare global {
|
|
32
|
+
interface Window {
|
|
33
|
+
/** Bridge SDK 单例 */
|
|
34
|
+
mrpBridge: MrpBridge;
|
|
35
|
+
/** Flutter 内部 Bridge 接口 */
|
|
36
|
+
__FLUTTER_BRIDGE__?: {
|
|
37
|
+
send(type: string, action: string, payload: Record<string, unknown>): Promise<unknown>;
|
|
38
|
+
onMessage(jsonString: string): void;
|
|
39
|
+
};
|
|
40
|
+
/** 宿主注册的原生模块(按命名空间分组) */
|
|
41
|
+
NativeModules?: Record<string, Record<string, (...args: unknown[]) => Promise<unknown>>>;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Bridge SDK 主类。
|
|
46
|
+
*
|
|
47
|
+
* 提供两大能力:
|
|
48
|
+
* 1. **消息通信**:H5 ↔ Flutter 的双向消息收发
|
|
49
|
+
* 2. **模块调用**:通过 `module<T>()` 获取类型安全的原生模块代理
|
|
50
|
+
*/
|
|
51
|
+
export declare class MrpBridge {
|
|
52
|
+
private _messageHandlers;
|
|
53
|
+
private _ready;
|
|
54
|
+
private _pendingMessages;
|
|
55
|
+
private _readyPromiseResolve;
|
|
56
|
+
private _readyPromise;
|
|
57
|
+
private _retryCount;
|
|
58
|
+
constructor();
|
|
59
|
+
private _checkReady;
|
|
60
|
+
/** 等待 Bridge 就绪 */
|
|
61
|
+
whenReady(): Promise<void>;
|
|
62
|
+
/** 是否在 Flutter WebView 容器中运行 */
|
|
63
|
+
get isInContainer(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* 发送消息到 Flutter
|
|
66
|
+
* @param type - 消息类型
|
|
67
|
+
* @param action - 动作名称
|
|
68
|
+
* @param payload - 消息数据
|
|
69
|
+
*/
|
|
70
|
+
send<R = unknown>(type: string, action: string, payload?: Record<string, unknown>): Promise<R>;
|
|
71
|
+
private _doSend;
|
|
72
|
+
/**
|
|
73
|
+
* 监听 Flutter 发来的所有消息
|
|
74
|
+
* @returns 取消监听的函数
|
|
75
|
+
*/
|
|
76
|
+
onMessage<T = Record<string, unknown>>(handler: MessageHandler<T>): Unsubscribe;
|
|
77
|
+
/**
|
|
78
|
+
* 监听特定类型/动作的消息
|
|
79
|
+
* @param type - 消息类型
|
|
80
|
+
* @param action - 动作名称,传 null 匹配所有
|
|
81
|
+
*/
|
|
82
|
+
on<T = Record<string, unknown>>(type: string, action: string | null, handler: MessageHandler<T>): Unsubscribe;
|
|
83
|
+
/**
|
|
84
|
+
* 获取模块代理,按命名空间调用原生 API(类型安全)。
|
|
85
|
+
*
|
|
86
|
+
* 搭配 TypeScript Generator 生成的类型使用,获得完整的类型推断。
|
|
87
|
+
*
|
|
88
|
+
* @param namespace - 模块命名空间
|
|
89
|
+
* @returns 模块方法代理对象
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import type { AudioModule } from '../generated/audio_module';
|
|
94
|
+
* import type { UserModule } from '../generated/user_module';
|
|
95
|
+
*
|
|
96
|
+
* const audio = bridge.module<AudioModule>('audio');
|
|
97
|
+
* await audio.play({ soundId: 'success', volume: 0.8 });
|
|
98
|
+
*
|
|
99
|
+
* const user = bridge.module<UserModule>('user');
|
|
100
|
+
* const profile = await user.getProfile();
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
module<T extends object = Record<string, (...args: any[]) => Promise<any>>>(namespace: string): T;
|
|
104
|
+
}
|
|
105
|
+
/** Bridge 单例实例 */
|
|
106
|
+
export declare const bridge: MrpBridge;
|
|
107
|
+
export default bridge;
|
|
108
|
+
//# sourceMappingURL=mrp-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mrp-bridge.d.ts","sourceRoot":"","sources":["../../src/mrp-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,kBAAkB;AAClB,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,aAAa;AACb,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CACxD,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KACtB,IAAI,CAAC;AAEV,aAAa;AACb,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAMrC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,oBAAoB;QACpB,SAAS,EAAE,SAAS,CAAC;QACrB,2BAA2B;QAC3B,kBAAkB,CAAC,EAAE;YACnB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;YACpB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;SACrC,CAAC;QACF,yBAAyB;QACzB,aAAa,CAAC,EAAE,MAAM,CACpB,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CACzD,CAAC;KACH;CACF;AAsBD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAK;;IA0BxB,OAAO,CAAC,WAAW;IAkBnB,mBAAmB;IACnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,gCAAgC;IAChC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAID;;;;;OAKG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,OAAO,CAAC,CAAC,CAAC;IASb,OAAO,CAAC,OAAO;IAaf;;;OAGG;IACH,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,WAAW;IASd;;;;OAIG;IACH,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,WAAW;IAmBd;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CACJ,CAAC,SAAS,MAAM,GAAG,MAAM,CACvB,MAAM,EACN,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CACjC,EACD,SAAS,EAAE,MAAM,GAAG,CAAC;CA8BxB;AAMD,kBAAkB;AAClB,eAAO,MAAM,MAAM,WAAkB,CAAC;AAKtC,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* h5_app_container Bridge SDK
|
|
3
|
+
*
|
|
4
|
+
* H5 端与 Flutter 容器通信的核心 SDK。
|
|
5
|
+
* 提供 Bridge 消息通信 + 原生模块调用能力。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { bridge } from './mrp-bridge';
|
|
10
|
+
*
|
|
11
|
+
* // 发送消息到 Flutter
|
|
12
|
+
* bridge.send('interaction', 'onFindTarget', { target: 'ladybug' });
|
|
13
|
+
*
|
|
14
|
+
* // 调用原生模块(类型安全,搭配 generated 类型使用)
|
|
15
|
+
* const audio = bridge.module<AudioModule>('audio');
|
|
16
|
+
* await audio.play({ soundId: 'success', volume: 0.8 });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
// ============================================================
|
|
20
|
+
// MrpBridge
|
|
21
|
+
// ============================================================
|
|
22
|
+
/**
|
|
23
|
+
* Bridge SDK 主类。
|
|
24
|
+
*
|
|
25
|
+
* 提供两大能力:
|
|
26
|
+
* 1. **消息通信**:H5 ↔ Flutter 的双向消息收发
|
|
27
|
+
* 2. **模块调用**:通过 `module<T>()` 获取类型安全的原生模块代理
|
|
28
|
+
*/
|
|
29
|
+
export class MrpBridge {
|
|
30
|
+
constructor() {
|
|
31
|
+
this._messageHandlers = [];
|
|
32
|
+
this._ready = false;
|
|
33
|
+
this._pendingMessages = [];
|
|
34
|
+
this._readyPromiseResolve = null;
|
|
35
|
+
this._retryCount = 0;
|
|
36
|
+
this._readyPromise = new Promise((resolve) => {
|
|
37
|
+
this._readyPromiseResolve = resolve;
|
|
38
|
+
});
|
|
39
|
+
// 监听 Flutter → H5 消息
|
|
40
|
+
window.addEventListener('flutterMessage', ((event) => {
|
|
41
|
+
const msg = event.detail;
|
|
42
|
+
// 复制一份避免迭代中修改
|
|
43
|
+
const handlers = [...this._messageHandlers];
|
|
44
|
+
for (const handler of handlers) {
|
|
45
|
+
try {
|
|
46
|
+
handler(msg);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.error('[MRP Bridge] 消息处理错误:', e);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
this._checkReady();
|
|
54
|
+
}
|
|
55
|
+
// ---- 就绪检测 ----
|
|
56
|
+
_checkReady() {
|
|
57
|
+
if (window.__FLUTTER_BRIDGE__) {
|
|
58
|
+
this._ready = true;
|
|
59
|
+
this._readyPromiseResolve?.();
|
|
60
|
+
this._pendingMessages.forEach((msg) => this._doSend(msg));
|
|
61
|
+
this._pendingMessages = [];
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this._retryCount++;
|
|
65
|
+
if (this._retryCount < 50) {
|
|
66
|
+
setTimeout(() => this._checkReady(), 100);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.warn('[MRP Bridge] Flutter Bridge 未注入,可能不在容器环境中运行');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** 等待 Bridge 就绪 */
|
|
74
|
+
whenReady() {
|
|
75
|
+
return this._readyPromise;
|
|
76
|
+
}
|
|
77
|
+
/** 是否在 Flutter WebView 容器中运行 */
|
|
78
|
+
get isInContainer() {
|
|
79
|
+
return !!window.__FLUTTER_BRIDGE__ || !!window.flutter_inappwebview;
|
|
80
|
+
}
|
|
81
|
+
// ---- 消息发送 ----
|
|
82
|
+
/**
|
|
83
|
+
* 发送消息到 Flutter
|
|
84
|
+
* @param type - 消息类型
|
|
85
|
+
* @param action - 动作名称
|
|
86
|
+
* @param payload - 消息数据
|
|
87
|
+
*/
|
|
88
|
+
send(type, action, payload = {}) {
|
|
89
|
+
const msg = { type, action, payload };
|
|
90
|
+
if (this._ready) {
|
|
91
|
+
return this._doSend(msg);
|
|
92
|
+
}
|
|
93
|
+
this._pendingMessages.push(msg);
|
|
94
|
+
return Promise.resolve(null);
|
|
95
|
+
}
|
|
96
|
+
_doSend(msg) {
|
|
97
|
+
if (window.__FLUTTER_BRIDGE__) {
|
|
98
|
+
return window.__FLUTTER_BRIDGE__.send(msg.type, msg.action, msg.payload);
|
|
99
|
+
}
|
|
100
|
+
return Promise.resolve(null);
|
|
101
|
+
}
|
|
102
|
+
// ---- 消息监听 ----
|
|
103
|
+
/**
|
|
104
|
+
* 监听 Flutter 发来的所有消息
|
|
105
|
+
* @returns 取消监听的函数
|
|
106
|
+
*/
|
|
107
|
+
onMessage(handler) {
|
|
108
|
+
this._messageHandlers.push(handler);
|
|
109
|
+
return () => {
|
|
110
|
+
this._messageHandlers = this._messageHandlers.filter((h) => h !== handler);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 监听特定类型/动作的消息
|
|
115
|
+
* @param type - 消息类型
|
|
116
|
+
* @param action - 动作名称,传 null 匹配所有
|
|
117
|
+
*/
|
|
118
|
+
on(type, action, handler) {
|
|
119
|
+
const wrappedHandler = (msg) => {
|
|
120
|
+
if (msg.type === type && (action === null || msg.action === action)) {
|
|
121
|
+
handler(msg);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
wrappedHandler._original = handler;
|
|
125
|
+
wrappedHandler._type = type;
|
|
126
|
+
wrappedHandler._action = action;
|
|
127
|
+
this._messageHandlers.push(wrappedHandler);
|
|
128
|
+
return () => {
|
|
129
|
+
this._messageHandlers = this._messageHandlers.filter((h) => h !== wrappedHandler);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// ---- 原生模块调用 ----
|
|
133
|
+
/**
|
|
134
|
+
* 获取模块代理,按命名空间调用原生 API(类型安全)。
|
|
135
|
+
*
|
|
136
|
+
* 搭配 TypeScript Generator 生成的类型使用,获得完整的类型推断。
|
|
137
|
+
*
|
|
138
|
+
* @param namespace - 模块命名空间
|
|
139
|
+
* @returns 模块方法代理对象
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* import type { AudioModule } from '../generated/audio_module';
|
|
144
|
+
* import type { UserModule } from '../generated/user_module';
|
|
145
|
+
*
|
|
146
|
+
* const audio = bridge.module<AudioModule>('audio');
|
|
147
|
+
* await audio.play({ soundId: 'success', volume: 0.8 });
|
|
148
|
+
*
|
|
149
|
+
* const user = bridge.module<UserModule>('user');
|
|
150
|
+
* const profile = await user.getProfile();
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
module(namespace) {
|
|
154
|
+
return new Proxy({}, {
|
|
155
|
+
get: (_target, method) => {
|
|
156
|
+
if (typeof method !== 'string')
|
|
157
|
+
return undefined;
|
|
158
|
+
return async (...args) => {
|
|
159
|
+
if (window.NativeModules?.[namespace]?.[method]) {
|
|
160
|
+
const result = await window.NativeModules[namespace][method](...args);
|
|
161
|
+
// 检查模块访问被拒绝错误
|
|
162
|
+
if (result &&
|
|
163
|
+
typeof result === 'object' &&
|
|
164
|
+
result.__error__ === 'MODULE_ACCESS_DENIED') {
|
|
165
|
+
console.error(`[MRP Bridge] 模块访问被拒绝: ${namespace}.${method}`, result.__message__);
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
console.warn(`[MRP Bridge] NativeModules.${namespace}.${method} 不存在`);
|
|
171
|
+
return Promise.resolve(null);
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// ============================================================
|
|
178
|
+
// 单例 & 导出
|
|
179
|
+
// ============================================================
|
|
180
|
+
/** Bridge 单例实例 */
|
|
181
|
+
export const bridge = new MrpBridge();
|
|
182
|
+
// 挂载到 window,方便非模块化项目使用
|
|
183
|
+
window.mrpBridge = bridge;
|
|
184
|
+
export default bridge;
|
|
185
|
+
//# sourceMappingURL=mrp-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mrp-bridge.js","sourceRoot":"","sources":["../../src/mrp-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 容器内置系统模块类型定义与工厂函数。
|
|
3
|
+
*
|
|
4
|
+
* System 模块由容器自动注册,不受 `allowedModules` 白名单限制,始终可用。
|
|
5
|
+
* 通过 `getSystemModule()` 或 `bridge.module<SystemModule>('system')` 访问。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { getSystemModule } from '@h5-container/bridge-core-ts';
|
|
10
|
+
*
|
|
11
|
+
* const system = getSystemModule();
|
|
12
|
+
* const { allowed } = await system.isModuleAllowed({ namespace: 'audio' });
|
|
13
|
+
* const { modules } = await system.getAvailableModules();
|
|
14
|
+
* const info = await system.getContainerInfo();
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
/** isModuleAllowed 返回值 */
|
|
18
|
+
export interface ModuleAllowedResult {
|
|
19
|
+
allowed: boolean;
|
|
20
|
+
namespace: string;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/** getAvailableModules 返回值 */
|
|
24
|
+
export interface AvailableModulesResult {
|
|
25
|
+
modules: string[];
|
|
26
|
+
}
|
|
27
|
+
/** getContainerInfo 返回值 */
|
|
28
|
+
export interface ContainerInfoResult {
|
|
29
|
+
packageId: string | null;
|
|
30
|
+
registeredModules: string[];
|
|
31
|
+
allowedModules: string[] | null;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 容器内置系统模块接口。
|
|
36
|
+
*
|
|
37
|
+
* 提供模块权限查询、可用模块列表、容器元信息获取等能力。
|
|
38
|
+
*/
|
|
39
|
+
export interface SystemModule {
|
|
40
|
+
/** 查询指定模块是否被当前包授权 */
|
|
41
|
+
isModuleAllowed(params: {
|
|
42
|
+
namespace: string;
|
|
43
|
+
}): Promise<ModuleAllowedResult>;
|
|
44
|
+
/** 获取当前包可用的所有模块命名空间列表 */
|
|
45
|
+
getAvailableModules(): Promise<AvailableModulesResult>;
|
|
46
|
+
/** 获取容器元信息 */
|
|
47
|
+
getContainerInfo(): Promise<ContainerInfoResult>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 获取系统模块的类型安全代理。
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* const system = getSystemModule();
|
|
55
|
+
* const { allowed } = await system.isModuleAllowed({ namespace: 'audio' });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function getSystemModule(): SystemModule;
|
|
59
|
+
//# sourceMappingURL=system-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-module.d.ts","sourceRoot":"","sources":["../../src/system-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,0BAA0B;AAC1B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAA8B;AAC9B,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2BAA2B;AAC3B,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,eAAe,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7E,yBAAyB;IACzB,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,cAAc;IACd,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAClD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 容器内置系统模块类型定义与工厂函数。
|
|
3
|
+
*
|
|
4
|
+
* System 模块由容器自动注册,不受 `allowedModules` 白名单限制,始终可用。
|
|
5
|
+
* 通过 `getSystemModule()` 或 `bridge.module<SystemModule>('system')` 访问。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { getSystemModule } from '@h5-container/bridge-core-ts';
|
|
10
|
+
*
|
|
11
|
+
* const system = getSystemModule();
|
|
12
|
+
* const { allowed } = await system.isModuleAllowed({ namespace: 'audio' });
|
|
13
|
+
* const { modules } = await system.getAvailableModules();
|
|
14
|
+
* const info = await system.getContainerInfo();
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { bridge } from './mrp-bridge';
|
|
18
|
+
// ============================================================
|
|
19
|
+
// 工厂函数
|
|
20
|
+
// ============================================================
|
|
21
|
+
/**
|
|
22
|
+
* 获取系统模块的类型安全代理。
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const system = getSystemModule();
|
|
27
|
+
* const { allowed } = await system.isModuleAllowed({ namespace: 'audio' });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function getSystemModule() {
|
|
31
|
+
return bridge.module('system');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=system-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-module.js","sourceRoot":"","sources":["../../src/system-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA4CtC,+DAA+D;AAC/D,OAAO;AACP,+DAA+D;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAe,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 此文件由 h5_app_container_generator 自动生成,请勿手动修改。
|
|
3
|
+
// 运行 `dart run build_runner build` 重新生成。
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
/** AI Tutor 交互网关(宿主侧 AI 能力) */
|
|
7
|
+
export interface AiTutor {
|
|
8
|
+
/** 将用户在绘本中的交互事件发送给 AI Tutor */
|
|
9
|
+
sendInteraction(args: {
|
|
10
|
+
/** 动作名称 */
|
|
11
|
+
action: string;
|
|
12
|
+
/** 事件负载 */
|
|
13
|
+
payload?: Record<string, unknown> | null;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
/** 是否成功 */
|
|
16
|
+
success: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
|
|
19
|
+
/** 发送文本消息给 AI Tutor */
|
|
20
|
+
sendTextMessage(args: {
|
|
21
|
+
/** 文本内容 */
|
|
22
|
+
text: string;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
/** 是否成功 */
|
|
25
|
+
success: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
|
|
28
|
+
/** 将当前截图发送给 AI Tutor(多模态视觉输入) */
|
|
29
|
+
sendScreenshot(args: {
|
|
30
|
+
/** Base64 编码的图片数据 */
|
|
31
|
+
imageBase64: string;
|
|
32
|
+
}): Promise<{
|
|
33
|
+
/** 是否成功 */
|
|
34
|
+
success: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
|
|
37
|
+
/** 通知 AI Tutor 当前绘本场景已切换 */
|
|
38
|
+
notifySceneChanged(args: {
|
|
39
|
+
/** 当前页码 */
|
|
40
|
+
pageIndex: number;
|
|
41
|
+
/** 场景标识符 */
|
|
42
|
+
sceneId?: string | null;
|
|
43
|
+
/** 场景标题 */
|
|
44
|
+
title?: string | null;
|
|
45
|
+
/** 附加元数据 */
|
|
46
|
+
metadata?: Record<string, unknown> | null;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
/** 是否成功 */
|
|
49
|
+
success: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
|
|
52
|
+
/** 请求开启/关闭学生麦克风进行语音输入 */
|
|
53
|
+
setMicEnabled(args: {
|
|
54
|
+
/** 是否开启麦克风 */
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
}): Promise<{
|
|
57
|
+
/** 是否成功 */
|
|
58
|
+
success: boolean;
|
|
59
|
+
/** 当前麦克风状态 */
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
|
|
63
|
+
/** 获取 AI Tutor 当前状态 */
|
|
64
|
+
getState(): Promise<{
|
|
65
|
+
/** 状态标识(idle / thinking / speaking / waitingForResponse / error) */
|
|
66
|
+
state: string;
|
|
67
|
+
/** 麦克风是否开启 */
|
|
68
|
+
micEnabled: boolean;
|
|
69
|
+
/** 当前场景上下文(可能为 null) */
|
|
70
|
+
currentScene: Record<string, unknown> | null;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 此文件由 h5_app_container_generator 自动生成,请勿手动修改。
|
|
3
|
+
// 运行 `dart run build_runner build` 重新生成。
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
/** 原生音频播放控制 */
|
|
7
|
+
export interface Audio {
|
|
8
|
+
/** 播放音效 */
|
|
9
|
+
play(args: {
|
|
10
|
+
/** 音效 ID */
|
|
11
|
+
soundId: string;
|
|
12
|
+
/** 音量 0.0~1.0 */
|
|
13
|
+
volume?: number;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
/** 是否正在播放 */
|
|
16
|
+
playing: boolean;
|
|
17
|
+
/** 音效 ID */
|
|
18
|
+
soundId: string;
|
|
19
|
+
}>;
|
|
20
|
+
|
|
21
|
+
/** 停止当前播放 */
|
|
22
|
+
stop(): Promise<{
|
|
23
|
+
/** 是否成功 */
|
|
24
|
+
success: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
|
|
27
|
+
/** 预加载音效到内存 */
|
|
28
|
+
preload(args: {
|
|
29
|
+
/** 音效 ID 列表 */
|
|
30
|
+
soundIds: string[];
|
|
31
|
+
}): Promise<{
|
|
32
|
+
/** 成功预加载的资源数量 */
|
|
33
|
+
preloaded: number;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 此文件由 h5_app_container_generator 自动生成,请勿手动修改。
|
|
3
|
+
// 运行 `dart run build_runner build` 重新生成。
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
/** 设备能力调用 */
|
|
7
|
+
export interface Device {
|
|
8
|
+
/** 触发设备震动 */
|
|
9
|
+
vibrate(args: {
|
|
10
|
+
/** 震动时长(毫秒) */
|
|
11
|
+
duration?: number;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
/** 是否成功 */
|
|
14
|
+
success: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
|
|
17
|
+
/** 获取设备信息 */
|
|
18
|
+
getDeviceInfo(): Promise<{
|
|
19
|
+
/** 平台标识(ios / android) */
|
|
20
|
+
platform: string;
|
|
21
|
+
/** 系统版本号 */
|
|
22
|
+
version: string;
|
|
23
|
+
/** 屏幕宽度(逻辑像素) */
|
|
24
|
+
screenWidth: number;
|
|
25
|
+
/** 屏幕高度(逻辑像素) */
|
|
26
|
+
screenHeight: number;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 此文件由 h5_app_container_generator 自动生成,请勿手动修改。
|
|
3
|
+
// 运行 `dart run build_runner build` 重新生成。
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
import { bridge } from '../src/mrp-bridge';
|
|
7
|
+
import type { AiTutor } from './ai_tutor';
|
|
8
|
+
import type { Audio } from './audio';
|
|
9
|
+
import type { Device } from './device';
|
|
10
|
+
import type { User } from './user';
|
|
11
|
+
|
|
12
|
+
export type { AiTutor } from './ai_tutor';
|
|
13
|
+
export type { Audio } from './audio';
|
|
14
|
+
export type { Device } from './device';
|
|
15
|
+
export type { User } from './user';
|
|
16
|
+
|
|
17
|
+
// ============================================================
|
|
18
|
+
// 工厂函数(适用于任何上下文)
|
|
19
|
+
// ============================================================
|
|
20
|
+
|
|
21
|
+
/** 获取 ai_tutor 的类型安全代理 */
|
|
22
|
+
export function getAiTutor(): AiTutor {
|
|
23
|
+
return bridge.module<AiTutor>('ai_tutor');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** 获取 audio 的类型安全代理 */
|
|
27
|
+
export function getAudio(): Audio {
|
|
28
|
+
return bridge.module<Audio>('audio');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** 获取 device 的类型安全代理 */
|
|
32
|
+
export function getDevice(): Device {
|
|
33
|
+
return bridge.module<Device>('device');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** 获取 user 的类型安全代理 */
|
|
37
|
+
export function getUser(): User {
|
|
38
|
+
return bridge.module<User>('user');
|
|
39
|
+
}
|
|
40
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 此文件由 h5_app_container_generator 自动生成,请勿手动修改。
|
|
3
|
+
// 运行 `dart run build_runner build` 重新生成。
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
/** 用户信息与进度管理 */
|
|
7
|
+
export interface User {
|
|
8
|
+
/** 获取当前学生信息 */
|
|
9
|
+
getProfile(): Promise<{
|
|
10
|
+
/** 学生姓名 */
|
|
11
|
+
name: string;
|
|
12
|
+
/** 当前等级 */
|
|
13
|
+
level: number;
|
|
14
|
+
/** 头像 URL */
|
|
15
|
+
avatar: string;
|
|
16
|
+
/** 年龄 */
|
|
17
|
+
age: number;
|
|
18
|
+
}>;
|
|
19
|
+
|
|
20
|
+
/** 保存学习进度 */
|
|
21
|
+
saveProgress(args: {
|
|
22
|
+
/** 当前页码 */
|
|
23
|
+
pageIndex: number;
|
|
24
|
+
/** 得分 */
|
|
25
|
+
score: number;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
/** 是否成功 */
|
|
28
|
+
success: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dino-dev/bridge-core-ts",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Bridge Core SDK for h5_app_container — H5 ↔ Flutter 通信 + 原生模块类型安全调用(零框架依赖)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/src/index.d.ts",
|
|
11
|
+
"import": "./dist/src/index.js",
|
|
12
|
+
"default": "./dist/src/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"src",
|
|
18
|
+
"generated"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"prepublishOnly": "npm run build",
|
|
26
|
+
"dev": "tsc --watch",
|
|
27
|
+
"clean": "rm -rf dist"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"typescript": "^5.4.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"flutter",
|
|
34
|
+
"webview",
|
|
35
|
+
"bridge",
|
|
36
|
+
"h5-container"
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/nengli/h5_app_container",
|
|
42
|
+
"directory": "packages/bridge_core_ts"
|
|
43
|
+
}
|
|
44
|
+
}
|