@heybox/hb-sdk-protocol 0.9.0-alpha.4 → 0.9.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/bridge.ts +57 -6
- package/src/payloads.ts +10 -4
- package/types/bridge.d.ts +36 -0
- package/types/payloads.d.ts +10 -4
package/package.json
CHANGED
package/src/bridge.ts
CHANGED
|
@@ -16,6 +16,14 @@ import type {
|
|
|
16
16
|
import type { MiniProgramCapabilityProgress, MiniProgramProgressMethod } from './capabilities';
|
|
17
17
|
|
|
18
18
|
export type MiniProgramBridgeMessageType = 'handshake' | 'request' | 'response' | 'event' | 'cancel';
|
|
19
|
+
/**
|
|
20
|
+
* 小程序可订阅的生命周期、展示状态及业务事件名。
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* 每个事件的载荷见 {@link MiniProgramEventPayloadMap}。事件不会向晚订阅者重放;`ready`
|
|
24
|
+
* 是握手成功通知,不是可查询的持久状态,也不保证只收到一次。具体事件能否产生取决于
|
|
25
|
+
* Host 的能力与生命周期,不能仅凭事件名称推导状态去重或投递保证。
|
|
26
|
+
*/
|
|
19
27
|
export type MiniProgramEventName =
|
|
20
28
|
| 'launch'
|
|
21
29
|
| 'viewport_change'
|
|
@@ -124,22 +132,65 @@ export interface MiniProgramBridgeProgressMessage<
|
|
|
124
132
|
payload: MiniProgramCapabilityProgress<TMethod>;
|
|
125
133
|
error?: never;
|
|
126
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* 公开事件名与对应载荷的映射,供 SDK 的类型化事件监听使用。
|
|
137
|
+
*
|
|
138
|
+
* @remarks
|
|
139
|
+
* 生命周期 `timestamp` 是 Runtime 发出通知时的 Unix 毫秒时间,不是 iframe 收到事件的
|
|
140
|
+
* 时间或单调时钟。事件只通知已注册的监听器;业务需要当前状态时应使用相应读取 API。
|
|
141
|
+
*/
|
|
127
142
|
export interface MiniProgramEventPayloadMap {
|
|
128
143
|
/** 展示状态实际变化后通知;不回放初始状态,不支持或失败时不通知。 */
|
|
129
144
|
display_change: import('./payloads').MiniProgramDisplayState & {
|
|
130
145
|
/** api 为开发者调用;user 为用户点击宿主退出全屏按钮。同目标合并时保留首次发起来源。旧宿主可能不提供。 */
|
|
131
146
|
source?: 'api' | 'user';
|
|
132
147
|
};
|
|
148
|
+
/** 窗口信息变化通知;载荷与 `viewport.getWindowInfo()` 的结果结构一致。 */
|
|
133
149
|
viewport_change: import('./payloads').MiniProgramWindowInfoResult;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
150
|
+
/** 初次握手时的启动通知;晚订阅不能补收。 */
|
|
151
|
+
launch: {
|
|
152
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
153
|
+
timestamp: number;
|
|
154
|
+
/** Host 加载 iframe 时的启动 URL;可缺失,不代表页面当前导航地址。 */
|
|
155
|
+
url?: string;
|
|
156
|
+
};
|
|
157
|
+
/** 握手成功通知;重复握手可再次产生,应查询持久握手状态驱动 UI。 */
|
|
158
|
+
ready: {
|
|
159
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
160
|
+
timestamp: number;
|
|
161
|
+
};
|
|
162
|
+
/** Host 通知小程序进入展示状态。 */
|
|
163
|
+
show: {
|
|
164
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
165
|
+
timestamp: number;
|
|
166
|
+
/** Host 可选提供的来源描述;不保证存在或采用固定枚举。 */
|
|
167
|
+
source?: string;
|
|
168
|
+
};
|
|
169
|
+
/** Host 通知小程序进入隐藏状态。 */
|
|
170
|
+
hide: {
|
|
171
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
172
|
+
timestamp: number;
|
|
173
|
+
/** Host 可选提供的来源描述;不保证存在或采用固定枚举。 */
|
|
174
|
+
source?: string;
|
|
175
|
+
};
|
|
176
|
+
/** Runtime 卸载的尽力通知;不能保证页面销毁前一定收到。 */
|
|
177
|
+
unload: {
|
|
178
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
179
|
+
timestamp: number;
|
|
180
|
+
};
|
|
181
|
+
/** 结构化 Runtime 错误通知;载荷不是 JavaScript `Error` 实例。 */
|
|
139
182
|
error: MiniProgramBridgeError;
|
|
140
|
-
|
|
183
|
+
/** Host 当前登录状态通知;相同状态可能重复出现,不能仅凭事件判断账号身份是否变化。 */
|
|
184
|
+
heybox_app_login_change: {
|
|
185
|
+
/** Host 当前是否有已登录的小黑盒账号,不表示开发者服务端会话状态。 */
|
|
186
|
+
isHeyboxAppLoggedIn: boolean;
|
|
187
|
+
};
|
|
188
|
+
/** 当前用户授权状态通知;可包含可选 `steam_account`,不是 Manifest 权限状态。 */
|
|
141
189
|
user_info_authorization_change: UserInfoAuthorization;
|
|
190
|
+
/** 当前 Companion controller 收到的输出片段;去重与确认依据见载荷中的 sequence。 */
|
|
142
191
|
[COMPANION_SESSION_OUTPUT_EVENT]: CompanionSessionOutputPayload;
|
|
192
|
+
/** Companion session 的进程退出通知。 */
|
|
143
193
|
[COMPANION_SESSION_EXIT_EVENT]: CompanionSessionExitPayload;
|
|
194
|
+
/** 当前 controller 失去 Companion session 控制权的通知。 */
|
|
144
195
|
[COMPANION_SESSION_OWNERSHIP_LOST_EVENT]: CompanionSessionOwnershipLostPayload;
|
|
145
196
|
}
|
package/src/payloads.ts
CHANGED
|
@@ -24,7 +24,8 @@ export interface LoginResult {
|
|
|
24
24
|
*
|
|
25
25
|
* 该状态描述用户授权,不代表 `package.json#heybox.permissions` 的声明或平台审批结果。
|
|
26
26
|
* 当前 Runtime 成功执行 `user.getInfo()` 时会静默授予 `identity` 与 `profile`,因此两项均为
|
|
27
|
-
* `granted
|
|
27
|
+
* `granted`;支持 Steam 账号能力的 Host 还会授予 `steam_account`。其余状态仍保留在公共协议中,
|
|
28
|
+
* 供兼容 Host 和授权状态事件使用。
|
|
28
29
|
*/
|
|
29
30
|
export type UserInfoAuthorizationStatus = 'not_required' | 'not_requested' | 'granted' | 'denied';
|
|
30
31
|
|
|
@@ -57,6 +58,7 @@ export interface UserInfoAuthorization {
|
|
|
57
58
|
* 当前黑盒 APP 用户已登录时,Runtime 会隐式授予 `identity` 与 `profile`,静默建立或
|
|
58
59
|
* 读取隔离身份,并由 `user.getInfo()` 返回该对象。此过程只要求 Manifest 声明
|
|
59
60
|
* `userInfo`,不要求公开 `network` 权限,也不会返回授权码或创建开发者服务端会话。
|
|
61
|
+
* 支持 Steam 账号能力的 Host 还会授予 `steam_account`;已授权且有主绑定时才包含 `steam_id`。
|
|
60
62
|
*
|
|
61
63
|
* 撤销授权后旧身份失效;调用方应停止使用旧值,并清理本地缓存与开发者服务端会话。
|
|
62
64
|
* 再次调用 `user.getInfo()` 会按当前账号重新建立隔离身份,不能假定新旧 `app_user_id`
|
|
@@ -110,7 +112,7 @@ export interface AuthorizedUserInfo {
|
|
|
110
112
|
*
|
|
111
113
|
* - `false`:当前 Host 没有已登录的小黑盒账号,`authorization` 与 `userInfo` 固定为 `null`。
|
|
112
114
|
* 这是正常业务分支,不会抛出登录错误。
|
|
113
|
-
* - `true` 且 `userInfo` 非空:`authorization`
|
|
115
|
+
* - `true` 且 `userInfo` 非空:`authorization` 必含 `identity`、`profile`,支持时还包含 `steam_account`;
|
|
114
116
|
* `userInfo` 包含当前小程序隔离的 `app_user_id`,而 `profile` 仍需独立判空。
|
|
115
117
|
* - `true` 且 `userInfo` 为 `null`:公共协议为兼容 Host 保留的“已登录但资料未披露/不可用”分支。
|
|
116
118
|
* 当前 Runtime 成功读取隔离身份时返回非空对象,但调用方仍应按类型处理该分支。
|
|
@@ -221,9 +223,9 @@ export interface SteamGameListItem {
|
|
|
221
223
|
image?: string;
|
|
222
224
|
/** 非空 Steam 图标 URL 字符串。 */
|
|
223
225
|
icon?: string;
|
|
224
|
-
/**
|
|
226
|
+
/** Steam 游戏库接口返回的累计游玩时长,当前单位为秒;`0` 是有效值。 */
|
|
225
227
|
playtimeForever?: number;
|
|
226
|
-
/**
|
|
228
|
+
/** Steam 游戏库接口返回的最近两周游玩时长,当前单位为秒;`0` 是有效值。 */
|
|
227
229
|
playtime2Weeks?: number;
|
|
228
230
|
/** 非空标签列表;没有有效标签时省略。 */
|
|
229
231
|
tags?: string[];
|
|
@@ -1053,6 +1055,10 @@ export interface CompanionOpenAttachmentPayload extends CompanionSessionControll
|
|
|
1053
1055
|
id: string;
|
|
1054
1056
|
}
|
|
1055
1057
|
export type CompanionOpenAttachmentResult = MiniProgramFileDescriptor;
|
|
1058
|
+
/**
|
|
1059
|
+
* 桌面辅助应用通知的语义类别:`completed` 为完成,`failed` 为失败,`stopped` 为停止,
|
|
1060
|
+
* `attention` 为需要用户关注。它只选择通知类别,不会改变进程或 session 状态。
|
|
1061
|
+
*/
|
|
1056
1062
|
export type CompanionNotificationCategory = 'completed' | 'failed' | 'stopped' | 'attention';
|
|
1057
1063
|
export interface CompanionShowNotificationPayload extends CompanionSessionControllerPayload {
|
|
1058
1064
|
category: CompanionNotificationCategory;
|
package/types/bridge.d.ts
CHANGED
|
@@ -2,6 +2,14 @@ import { COMPANION_SESSION_EXIT_EVENT, COMPANION_SESSION_OUTPUT_EVENT, COMPANION
|
|
|
2
2
|
import type { CompanionSessionExitPayload, CompanionSessionOutputPayload, CompanionSessionOwnershipLostPayload, MiniProgramRuntimeEnvironmentInfo, UserInfoAuthorization } from './payloads';
|
|
3
3
|
import type { MiniProgramCapabilityProgress, MiniProgramProgressMethod } from './capabilities';
|
|
4
4
|
export type MiniProgramBridgeMessageType = 'handshake' | 'request' | 'response' | 'event' | 'cancel';
|
|
5
|
+
/**
|
|
6
|
+
* 小程序可订阅的生命周期、展示状态及业务事件名。
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* 每个事件的载荷见 {@link MiniProgramEventPayloadMap}。事件不会向晚订阅者重放;`ready`
|
|
10
|
+
* 是握手成功通知,不是可查询的持久状态,也不保证只收到一次。具体事件能否产生取决于
|
|
11
|
+
* Host 的能力与生命周期,不能仅凭事件名称推导状态去重或投递保证。
|
|
12
|
+
*/
|
|
5
13
|
export type MiniProgramEventName = 'launch' | 'viewport_change' | 'display_change' | 'ready' | 'show' | 'hide' | 'unload' | 'error' | 'heybox_app_login_change' | 'user_info_authorization_change' | typeof COMPANION_SESSION_OUTPUT_EVENT | typeof COMPANION_SESSION_EXIT_EVENT | typeof COMPANION_SESSION_OWNERSHIP_LOST_EVENT;
|
|
6
14
|
export interface MiniProgramBridgeError {
|
|
7
15
|
code: string;
|
|
@@ -91,37 +99,65 @@ export interface MiniProgramBridgeProgressMessage<TMethod extends MiniProgramPro
|
|
|
91
99
|
payload: MiniProgramCapabilityProgress<TMethod>;
|
|
92
100
|
error?: never;
|
|
93
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* 公开事件名与对应载荷的映射,供 SDK 的类型化事件监听使用。
|
|
104
|
+
*
|
|
105
|
+
* @remarks
|
|
106
|
+
* 生命周期 `timestamp` 是 Runtime 发出通知时的 Unix 毫秒时间,不是 iframe 收到事件的
|
|
107
|
+
* 时间或单调时钟。事件只通知已注册的监听器;业务需要当前状态时应使用相应读取 API。
|
|
108
|
+
*/
|
|
94
109
|
export interface MiniProgramEventPayloadMap {
|
|
95
110
|
/** 展示状态实际变化后通知;不回放初始状态,不支持或失败时不通知。 */
|
|
96
111
|
display_change: import('./payloads').MiniProgramDisplayState & {
|
|
97
112
|
/** api 为开发者调用;user 为用户点击宿主退出全屏按钮。同目标合并时保留首次发起来源。旧宿主可能不提供。 */
|
|
98
113
|
source?: 'api' | 'user';
|
|
99
114
|
};
|
|
115
|
+
/** 窗口信息变化通知;载荷与 `viewport.getWindowInfo()` 的结果结构一致。 */
|
|
100
116
|
viewport_change: import('./payloads').MiniProgramWindowInfoResult;
|
|
117
|
+
/** 初次握手时的启动通知;晚订阅不能补收。 */
|
|
101
118
|
launch: {
|
|
119
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
102
120
|
timestamp: number;
|
|
121
|
+
/** Host 加载 iframe 时的启动 URL;可缺失,不代表页面当前导航地址。 */
|
|
103
122
|
url?: string;
|
|
104
123
|
};
|
|
124
|
+
/** 握手成功通知;重复握手可再次产生,应查询持久握手状态驱动 UI。 */
|
|
105
125
|
ready: {
|
|
126
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
106
127
|
timestamp: number;
|
|
107
128
|
};
|
|
129
|
+
/** Host 通知小程序进入展示状态。 */
|
|
108
130
|
show: {
|
|
131
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
109
132
|
timestamp: number;
|
|
133
|
+
/** Host 可选提供的来源描述;不保证存在或采用固定枚举。 */
|
|
110
134
|
source?: string;
|
|
111
135
|
};
|
|
136
|
+
/** Host 通知小程序进入隐藏状态。 */
|
|
112
137
|
hide: {
|
|
138
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
113
139
|
timestamp: number;
|
|
140
|
+
/** Host 可选提供的来源描述;不保证存在或采用固定枚举。 */
|
|
114
141
|
source?: string;
|
|
115
142
|
};
|
|
143
|
+
/** Runtime 卸载的尽力通知;不能保证页面销毁前一定收到。 */
|
|
116
144
|
unload: {
|
|
145
|
+
/** Runtime 发出通知时的 Unix 毫秒时间。 */
|
|
117
146
|
timestamp: number;
|
|
118
147
|
};
|
|
148
|
+
/** 结构化 Runtime 错误通知;载荷不是 JavaScript `Error` 实例。 */
|
|
119
149
|
error: MiniProgramBridgeError;
|
|
150
|
+
/** Host 当前登录状态通知;相同状态可能重复出现,不能仅凭事件判断账号身份是否变化。 */
|
|
120
151
|
heybox_app_login_change: {
|
|
152
|
+
/** Host 当前是否有已登录的小黑盒账号,不表示开发者服务端会话状态。 */
|
|
121
153
|
isHeyboxAppLoggedIn: boolean;
|
|
122
154
|
};
|
|
155
|
+
/** 当前用户授权状态通知;可包含可选 `steam_account`,不是 Manifest 权限状态。 */
|
|
123
156
|
user_info_authorization_change: UserInfoAuthorization;
|
|
157
|
+
/** 当前 Companion controller 收到的输出片段;去重与确认依据见载荷中的 sequence。 */
|
|
124
158
|
[COMPANION_SESSION_OUTPUT_EVENT]: CompanionSessionOutputPayload;
|
|
159
|
+
/** Companion session 的进程退出通知。 */
|
|
125
160
|
[COMPANION_SESSION_EXIT_EVENT]: CompanionSessionExitPayload;
|
|
161
|
+
/** 当前 controller 失去 Companion session 控制权的通知。 */
|
|
126
162
|
[COMPANION_SESSION_OWNERSHIP_LOST_EVENT]: CompanionSessionOwnershipLostPayload;
|
|
127
163
|
}
|
package/types/payloads.d.ts
CHANGED
|
@@ -23,7 +23,8 @@ export interface LoginResult {
|
|
|
23
23
|
*
|
|
24
24
|
* 该状态描述用户授权,不代表 `package.json#heybox.permissions` 的声明或平台审批结果。
|
|
25
25
|
* 当前 Runtime 成功执行 `user.getInfo()` 时会静默授予 `identity` 与 `profile`,因此两项均为
|
|
26
|
-
* `granted
|
|
26
|
+
* `granted`;支持 Steam 账号能力的 Host 还会授予 `steam_account`。其余状态仍保留在公共协议中,
|
|
27
|
+
* 供兼容 Host 和授权状态事件使用。
|
|
27
28
|
*/
|
|
28
29
|
export type UserInfoAuthorizationStatus = 'not_required' | 'not_requested' | 'granted' | 'denied';
|
|
29
30
|
/**
|
|
@@ -54,6 +55,7 @@ export interface UserInfoAuthorization {
|
|
|
54
55
|
* 当前黑盒 APP 用户已登录时,Runtime 会隐式授予 `identity` 与 `profile`,静默建立或
|
|
55
56
|
* 读取隔离身份,并由 `user.getInfo()` 返回该对象。此过程只要求 Manifest 声明
|
|
56
57
|
* `userInfo`,不要求公开 `network` 权限,也不会返回授权码或创建开发者服务端会话。
|
|
58
|
+
* 支持 Steam 账号能力的 Host 还会授予 `steam_account`;已授权且有主绑定时才包含 `steam_id`。
|
|
57
59
|
*
|
|
58
60
|
* 撤销授权后旧身份失效;调用方应停止使用旧值,并清理本地缓存与开发者服务端会话。
|
|
59
61
|
* 再次调用 `user.getInfo()` 会按当前账号重新建立隔离身份,不能假定新旧 `app_user_id`
|
|
@@ -106,7 +108,7 @@ export interface AuthorizedUserInfo {
|
|
|
106
108
|
*
|
|
107
109
|
* - `false`:当前 Host 没有已登录的小黑盒账号,`authorization` 与 `userInfo` 固定为 `null`。
|
|
108
110
|
* 这是正常业务分支,不会抛出登录错误。
|
|
109
|
-
* - `true` 且 `userInfo` 非空:`authorization`
|
|
111
|
+
* - `true` 且 `userInfo` 非空:`authorization` 必含 `identity`、`profile`,支持时还包含 `steam_account`;
|
|
110
112
|
* `userInfo` 包含当前小程序隔离的 `app_user_id`,而 `profile` 仍需独立判空。
|
|
111
113
|
* - `true` 且 `userInfo` 为 `null`:公共协议为兼容 Host 保留的“已登录但资料未披露/不可用”分支。
|
|
112
114
|
* 当前 Runtime 成功读取隔离身份时返回非空对象,但调用方仍应按类型处理该分支。
|
|
@@ -215,9 +217,9 @@ export interface SteamGameListItem {
|
|
|
215
217
|
image?: string;
|
|
216
218
|
/** 非空 Steam 图标 URL 字符串。 */
|
|
217
219
|
icon?: string;
|
|
218
|
-
/**
|
|
220
|
+
/** Steam 游戏库接口返回的累计游玩时长,当前单位为秒;`0` 是有效值。 */
|
|
219
221
|
playtimeForever?: number;
|
|
220
|
-
/**
|
|
222
|
+
/** Steam 游戏库接口返回的最近两周游玩时长,当前单位为秒;`0` 是有效值。 */
|
|
221
223
|
playtime2Weeks?: number;
|
|
222
224
|
/** 非空标签列表;没有有效标签时省略。 */
|
|
223
225
|
tags?: string[];
|
|
@@ -965,6 +967,10 @@ export interface CompanionOpenAttachmentPayload extends CompanionSessionControll
|
|
|
965
967
|
id: string;
|
|
966
968
|
}
|
|
967
969
|
export type CompanionOpenAttachmentResult = MiniProgramFileDescriptor;
|
|
970
|
+
/**
|
|
971
|
+
* 桌面辅助应用通知的语义类别:`completed` 为完成,`failed` 为失败,`stopped` 为停止,
|
|
972
|
+
* `attention` 为需要用户关注。它只选择通知类别,不会改变进程或 session 状态。
|
|
973
|
+
*/
|
|
968
974
|
export type CompanionNotificationCategory = 'completed' | 'failed' | 'stopped' | 'attention';
|
|
969
975
|
export interface CompanionShowNotificationPayload extends CompanionSessionControllerPayload {
|
|
970
976
|
category: CompanionNotificationCategory;
|