@heybox/hb-sdk 0.8.0-alpha.9 → 0.8.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/CHANGELOG.md +67 -0
- package/README.md +25 -19
- package/dist/cli-chunks/{build-DkokKVNy.cjs → build-PYCNacya.cjs} +8 -5
- package/dist/cli-chunks/{context-CKzZxKbF.cjs → context-m2W2XbL0.cjs} +42 -59
- package/dist/cli-chunks/{create-BQy5Jdmu.cjs → create-BdAg3WGA.cjs} +1 -1
- package/dist/cli-chunks/{dev-Dik2zr5R.cjs → dev-CyZuw7Yn.cjs} +26 -15
- package/dist/cli-chunks/{doctor-Byr4uwKG.cjs → doctor-DU8rCfUF.cjs} +1 -1
- package/dist/cli-chunks/{index-Cl0XaX8e.cjs → index-DATObqzK.cjs} +2 -2
- package/dist/cli-chunks/{index-BwGBr1ZA.cjs → index-MMW2ibQm.cjs} +15 -15
- package/dist/cli-chunks/{index.esm-BYifBABc.cjs → index.esm-BiAaAUFC.cjs} +8 -8
- package/dist/cli-chunks/{login-Dr9lclu3.cjs → login-B3TThMss.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-BIPrOtRO.cjs → project-vite-BQj8YLI4.cjs} +1 -1
- package/dist/cli-chunks/{remote-DXxyA14a.cjs → remote-DNvI7tHH.cjs} +57 -25
- package/dist/cli-chunks/{runtime-gate-DFjw66kF.cjs → runtime-gate-BEFp1w_s.cjs} +11 -3
- package/dist/cli-chunks/{runtime-permission-env-CjsCe5bp.cjs → runtime-permission-env-CtL8rsjB.cjs} +351 -0
- package/dist/cli-chunks/{session-B6Mo9eYW.cjs → session-DjBkjaF8.cjs} +1 -1
- package/dist/cli-chunks/{skill-f90sxv28.cjs → skill-cR_wnaw2.cjs} +2 -2
- package/dist/cli-chunks/{version-DDB_btOG.cjs → version-yEn1E2Bg.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-TzYf9L6C.js +99 -0
- package/dist/devtools/browser-dev-host/assets/{index-DaqmTjSF.js → index-C5MZZDa5.js} +4 -4
- package/dist/devtools/browser-dev-host/assets/index-P-ra4m1y.css +1 -0
- package/dist/devtools/browser-dev-host/assets/{workbench-state-wHgWRb7I.js → workbench-state-BwV7bm4n.js} +2 -2
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +99 -1
- package/dist/index.esm.js +99 -1
- package/dist/protocol.cjs.js +189 -47
- package/dist/protocol.esm.js +189 -47
- package/dist/templates/vanilla-vite-js/package.json.ejs +2 -1
- package/dist/vite.cjs.js +281 -13
- package/dist/vite.esm.js +281 -13
- package/package.json +5 -5
- package/skill/SKILL.md +8 -9
- package/skill/references/api-protocol.md +1 -1
- package/skill/references/api-root.md +63 -21
- package/skill/references/cli.md +6 -6
- package/skill/references/examples.md +3 -3
- package/skill/references/recipes.md +35 -38
- package/skill/references/safety-boundaries.md +9 -5
- package/skill/skill.json +5 -5
- package/types/core/mini-dev-console.d.ts +36 -0
- package/types/miniapp-manifest/index.d.ts +1 -0
- package/types/miniapp-manifest/node.d.ts +3 -0
- package/types/miniapp-manifest/permissions.d.ts +37 -0
- package/types/miniapp-manifest/schema.d.ts +5 -0
- package/types/vite/index.d.ts +3 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-CbhA4h8z.js +0 -97
- package/dist/devtools/browser-dev-host/assets/index-DJFB5ySU.css +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -724,6 +724,20 @@ function isRecord$1(value) {
|
|
|
724
724
|
/** 当前用户信息与登录能力支持的完整 scope 目录。 */
|
|
725
725
|
const USER_INFO_AUTHORIZATION_SCOPES = ['identity', 'profile'];
|
|
726
726
|
|
|
727
|
+
const MINI_PROGRAM_PERMISSION_KEYS = [
|
|
728
|
+
'userInfo',
|
|
729
|
+
'steamLibrary',
|
|
730
|
+
'share',
|
|
731
|
+
'storage',
|
|
732
|
+
'filesystem',
|
|
733
|
+
'clipboard',
|
|
734
|
+
'leaderboard',
|
|
735
|
+
'network',
|
|
736
|
+
];
|
|
737
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
738
|
+
|
|
739
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
740
|
+
|
|
727
741
|
/** 获取浏览器全局 window。 */
|
|
728
742
|
function getGlobalWindow() {
|
|
729
743
|
return typeof window === 'undefined' ? undefined : window;
|
|
@@ -785,7 +799,7 @@ function createMessageId() {
|
|
|
785
799
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
786
800
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
787
801
|
? undefined
|
|
788
|
-
: '0.8.0
|
|
802
|
+
: '0.8.0';
|
|
789
803
|
|
|
790
804
|
const DEFAULT_TIMEOUT = 10000;
|
|
791
805
|
const HANDSHAKE_RETRY_INTERVAL = 250;
|
|
@@ -3752,7 +3766,91 @@ function createMiniProgramSDK(options) {
|
|
|
3752
3766
|
return new MiniProgramSDK(options);
|
|
3753
3767
|
}
|
|
3754
3768
|
|
|
3769
|
+
/**
|
|
3770
|
+
* iframe 与调试台页面的开发期 console 捕获转发。
|
|
3771
|
+
*
|
|
3772
|
+
* 双条件门控(iframe 转发):
|
|
3773
|
+
* 1. 构建期:`hb-sdk dev`(vite serve)注入 `false`;`hb-sdk build` /
|
|
3774
|
+
* `vite build`(生产)永不注入或替换为 `false`,本模块被死代码消除。
|
|
3775
|
+
* 2. 运行期:仅在 `window.name` 为 `__hb_sdk_mini_dev__` 的调试 iframe 中激活,
|
|
3776
|
+
* 用户设备上的正式运行环境没有该标记。
|
|
3777
|
+
*
|
|
3778
|
+
* 无侵入 patch `console.log/debug/info/warn/error`:原样放行(DevTools 不受影响)+
|
|
3779
|
+
* 通过 `window.parent.postMessage` 转发给调试台(CSP 的 connect-src 不约束 postMessage,
|
|
3780
|
+
* 网络上报由调试台页面代理)。发送全程静默:失败不得回打 console,避免自触发死循环。
|
|
3781
|
+
*
|
|
3782
|
+
* 激活时机:由 SDK 默认单例初始化时调用(业务 `import '@heybox/hb-sdk'` 即生效);
|
|
3783
|
+
* iframe 标记由调试台 `iframe.name` 与 vite dev 注入的无依赖 bootstrap 共同设置。
|
|
3784
|
+
* 调试台页面自身(runtime 跑在这里,`[hb-sdk-runtime]` 日志不经过 iframe)另用
|
|
3785
|
+
* `installMiniDevConsoleSelfCapture` 接入「日志」页签(source: 'host')。
|
|
3786
|
+
*/
|
|
3787
|
+
const MINI_DEV_IFRAME_WINDOW_NAME = '__hb_sdk_mini_dev__';
|
|
3788
|
+
const MINI_DEV_CONSOLE_EVENT_TYPE = 'hb-sdk:mini-dev-console';
|
|
3789
|
+
/** 调试台页面与 iframe bootstrap 共用的已安装标记(window/console 上的属性名)。 */
|
|
3790
|
+
const MINI_DEV_CONSOLE_INSTALL_FLAG = '__hb_sdk_mini_dev_console_installed__';
|
|
3791
|
+
/** 调试台页面自捕获(source: 'host')与 iframe 转发共用的已安装标记。 */
|
|
3792
|
+
const INSTALL_FLAG = MINI_DEV_CONSOLE_INSTALL_FLAG;
|
|
3793
|
+
function isDevLoggingEnabled() {
|
|
3794
|
+
if (typeof false !== 'undefined' && false !== true) {
|
|
3795
|
+
return false;
|
|
3796
|
+
}
|
|
3797
|
+
return typeof window !== 'undefined' && window.name === MINI_DEV_IFRAME_WINDOW_NAME;
|
|
3798
|
+
}
|
|
3799
|
+
const levels = ['log', 'debug', 'info', 'warn', 'error'];
|
|
3800
|
+
function patchConsoleLevels(consoleRef, deliver, owner) {
|
|
3801
|
+
if (!owner || owner[INSTALL_FLAG] === true) {
|
|
3802
|
+
return false;
|
|
3803
|
+
}
|
|
3804
|
+
let patched = false;
|
|
3805
|
+
for (const level of levels) {
|
|
3806
|
+
const original = consoleRef[level];
|
|
3807
|
+
if (typeof original !== 'function') {
|
|
3808
|
+
continue;
|
|
3809
|
+
}
|
|
3810
|
+
const forward = function (...args) {
|
|
3811
|
+
try {
|
|
3812
|
+
deliver(level, args);
|
|
3813
|
+
}
|
|
3814
|
+
catch {
|
|
3815
|
+
/* 转发失败必须静默,禁止回打 console 造成自触发循环。 */
|
|
3816
|
+
}
|
|
3817
|
+
return original.apply(this, args);
|
|
3818
|
+
};
|
|
3819
|
+
try {
|
|
3820
|
+
consoleRef[level] = forward;
|
|
3821
|
+
patched = true;
|
|
3822
|
+
}
|
|
3823
|
+
catch {
|
|
3824
|
+
return patched;
|
|
3825
|
+
}
|
|
3826
|
+
}
|
|
3827
|
+
if (patched) {
|
|
3828
|
+
owner[INSTALL_FLAG] = true;
|
|
3829
|
+
}
|
|
3830
|
+
return patched;
|
|
3831
|
+
}
|
|
3832
|
+
function installMiniDevConsoleForwarding(consoleRef = console) {
|
|
3833
|
+
if (!isDevLoggingEnabled()) {
|
|
3834
|
+
return;
|
|
3835
|
+
}
|
|
3836
|
+
patchConsoleLevels(consoleRef, (level, args) => {
|
|
3837
|
+
const message = {
|
|
3838
|
+
type: MINI_DEV_CONSOLE_EVENT_TYPE,
|
|
3839
|
+
detail: { level, args, timestamp: Date.now() },
|
|
3840
|
+
};
|
|
3841
|
+
window.parent?.postMessage(message, '*');
|
|
3842
|
+
}, typeof window === 'undefined' ? undefined : window);
|
|
3843
|
+
}
|
|
3844
|
+
|
|
3755
3845
|
let defaultSDK = createMiniProgramSDK();
|
|
3846
|
+
// 开发期调试台 console 捕获:双条件门控(vite serve 注入 define + 调试 iframe 标记),
|
|
3847
|
+
// 生产构建被死代码消除,正式环境无副作用。失败静默,绝不影响 SDK 初始化。
|
|
3848
|
+
try {
|
|
3849
|
+
installMiniDevConsoleForwarding();
|
|
3850
|
+
}
|
|
3851
|
+
catch {
|
|
3852
|
+
/* 捕获层异常不得阻断 SDK 单例创建。 */
|
|
3853
|
+
}
|
|
3756
3854
|
function getDefaultSDK() {
|
|
3757
3855
|
if (!defaultSDK) {
|
|
3758
3856
|
defaultSDK = createMiniProgramSDK();
|
package/dist/index.esm.js
CHANGED
|
@@ -720,6 +720,20 @@ function isRecord$1(value) {
|
|
|
720
720
|
/** 当前用户信息与登录能力支持的完整 scope 目录。 */
|
|
721
721
|
const USER_INFO_AUTHORIZATION_SCOPES = ['identity', 'profile'];
|
|
722
722
|
|
|
723
|
+
const MINI_PROGRAM_PERMISSION_KEYS = [
|
|
724
|
+
'userInfo',
|
|
725
|
+
'steamLibrary',
|
|
726
|
+
'share',
|
|
727
|
+
'storage',
|
|
728
|
+
'filesystem',
|
|
729
|
+
'clipboard',
|
|
730
|
+
'leaderboard',
|
|
731
|
+
'network',
|
|
732
|
+
];
|
|
733
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
734
|
+
|
|
735
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
736
|
+
|
|
723
737
|
/** 获取浏览器全局 window。 */
|
|
724
738
|
function getGlobalWindow() {
|
|
725
739
|
return typeof window === 'undefined' ? undefined : window;
|
|
@@ -781,7 +795,7 @@ function createMessageId() {
|
|
|
781
795
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
782
796
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
783
797
|
? undefined
|
|
784
|
-
: '0.8.0
|
|
798
|
+
: '0.8.0';
|
|
785
799
|
|
|
786
800
|
const DEFAULT_TIMEOUT = 10000;
|
|
787
801
|
const HANDSHAKE_RETRY_INTERVAL = 250;
|
|
@@ -3748,7 +3762,91 @@ function createMiniProgramSDK(options) {
|
|
|
3748
3762
|
return new MiniProgramSDK(options);
|
|
3749
3763
|
}
|
|
3750
3764
|
|
|
3765
|
+
/**
|
|
3766
|
+
* iframe 与调试台页面的开发期 console 捕获转发。
|
|
3767
|
+
*
|
|
3768
|
+
* 双条件门控(iframe 转发):
|
|
3769
|
+
* 1. 构建期:`hb-sdk dev`(vite serve)注入 `false`;`hb-sdk build` /
|
|
3770
|
+
* `vite build`(生产)永不注入或替换为 `false`,本模块被死代码消除。
|
|
3771
|
+
* 2. 运行期:仅在 `window.name` 为 `__hb_sdk_mini_dev__` 的调试 iframe 中激活,
|
|
3772
|
+
* 用户设备上的正式运行环境没有该标记。
|
|
3773
|
+
*
|
|
3774
|
+
* 无侵入 patch `console.log/debug/info/warn/error`:原样放行(DevTools 不受影响)+
|
|
3775
|
+
* 通过 `window.parent.postMessage` 转发给调试台(CSP 的 connect-src 不约束 postMessage,
|
|
3776
|
+
* 网络上报由调试台页面代理)。发送全程静默:失败不得回打 console,避免自触发死循环。
|
|
3777
|
+
*
|
|
3778
|
+
* 激活时机:由 SDK 默认单例初始化时调用(业务 `import '@heybox/hb-sdk'` 即生效);
|
|
3779
|
+
* iframe 标记由调试台 `iframe.name` 与 vite dev 注入的无依赖 bootstrap 共同设置。
|
|
3780
|
+
* 调试台页面自身(runtime 跑在这里,`[hb-sdk-runtime]` 日志不经过 iframe)另用
|
|
3781
|
+
* `installMiniDevConsoleSelfCapture` 接入「日志」页签(source: 'host')。
|
|
3782
|
+
*/
|
|
3783
|
+
const MINI_DEV_IFRAME_WINDOW_NAME = '__hb_sdk_mini_dev__';
|
|
3784
|
+
const MINI_DEV_CONSOLE_EVENT_TYPE = 'hb-sdk:mini-dev-console';
|
|
3785
|
+
/** 调试台页面与 iframe bootstrap 共用的已安装标记(window/console 上的属性名)。 */
|
|
3786
|
+
const MINI_DEV_CONSOLE_INSTALL_FLAG = '__hb_sdk_mini_dev_console_installed__';
|
|
3787
|
+
/** 调试台页面自捕获(source: 'host')与 iframe 转发共用的已安装标记。 */
|
|
3788
|
+
const INSTALL_FLAG = MINI_DEV_CONSOLE_INSTALL_FLAG;
|
|
3789
|
+
function isDevLoggingEnabled() {
|
|
3790
|
+
if (typeof false !== 'undefined' && false !== true) {
|
|
3791
|
+
return false;
|
|
3792
|
+
}
|
|
3793
|
+
return typeof window !== 'undefined' && window.name === MINI_DEV_IFRAME_WINDOW_NAME;
|
|
3794
|
+
}
|
|
3795
|
+
const levels = ['log', 'debug', 'info', 'warn', 'error'];
|
|
3796
|
+
function patchConsoleLevels(consoleRef, deliver, owner) {
|
|
3797
|
+
if (!owner || owner[INSTALL_FLAG] === true) {
|
|
3798
|
+
return false;
|
|
3799
|
+
}
|
|
3800
|
+
let patched = false;
|
|
3801
|
+
for (const level of levels) {
|
|
3802
|
+
const original = consoleRef[level];
|
|
3803
|
+
if (typeof original !== 'function') {
|
|
3804
|
+
continue;
|
|
3805
|
+
}
|
|
3806
|
+
const forward = function (...args) {
|
|
3807
|
+
try {
|
|
3808
|
+
deliver(level, args);
|
|
3809
|
+
}
|
|
3810
|
+
catch {
|
|
3811
|
+
/* 转发失败必须静默,禁止回打 console 造成自触发循环。 */
|
|
3812
|
+
}
|
|
3813
|
+
return original.apply(this, args);
|
|
3814
|
+
};
|
|
3815
|
+
try {
|
|
3816
|
+
consoleRef[level] = forward;
|
|
3817
|
+
patched = true;
|
|
3818
|
+
}
|
|
3819
|
+
catch {
|
|
3820
|
+
return patched;
|
|
3821
|
+
}
|
|
3822
|
+
}
|
|
3823
|
+
if (patched) {
|
|
3824
|
+
owner[INSTALL_FLAG] = true;
|
|
3825
|
+
}
|
|
3826
|
+
return patched;
|
|
3827
|
+
}
|
|
3828
|
+
function installMiniDevConsoleForwarding(consoleRef = console) {
|
|
3829
|
+
if (!isDevLoggingEnabled()) {
|
|
3830
|
+
return;
|
|
3831
|
+
}
|
|
3832
|
+
patchConsoleLevels(consoleRef, (level, args) => {
|
|
3833
|
+
const message = {
|
|
3834
|
+
type: MINI_DEV_CONSOLE_EVENT_TYPE,
|
|
3835
|
+
detail: { level, args, timestamp: Date.now() },
|
|
3836
|
+
};
|
|
3837
|
+
window.parent?.postMessage(message, '*');
|
|
3838
|
+
}, typeof window === 'undefined' ? undefined : window);
|
|
3839
|
+
}
|
|
3840
|
+
|
|
3751
3841
|
let defaultSDK = createMiniProgramSDK();
|
|
3842
|
+
// 开发期调试台 console 捕获:双条件门控(vite serve 注入 define + 调试 iframe 标记),
|
|
3843
|
+
// 生产构建被死代码消除,正式环境无副作用。失败静默,绝不影响 SDK 初始化。
|
|
3844
|
+
try {
|
|
3845
|
+
installMiniDevConsoleForwarding();
|
|
3846
|
+
}
|
|
3847
|
+
catch {
|
|
3848
|
+
/* 捕获层异常不得阻断 SDK 单例创建。 */
|
|
3849
|
+
}
|
|
3752
3850
|
function getDefaultSDK() {
|
|
3753
3851
|
if (!defaultSDK) {
|
|
3754
3852
|
defaultSDK = createMiniProgramSDK();
|
package/dist/protocol.cjs.js
CHANGED
|
@@ -42,135 +42,249 @@ const CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.getCu
|
|
|
42
42
|
const CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.deleteCurrentUserEntry';
|
|
43
43
|
const CLOUD_LEADERBOARD_GET_INFO_METHOD = 'cloud.leaderboard.getInfo';
|
|
44
44
|
const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
45
|
-
{
|
|
46
|
-
|
|
45
|
+
{
|
|
46
|
+
method: AUTH_LOGIN_METHOD,
|
|
47
|
+
module: 'auth',
|
|
48
|
+
capability: AUTH_LOGIN_METHOD,
|
|
49
|
+
requirement: { kind: 'all', permissions: ['userInfo'] },
|
|
50
|
+
risk: 'medium',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
method: USER_GET_INFO_METHOD,
|
|
54
|
+
module: 'user',
|
|
55
|
+
capability: USER_GET_INFO_METHOD,
|
|
56
|
+
requirement: { kind: 'all', permissions: ['userInfo'] },
|
|
57
|
+
risk: 'medium',
|
|
58
|
+
},
|
|
47
59
|
{
|
|
48
60
|
method: USER_REVOKE_AUTHORIZATION_METHOD,
|
|
49
61
|
module: 'user',
|
|
50
62
|
capability: USER_REVOKE_AUTHORIZATION_METHOD,
|
|
51
|
-
|
|
63
|
+
requirement: { kind: 'none' },
|
|
52
64
|
risk: 'high',
|
|
53
65
|
},
|
|
54
66
|
{
|
|
55
67
|
method: USER_GET_STEAM_GAME_LIST_METHOD,
|
|
56
68
|
module: 'user',
|
|
57
69
|
capability: USER_GET_STEAM_GAME_LIST_METHOD,
|
|
58
|
-
|
|
70
|
+
requirement: { kind: 'all', permissions: ['steamLibrary'] },
|
|
59
71
|
risk: 'high',
|
|
60
72
|
},
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
73
|
+
{
|
|
74
|
+
method: SHARE_COPY_LINK_METHOD,
|
|
75
|
+
module: 'share',
|
|
76
|
+
capability: SHARE_COPY_LINK_METHOD,
|
|
77
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
78
|
+
risk: 'medium',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
method: SHARE_SHOW_SHARE_MENU_METHOD,
|
|
82
|
+
module: 'share',
|
|
83
|
+
capability: SHARE_SHOW_SHARE_MENU_METHOD,
|
|
84
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
85
|
+
risk: 'low',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
method: SHARE_SCREENSHOT_METHOD,
|
|
89
|
+
module: 'share',
|
|
90
|
+
capability: SHARE_SCREENSHOT_METHOD,
|
|
91
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
92
|
+
risk: 'medium',
|
|
93
|
+
},
|
|
64
94
|
{
|
|
65
95
|
method: VIEWPORT_GET_WINDOW_INFO_METHOD,
|
|
66
96
|
module: 'viewport',
|
|
67
97
|
capability: VIEWPORT_GET_WINDOW_INFO_METHOD,
|
|
68
|
-
|
|
98
|
+
requirement: { kind: 'none' },
|
|
69
99
|
risk: 'low',
|
|
70
100
|
},
|
|
71
101
|
{
|
|
72
102
|
method: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
|
|
73
103
|
module: 'viewport',
|
|
74
104
|
capability: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
|
|
75
|
-
|
|
105
|
+
requirement: { kind: 'none' },
|
|
76
106
|
risk: 'low',
|
|
77
107
|
},
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
108
|
+
{
|
|
109
|
+
method: STORAGE_GET_STORAGE_METHOD,
|
|
110
|
+
module: 'storage',
|
|
111
|
+
capability: STORAGE_GET_STORAGE_METHOD,
|
|
112
|
+
requirement: { kind: 'all', permissions: ['storage'] },
|
|
113
|
+
risk: 'low',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
method: STORAGE_SET_STORAGE_METHOD,
|
|
117
|
+
module: 'storage',
|
|
118
|
+
capability: STORAGE_SET_STORAGE_METHOD,
|
|
119
|
+
requirement: { kind: 'all', permissions: ['storage'] },
|
|
120
|
+
risk: 'medium',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
method: NETWORK_REQUEST_METHOD,
|
|
124
|
+
module: 'network',
|
|
125
|
+
capability: NETWORK_REQUEST_METHOD,
|
|
126
|
+
requirement: { kind: 'all', permissions: ['network'] },
|
|
127
|
+
risk: 'high',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
method: NETWORK_DOWNLOAD_METHOD,
|
|
131
|
+
module: 'network',
|
|
132
|
+
capability: NETWORK_DOWNLOAD_METHOD,
|
|
133
|
+
requirement: { kind: 'all', permissions: ['network', 'filesystem'] },
|
|
134
|
+
risk: 'high',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
method: FILES_PICK_FILES_METHOD,
|
|
138
|
+
module: 'files',
|
|
139
|
+
capability: FILES_PICK_FILES_METHOD,
|
|
140
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
141
|
+
risk: 'high',
|
|
142
|
+
},
|
|
83
143
|
{
|
|
84
144
|
method: FILES_PICK_DIRECTORY_METHOD,
|
|
85
145
|
module: 'files',
|
|
86
146
|
capability: FILES_PICK_DIRECTORY_METHOD,
|
|
87
|
-
|
|
147
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
148
|
+
risk: 'high',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
method: FILES_SAVE_FILE_METHOD,
|
|
152
|
+
module: 'files',
|
|
153
|
+
capability: FILES_SAVE_FILE_METHOD,
|
|
154
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
155
|
+
risk: 'high',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
method: FILE_CREATE_METHOD,
|
|
159
|
+
module: 'file',
|
|
160
|
+
capability: FILE_CREATE_METHOD,
|
|
161
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
162
|
+
risk: 'high',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
method: FILE_REMOVE_METHOD,
|
|
166
|
+
module: 'file',
|
|
167
|
+
capability: FILE_REMOVE_METHOD,
|
|
168
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
88
169
|
risk: 'high',
|
|
89
170
|
},
|
|
90
|
-
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
{
|
|
98
|
-
|
|
171
|
+
{
|
|
172
|
+
method: FILE_EXISTS_METHOD,
|
|
173
|
+
module: 'file',
|
|
174
|
+
capability: FILE_EXISTS_METHOD,
|
|
175
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
176
|
+
risk: 'high',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
method: FILE_READ_TEXT_METHOD,
|
|
180
|
+
module: 'file',
|
|
181
|
+
capability: FILE_READ_TEXT_METHOD,
|
|
182
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
183
|
+
risk: 'high',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
method: FILE_WRITE_TEXT_METHOD,
|
|
187
|
+
module: 'file',
|
|
188
|
+
capability: FILE_WRITE_TEXT_METHOD,
|
|
189
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
190
|
+
risk: 'high',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
method: FILE_READ_BYTES_METHOD,
|
|
194
|
+
module: 'file',
|
|
195
|
+
capability: FILE_READ_BYTES_METHOD,
|
|
196
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
197
|
+
risk: 'high',
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
method: FILE_WRITE_BYTES_METHOD,
|
|
201
|
+
module: 'file',
|
|
202
|
+
capability: FILE_WRITE_BYTES_METHOD,
|
|
203
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
204
|
+
risk: 'high',
|
|
205
|
+
},
|
|
206
|
+
{ method: FILE_STAT_METHOD, module: 'file', capability: FILE_STAT_METHOD, requirement: { kind: 'all', permissions: ['filesystem'] }, risk: 'high' },
|
|
99
207
|
{
|
|
100
208
|
method: DIRECTORY_CREATE_METHOD,
|
|
101
209
|
module: 'directory',
|
|
102
210
|
capability: DIRECTORY_CREATE_METHOD,
|
|
103
|
-
|
|
211
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
104
212
|
risk: 'high',
|
|
105
213
|
},
|
|
106
214
|
{
|
|
107
215
|
method: DIRECTORY_REMOVE_METHOD,
|
|
108
216
|
module: 'directory',
|
|
109
217
|
capability: DIRECTORY_REMOVE_METHOD,
|
|
110
|
-
|
|
218
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
111
219
|
risk: 'high',
|
|
112
220
|
},
|
|
113
221
|
{
|
|
114
222
|
method: DIRECTORY_EXISTS_METHOD,
|
|
115
223
|
module: 'directory',
|
|
116
224
|
capability: DIRECTORY_EXISTS_METHOD,
|
|
117
|
-
|
|
225
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
226
|
+
risk: 'high',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
method: DIRECTORY_LIST_METHOD,
|
|
230
|
+
module: 'directory',
|
|
231
|
+
capability: DIRECTORY_LIST_METHOD,
|
|
232
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
118
233
|
risk: 'high',
|
|
119
234
|
},
|
|
120
|
-
{ method:
|
|
121
|
-
{ method:
|
|
122
|
-
{ method:
|
|
123
|
-
{ method:
|
|
124
|
-
{ method: DEVICE_VIBRATE_METHOD, module: 'device', capability: DEVICE_VIBRATE_METHOD, permission: 'device.vibrate', risk: 'low' },
|
|
235
|
+
{ method: UI_SHOW_TOAST_METHOD, module: 'ui', capability: UI_SHOW_TOAST_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
236
|
+
{ method: UI_SHOW_LOADING_METHOD, module: 'ui', capability: UI_SHOW_LOADING_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
237
|
+
{ method: UI_HIDE_LOADING_METHOD, module: 'ui', capability: UI_HIDE_LOADING_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
238
|
+
{ method: DEVICE_VIBRATE_METHOD, module: 'device', capability: DEVICE_VIBRATE_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
125
239
|
{
|
|
126
240
|
method: DEVICE_SET_CLIPBOARD_METHOD,
|
|
127
241
|
module: 'device',
|
|
128
242
|
capability: DEVICE_SET_CLIPBOARD_METHOD,
|
|
129
|
-
|
|
243
|
+
requirement: { kind: 'all', permissions: ['clipboard'] },
|
|
130
244
|
risk: 'medium',
|
|
131
245
|
},
|
|
132
|
-
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD,
|
|
133
|
-
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD,
|
|
246
|
+
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
247
|
+
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
134
248
|
{
|
|
135
249
|
method: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
136
250
|
module: 'navigation',
|
|
137
251
|
capability: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
138
|
-
|
|
252
|
+
requirement: { kind: 'none' },
|
|
139
253
|
risk: 'medium',
|
|
140
254
|
},
|
|
141
255
|
{
|
|
142
256
|
method: CLOUD_LEADERBOARD_SUBMIT_METHOD,
|
|
143
257
|
module: 'cloud',
|
|
144
258
|
capability: CLOUD_LEADERBOARD_SUBMIT_METHOD,
|
|
145
|
-
|
|
259
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
146
260
|
risk: 'medium',
|
|
147
261
|
},
|
|
148
262
|
{
|
|
149
263
|
method: CLOUD_LEADERBOARD_GET_LIST_METHOD,
|
|
150
264
|
module: 'cloud',
|
|
151
265
|
capability: CLOUD_LEADERBOARD_GET_LIST_METHOD,
|
|
152
|
-
|
|
266
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
153
267
|
risk: 'low',
|
|
154
268
|
},
|
|
155
269
|
{
|
|
156
270
|
method: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
|
|
157
271
|
module: 'cloud',
|
|
158
272
|
capability: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
|
|
159
|
-
|
|
273
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
160
274
|
risk: 'medium',
|
|
161
275
|
},
|
|
162
276
|
{
|
|
163
277
|
method: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
|
|
164
278
|
module: 'cloud',
|
|
165
279
|
capability: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
|
|
166
|
-
|
|
280
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
167
281
|
risk: 'medium',
|
|
168
282
|
},
|
|
169
283
|
{
|
|
170
284
|
method: CLOUD_LEADERBOARD_GET_INFO_METHOD,
|
|
171
285
|
module: 'cloud',
|
|
172
286
|
capability: CLOUD_LEADERBOARD_GET_INFO_METHOD,
|
|
173
|
-
|
|
287
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
174
288
|
risk: 'low',
|
|
175
289
|
},
|
|
176
290
|
];
|
|
@@ -315,7 +429,19 @@ function isRecord$1(value) {
|
|
|
315
429
|
/** 当前用户信息与登录能力支持的完整 scope 目录。 */
|
|
316
430
|
const USER_INFO_AUTHORIZATION_SCOPES = ['identity', 'profile'];
|
|
317
431
|
|
|
318
|
-
const
|
|
432
|
+
const MINI_PROGRAM_PERMISSION_KEYS = [
|
|
433
|
+
'userInfo',
|
|
434
|
+
'steamLibrary',
|
|
435
|
+
'share',
|
|
436
|
+
'storage',
|
|
437
|
+
'filesystem',
|
|
438
|
+
'clipboard',
|
|
439
|
+
'leaderboard',
|
|
440
|
+
'network',
|
|
441
|
+
];
|
|
442
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
443
|
+
|
|
444
|
+
const MANAGED_RUNTIME_PERMISSION_KEYS = new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
319
445
|
function isManagedMiniProgramRuntimePermissionKey(key) {
|
|
320
446
|
return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
|
|
321
447
|
}
|
|
@@ -332,20 +458,36 @@ function parseMiniProgramRuntimePermissions(snapshot) {
|
|
|
332
458
|
if (!isRecord(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
|
|
333
459
|
return { valid: false, permissions: {} };
|
|
334
460
|
}
|
|
335
|
-
const
|
|
336
|
-
|
|
461
|
+
const inputKey = rawEntry.key.trim();
|
|
462
|
+
const key = inputKey === 'network.request' ? 'network' : inputKey;
|
|
463
|
+
if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled')) {
|
|
337
464
|
return { valid: false, permissions: {} };
|
|
338
465
|
}
|
|
339
466
|
seenKeys.add(key);
|
|
340
|
-
if (!isManagedMiniProgramRuntimePermissionKey(key))
|
|
467
|
+
if (!isManagedMiniProgramRuntimePermissionKey(key)) {
|
|
468
|
+
if (!isRecord(rawEntry.config))
|
|
469
|
+
return { valid: false, permissions: {} };
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
472
|
+
if (key === 'network') {
|
|
473
|
+
const config = rawEntry.config;
|
|
474
|
+
if (!isRecord(config) || typeof config.useOfficialDomain !== 'boolean') {
|
|
475
|
+
return { valid: false, permissions: {} };
|
|
476
|
+
}
|
|
477
|
+
permissions[key] = {
|
|
478
|
+
key,
|
|
479
|
+
status: rawEntry.status,
|
|
480
|
+
config: { useOfficialDomain: config.useOfficialDomain },
|
|
481
|
+
};
|
|
341
482
|
continue;
|
|
342
|
-
|
|
483
|
+
}
|
|
484
|
+
if (rawEntry.config !== null && rawEntry.config !== undefined && (!isRecord(rawEntry.config) || Object.keys(rawEntry.config).length > 0)) {
|
|
343
485
|
return { valid: false, permissions: {} };
|
|
344
486
|
}
|
|
345
487
|
permissions[key] = {
|
|
346
488
|
key,
|
|
347
489
|
status: rawEntry.status,
|
|
348
|
-
config: {
|
|
490
|
+
config: {},
|
|
349
491
|
};
|
|
350
492
|
}
|
|
351
493
|
return { valid: true, permissions };
|