@heybox/hb-sdk 0.7.5-alpha.0 → 0.8.0-alpha.2
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 +86 -0
- package/README.md +69 -16
- package/THIRD_PARTY_NOTICES.md +1755 -0
- package/dist/cli-chunks/{build-V1YBdpzY.cjs → build-CCLWgXyA.cjs} +6 -5
- package/dist/cli-chunks/{context-Ba1Je-wT.cjs → context-Brh56h56.cjs} +2 -27
- package/dist/cli-chunks/{create-CKGjqo9E.cjs → create-BZ-hi2s1.cjs} +1 -1
- package/dist/cli-chunks/{dev-XopYKLYZ.cjs → dev-CoSXtEYa.cjs} +336 -517
- package/dist/cli-chunks/{doctor-BHbrYQqT.cjs → doctor-EsCYJGhV.cjs} +1 -1
- package/dist/cli-chunks/{index-C9mpajVG.cjs → index-BL5eEPap.cjs} +14 -14
- package/dist/cli-chunks/{index-DKWfX6Ut.cjs → index-CS6Q0o5C.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-SXAQ3WVR.cjs → index.esm-BoBHPfpq.cjs} +6 -6
- package/dist/cli-chunks/{login-BVWicWqe.cjs → login-CILLxGuf.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CBb38HJ3.cjs → project-vite-Qu6Xe9Dn.cjs} +1 -1
- package/dist/cli-chunks/{remote-BG1u0NKT.cjs → remote-DRuTQ51u.cjs} +10 -8
- package/dist/cli-chunks/{runtime-gate-CtV7rWyX.cjs → runtime-gate-DFjw66kF.cjs} +20 -1
- package/dist/cli-chunks/{runtime-permission-env-D-8_jPG3.cjs → runtime-permission-env-CjsCe5bp.cjs} +13 -13
- package/dist/cli-chunks/{session-CJS_SEp9.cjs → session-D-_N3WVL.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-uq-Wac6k.js +97 -0
- package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
- package/dist/devtools/browser-dev-host/assets/index-CeP6SLB3.js +567 -0
- package/dist/devtools/browser-dev-host/assets/index-KD2f3Jdz.css +1 -0
- package/dist/devtools/browser-dev-host/assets/workbench-state-D-1U0JRq.js +5 -0
- package/dist/devtools/browser-dev-host/index.html +6 -435
- package/dist/index.cjs.js +1036 -90
- package/dist/index.esm.js +1036 -91
- package/dist/miniapp-publish.cjs.js +13 -13
- package/dist/miniapp-publish.esm.js +13 -13
- package/dist/protocol.cjs.js +208 -6
- package/dist/protocol.esm.js +182 -7
- package/dist/templates/vue3-vite-ts/README.md.ejs +2 -0
- package/dist/templates/vue3-vite-ts/vite.config.ts +1 -1
- package/dist/vite.cjs.js +31 -4
- package/dist/vite.esm.js +31 -5
- package/package.json +28 -11
- package/skill/SKILL.md +9 -5
- package/skill/references/api-protocol.md +111 -3
- package/skill/references/api-root.md +170 -22
- package/skill/references/cli.md +21 -17
- package/skill/references/examples.md +30 -1
- package/skill/references/recipes.md +105 -1
- package/skill/references/safety-boundaries.md +12 -1
- package/skill/scripts/sync-references.mjs +37 -3
- package/skill/skill.json +4 -4
- package/types/core/client.d.ts +17 -1
- package/types/core/errors.d.ts +5 -5
- package/types/core/sdk.d.ts +8 -5
- package/types/core/singleton.d.ts +59 -6
- package/types/index.d.ts +4 -2
- package/types/miniapp-manifest/schema.d.ts +5 -0
- package/types/miniapp-publish/index.d.ts +8 -8
- package/types/modules/auth/index.d.ts +15 -1
- package/types/modules/cloud/index.d.ts +75 -5
- package/types/modules/device/index.d.ts +31 -3
- package/types/modules/files/index.d.ts +5 -0
- package/types/modules/files/registry.d.ts +35 -0
- package/types/modules/files/types.d.ts +159 -0
- package/types/modules/navigation/index.d.ts +46 -4
- package/types/modules/network/index.d.ts +72 -14
- package/types/modules/share/copy-link.d.ts +3 -3
- package/types/modules/share/index.d.ts +61 -5
- package/types/modules/share/screenshot.d.ts +3 -3
- package/types/modules/share/show-share-menu.d.ts +3 -3
- package/types/modules/storage/index.d.ts +38 -10
- package/types/modules/ui/index.d.ts +46 -4
- package/types/modules/user/get-info.d.ts +1 -1
- package/types/modules/user/index.d.ts +46 -4
- package/types/modules/user/steam-game-list.d.ts +2 -2
- package/types/modules/viewport/index.d.ts +36 -8
- package/types/protocol/capabilities.d.ts +2 -2
- package/types/protocol/constants.d.ts +1 -1
- package/types/protocol/guards.d.ts +1 -1
- package/types/protocol/types.d.ts +1 -1
- package/types/protocol.d.ts +4 -3
- package/types/vite/index.d.ts +15 -7
- package/dist/devtools/browser-dev-host/main.js +0 -12158
|
@@ -2937,7 +2937,7 @@ function shouldUploadDistFile(relativePath) {
|
|
|
2937
2937
|
/**
|
|
2938
2938
|
* 校验构建产物路径和大小,并按路径 UTF-8 字节序排序。
|
|
2939
2939
|
*
|
|
2940
|
-
* @param files 待处理的构建产物文件。
|
|
2940
|
+
* @param files - 待处理的构建产物文件。
|
|
2941
2941
|
* @returns 保留输入附加字段的有序文件列表。
|
|
2942
2942
|
* @throws 路径不规范、路径重复或文件大小非法时抛出错误。
|
|
2943
2943
|
*/
|
|
@@ -2946,7 +2946,7 @@ function prepareMiniappArtifactFiles(files) {
|
|
|
2946
2946
|
throw new Error('构建产物文件数量超出签名协议上限');
|
|
2947
2947
|
}
|
|
2948
2948
|
const usedPaths = new Set();
|
|
2949
|
-
const prepared = files.map(file => {
|
|
2949
|
+
const prepared = files.map((file) => {
|
|
2950
2950
|
const relativePath = normalizeMiniappArtifactRelativePath(file.relativePath);
|
|
2951
2951
|
if (usedPaths.has(relativePath)) {
|
|
2952
2952
|
throw new Error(`构建产物包含重复文件路径:${relativePath}`);
|
|
@@ -2960,15 +2960,15 @@ function prepareMiniappArtifactFiles(files) {
|
|
|
2960
2960
|
/**
|
|
2961
2961
|
* 按服务端 session key 前缀校验最终上传路径的 UTF-8 字节长度。
|
|
2962
2962
|
*
|
|
2963
|
-
* @param files 待上传的构建产物文件。
|
|
2964
|
-
* @param options 小程序和长度限制配置。
|
|
2963
|
+
* @param files - 待上传的构建产物文件。
|
|
2964
|
+
* @param options - 小程序和长度限制配置。
|
|
2965
2965
|
* @returns 第一个超长路径的错误提示;全部合法时返回 `undefined`。
|
|
2966
2966
|
*/
|
|
2967
2967
|
function validateMiniappUploadPathLengths(files, options) {
|
|
2968
2968
|
const maxLength = options.maxLength ?? ACTIVITY_UPLOAD_KEY_MAX_LENGTH;
|
|
2969
2969
|
const prefix = `/u/${getMiniProgramUploadAlias(options.miniProgramId)}/${'x'.repeat(MINIAPP_UPLOAD_SESSION_REF_LENGTH)}/`;
|
|
2970
2970
|
const prefixLength = textEncoder.encode(prefix).length;
|
|
2971
|
-
const tooLongFile = files.find(file => {
|
|
2971
|
+
const tooLongFile = files.find((file) => {
|
|
2972
2972
|
const relativePath = normalizeMiniappArtifactRelativePath(file.relativePath);
|
|
2973
2973
|
return prefixLength + textEncoder.encode(relativePath).length > maxLength;
|
|
2974
2974
|
});
|
|
@@ -2977,7 +2977,7 @@ function validateMiniappUploadPathLengths(files, options) {
|
|
|
2977
2977
|
/**
|
|
2978
2978
|
* 创建 v1 整包签名头。
|
|
2979
2979
|
*
|
|
2980
|
-
* @param fileCount 参与签名的文件数量。
|
|
2980
|
+
* @param fileCount - 参与签名的文件数量。
|
|
2981
2981
|
* @returns 包含协议标识和文件数量的字节数组。
|
|
2982
2982
|
* @throws 文件数量超出协议范围时抛出错误。
|
|
2983
2983
|
*/
|
|
@@ -2990,7 +2990,7 @@ function createMiniappArtifactSignatureHeader(fileCount) {
|
|
|
2990
2990
|
/**
|
|
2991
2991
|
* 创建单个文件的 v1 framing header。
|
|
2992
2992
|
*
|
|
2993
|
-
* @param file 已规范化或待校验的构建产物文件。
|
|
2993
|
+
* @param file - 已规范化或待校验的构建产物文件。
|
|
2994
2994
|
* @returns 包含路径长度、路径和文件大小的字节数组。
|
|
2995
2995
|
* @throws 文件路径或大小非法时抛出错误。
|
|
2996
2996
|
*/
|
|
@@ -3003,9 +3003,9 @@ function createMiniappArtifactFileHeader(file) {
|
|
|
3003
3003
|
/**
|
|
3004
3004
|
* 校验服务端 session 文件映射,并计算仍需上传的文件。
|
|
3005
3005
|
*
|
|
3006
|
-
* @param localFiles 本地构建产物文件。
|
|
3007
|
-
* @param serverFiles 服务端签发的文件映射。
|
|
3008
|
-
* @param uploadedKeys 服务端已确认上传成功的 key。
|
|
3006
|
+
* @param localFiles - 本地构建产物文件。
|
|
3007
|
+
* @param serverFiles - 服务端签发的文件映射。
|
|
3008
|
+
* @param uploadedKeys - 服务端已确认上传成功的 key。
|
|
3009
3009
|
* @returns 完整映射、待上传文件和已确认 key。
|
|
3010
3010
|
* @throws 服务端映射与本地产物不一致时抛出错误。
|
|
3011
3011
|
*/
|
|
@@ -3037,7 +3037,7 @@ function resolveMiniappUploadSessionFiles(localFiles, serverFiles, uploadedKeys)
|
|
|
3037
3037
|
serverSizes.set(relativePath, size);
|
|
3038
3038
|
knownKeys.add(key);
|
|
3039
3039
|
}
|
|
3040
|
-
const files = preparedFiles.map(file => {
|
|
3040
|
+
const files = preparedFiles.map((file) => {
|
|
3041
3041
|
const key = mappings.get(file.relativePath);
|
|
3042
3042
|
if (!key) {
|
|
3043
3043
|
throw new Error(`上传会话缺少文件映射:${file.relativePath}`);
|
|
@@ -3057,7 +3057,7 @@ function resolveMiniappUploadSessionFiles(localFiles, serverFiles, uploadedKeys)
|
|
|
3057
3057
|
}
|
|
3058
3058
|
return {
|
|
3059
3059
|
files,
|
|
3060
|
-
missingFiles: files.filter(file => !completed.has(file.key)),
|
|
3060
|
+
missingFiles: files.filter((file) => !completed.has(file.key)),
|
|
3061
3061
|
uploadedKeys: [...completed],
|
|
3062
3062
|
};
|
|
3063
3063
|
}
|
|
@@ -3075,7 +3075,7 @@ function normalizeMiniappArtifactRelativePath(relativePath) {
|
|
|
3075
3075
|
if (containsControlCharacter(value) || UNPAIRED_SURROGATE_PATTERN.test(value)) {
|
|
3076
3076
|
throw new Error(`构建产物路径包含非法字符:${value}`);
|
|
3077
3077
|
}
|
|
3078
|
-
if (value.split('/').some(segment => !segment || segment === '.' || segment === '..')) {
|
|
3078
|
+
if (value.split('/').some((segment) => !segment || segment === '.' || segment === '..')) {
|
|
3079
3079
|
throw new Error(`构建产物路径包含非法目录段:${value}`);
|
|
3080
3080
|
}
|
|
3081
3081
|
if (value.includes(',')) {
|
|
@@ -2935,7 +2935,7 @@ function shouldUploadDistFile(relativePath) {
|
|
|
2935
2935
|
/**
|
|
2936
2936
|
* 校验构建产物路径和大小,并按路径 UTF-8 字节序排序。
|
|
2937
2937
|
*
|
|
2938
|
-
* @param files 待处理的构建产物文件。
|
|
2938
|
+
* @param files - 待处理的构建产物文件。
|
|
2939
2939
|
* @returns 保留输入附加字段的有序文件列表。
|
|
2940
2940
|
* @throws 路径不规范、路径重复或文件大小非法时抛出错误。
|
|
2941
2941
|
*/
|
|
@@ -2944,7 +2944,7 @@ function prepareMiniappArtifactFiles(files) {
|
|
|
2944
2944
|
throw new Error('构建产物文件数量超出签名协议上限');
|
|
2945
2945
|
}
|
|
2946
2946
|
const usedPaths = new Set();
|
|
2947
|
-
const prepared = files.map(file => {
|
|
2947
|
+
const prepared = files.map((file) => {
|
|
2948
2948
|
const relativePath = normalizeMiniappArtifactRelativePath(file.relativePath);
|
|
2949
2949
|
if (usedPaths.has(relativePath)) {
|
|
2950
2950
|
throw new Error(`构建产物包含重复文件路径:${relativePath}`);
|
|
@@ -2958,15 +2958,15 @@ function prepareMiniappArtifactFiles(files) {
|
|
|
2958
2958
|
/**
|
|
2959
2959
|
* 按服务端 session key 前缀校验最终上传路径的 UTF-8 字节长度。
|
|
2960
2960
|
*
|
|
2961
|
-
* @param files 待上传的构建产物文件。
|
|
2962
|
-
* @param options 小程序和长度限制配置。
|
|
2961
|
+
* @param files - 待上传的构建产物文件。
|
|
2962
|
+
* @param options - 小程序和长度限制配置。
|
|
2963
2963
|
* @returns 第一个超长路径的错误提示;全部合法时返回 `undefined`。
|
|
2964
2964
|
*/
|
|
2965
2965
|
function validateMiniappUploadPathLengths(files, options) {
|
|
2966
2966
|
const maxLength = options.maxLength ?? ACTIVITY_UPLOAD_KEY_MAX_LENGTH;
|
|
2967
2967
|
const prefix = `/u/${getMiniProgramUploadAlias(options.miniProgramId)}/${'x'.repeat(MINIAPP_UPLOAD_SESSION_REF_LENGTH)}/`;
|
|
2968
2968
|
const prefixLength = textEncoder.encode(prefix).length;
|
|
2969
|
-
const tooLongFile = files.find(file => {
|
|
2969
|
+
const tooLongFile = files.find((file) => {
|
|
2970
2970
|
const relativePath = normalizeMiniappArtifactRelativePath(file.relativePath);
|
|
2971
2971
|
return prefixLength + textEncoder.encode(relativePath).length > maxLength;
|
|
2972
2972
|
});
|
|
@@ -2975,7 +2975,7 @@ function validateMiniappUploadPathLengths(files, options) {
|
|
|
2975
2975
|
/**
|
|
2976
2976
|
* 创建 v1 整包签名头。
|
|
2977
2977
|
*
|
|
2978
|
-
* @param fileCount 参与签名的文件数量。
|
|
2978
|
+
* @param fileCount - 参与签名的文件数量。
|
|
2979
2979
|
* @returns 包含协议标识和文件数量的字节数组。
|
|
2980
2980
|
* @throws 文件数量超出协议范围时抛出错误。
|
|
2981
2981
|
*/
|
|
@@ -2988,7 +2988,7 @@ function createMiniappArtifactSignatureHeader(fileCount) {
|
|
|
2988
2988
|
/**
|
|
2989
2989
|
* 创建单个文件的 v1 framing header。
|
|
2990
2990
|
*
|
|
2991
|
-
* @param file 已规范化或待校验的构建产物文件。
|
|
2991
|
+
* @param file - 已规范化或待校验的构建产物文件。
|
|
2992
2992
|
* @returns 包含路径长度、路径和文件大小的字节数组。
|
|
2993
2993
|
* @throws 文件路径或大小非法时抛出错误。
|
|
2994
2994
|
*/
|
|
@@ -3001,9 +3001,9 @@ function createMiniappArtifactFileHeader(file) {
|
|
|
3001
3001
|
/**
|
|
3002
3002
|
* 校验服务端 session 文件映射,并计算仍需上传的文件。
|
|
3003
3003
|
*
|
|
3004
|
-
* @param localFiles 本地构建产物文件。
|
|
3005
|
-
* @param serverFiles 服务端签发的文件映射。
|
|
3006
|
-
* @param uploadedKeys 服务端已确认上传成功的 key。
|
|
3004
|
+
* @param localFiles - 本地构建产物文件。
|
|
3005
|
+
* @param serverFiles - 服务端签发的文件映射。
|
|
3006
|
+
* @param uploadedKeys - 服务端已确认上传成功的 key。
|
|
3007
3007
|
* @returns 完整映射、待上传文件和已确认 key。
|
|
3008
3008
|
* @throws 服务端映射与本地产物不一致时抛出错误。
|
|
3009
3009
|
*/
|
|
@@ -3035,7 +3035,7 @@ function resolveMiniappUploadSessionFiles(localFiles, serverFiles, uploadedKeys)
|
|
|
3035
3035
|
serverSizes.set(relativePath, size);
|
|
3036
3036
|
knownKeys.add(key);
|
|
3037
3037
|
}
|
|
3038
|
-
const files = preparedFiles.map(file => {
|
|
3038
|
+
const files = preparedFiles.map((file) => {
|
|
3039
3039
|
const key = mappings.get(file.relativePath);
|
|
3040
3040
|
if (!key) {
|
|
3041
3041
|
throw new Error(`上传会话缺少文件映射:${file.relativePath}`);
|
|
@@ -3055,7 +3055,7 @@ function resolveMiniappUploadSessionFiles(localFiles, serverFiles, uploadedKeys)
|
|
|
3055
3055
|
}
|
|
3056
3056
|
return {
|
|
3057
3057
|
files,
|
|
3058
|
-
missingFiles: files.filter(file => !completed.has(file.key)),
|
|
3058
|
+
missingFiles: files.filter((file) => !completed.has(file.key)),
|
|
3059
3059
|
uploadedKeys: [...completed],
|
|
3060
3060
|
};
|
|
3061
3061
|
}
|
|
@@ -3073,7 +3073,7 @@ function normalizeMiniappArtifactRelativePath(relativePath) {
|
|
|
3073
3073
|
if (containsControlCharacter(value) || UNPAIRED_SURROGATE_PATTERN.test(value)) {
|
|
3074
3074
|
throw new Error(`构建产物路径包含非法字符:${value}`);
|
|
3075
3075
|
}
|
|
3076
|
-
if (value.split('/').some(segment => !segment || segment === '.' || segment === '..')) {
|
|
3076
|
+
if (value.split('/').some((segment) => !segment || segment === '.' || segment === '..')) {
|
|
3077
3077
|
throw new Error(`构建产物路径包含非法目录段:${value}`);
|
|
3078
3078
|
}
|
|
3079
3079
|
if (value.includes(',')) {
|
package/dist/protocol.cjs.js
CHANGED
|
@@ -12,6 +12,22 @@ const VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD = 'viewport.setNavigationBarStyle
|
|
|
12
12
|
const STORAGE_GET_STORAGE_METHOD = 'storage.getStorage';
|
|
13
13
|
const STORAGE_SET_STORAGE_METHOD = 'storage.setStorage';
|
|
14
14
|
const NETWORK_REQUEST_METHOD = 'network.request';
|
|
15
|
+
const NETWORK_DOWNLOAD_METHOD = 'network.download';
|
|
16
|
+
const FILES_PICK_FILES_METHOD = 'files.pickFiles';
|
|
17
|
+
const FILES_PICK_DIRECTORY_METHOD = 'files.pickDirectory';
|
|
18
|
+
const FILES_SAVE_FILE_METHOD = 'files.saveFile';
|
|
19
|
+
const FILE_CREATE_METHOD = 'file.create';
|
|
20
|
+
const FILE_REMOVE_METHOD = 'file.remove';
|
|
21
|
+
const FILE_EXISTS_METHOD = 'file.exists';
|
|
22
|
+
const FILE_READ_TEXT_METHOD = 'file.readText';
|
|
23
|
+
const FILE_WRITE_TEXT_METHOD = 'file.writeText';
|
|
24
|
+
const FILE_READ_BYTES_METHOD = 'file.readBytes';
|
|
25
|
+
const FILE_WRITE_BYTES_METHOD = 'file.writeBytes';
|
|
26
|
+
const FILE_STAT_METHOD = 'file.stat';
|
|
27
|
+
const DIRECTORY_CREATE_METHOD = 'directory.create';
|
|
28
|
+
const DIRECTORY_REMOVE_METHOD = 'directory.remove';
|
|
29
|
+
const DIRECTORY_EXISTS_METHOD = 'directory.exists';
|
|
30
|
+
const DIRECTORY_LIST_METHOD = 'directory.list';
|
|
15
31
|
const UI_SHOW_TOAST_METHOD = 'ui.showToast';
|
|
16
32
|
const UI_SHOW_LOADING_METHOD = 'ui.showLoading';
|
|
17
33
|
const UI_HIDE_LOADING_METHOD = 'ui.hideLoading';
|
|
@@ -62,6 +78,46 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
|
62
78
|
{ method: STORAGE_GET_STORAGE_METHOD, module: 'storage', capability: STORAGE_GET_STORAGE_METHOD, permission: 'storage.read', risk: 'low' },
|
|
63
79
|
{ method: STORAGE_SET_STORAGE_METHOD, module: 'storage', capability: STORAGE_SET_STORAGE_METHOD, permission: 'storage.write', risk: 'medium' },
|
|
64
80
|
{ method: NETWORK_REQUEST_METHOD, module: 'network', capability: NETWORK_REQUEST_METHOD, permission: 'network.request', risk: 'high' },
|
|
81
|
+
{ method: NETWORK_DOWNLOAD_METHOD, module: 'network', capability: NETWORK_DOWNLOAD_METHOD, permission: 'network.request', risk: 'high' },
|
|
82
|
+
{ method: FILES_PICK_FILES_METHOD, module: 'files', capability: FILES_PICK_FILES_METHOD, permission: 'files.external', risk: 'high' },
|
|
83
|
+
{
|
|
84
|
+
method: FILES_PICK_DIRECTORY_METHOD,
|
|
85
|
+
module: 'files',
|
|
86
|
+
capability: FILES_PICK_DIRECTORY_METHOD,
|
|
87
|
+
permission: 'files.external',
|
|
88
|
+
risk: 'high',
|
|
89
|
+
},
|
|
90
|
+
{ method: FILES_SAVE_FILE_METHOD, module: 'files', capability: FILES_SAVE_FILE_METHOD, permission: 'files.external', risk: 'high' },
|
|
91
|
+
{ method: FILE_CREATE_METHOD, module: 'file', capability: FILE_CREATE_METHOD, permission: 'files.access', risk: 'high' },
|
|
92
|
+
{ method: FILE_REMOVE_METHOD, module: 'file', capability: FILE_REMOVE_METHOD, permission: 'files.access', risk: 'high' },
|
|
93
|
+
{ method: FILE_EXISTS_METHOD, module: 'file', capability: FILE_EXISTS_METHOD, permission: 'files.access', risk: 'high' },
|
|
94
|
+
{ method: FILE_READ_TEXT_METHOD, module: 'file', capability: FILE_READ_TEXT_METHOD, permission: 'files.access', risk: 'high' },
|
|
95
|
+
{ method: FILE_WRITE_TEXT_METHOD, module: 'file', capability: FILE_WRITE_TEXT_METHOD, permission: 'files.access', risk: 'high' },
|
|
96
|
+
{ method: FILE_READ_BYTES_METHOD, module: 'file', capability: FILE_READ_BYTES_METHOD, permission: 'files.access', risk: 'high' },
|
|
97
|
+
{ method: FILE_WRITE_BYTES_METHOD, module: 'file', capability: FILE_WRITE_BYTES_METHOD, permission: 'files.access', risk: 'high' },
|
|
98
|
+
{ method: FILE_STAT_METHOD, module: 'file', capability: FILE_STAT_METHOD, permission: 'files.access', risk: 'high' },
|
|
99
|
+
{
|
|
100
|
+
method: DIRECTORY_CREATE_METHOD,
|
|
101
|
+
module: 'directory',
|
|
102
|
+
capability: DIRECTORY_CREATE_METHOD,
|
|
103
|
+
permission: 'files.access',
|
|
104
|
+
risk: 'high',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
method: DIRECTORY_REMOVE_METHOD,
|
|
108
|
+
module: 'directory',
|
|
109
|
+
capability: DIRECTORY_REMOVE_METHOD,
|
|
110
|
+
permission: 'files.access',
|
|
111
|
+
risk: 'high',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
method: DIRECTORY_EXISTS_METHOD,
|
|
115
|
+
module: 'directory',
|
|
116
|
+
capability: DIRECTORY_EXISTS_METHOD,
|
|
117
|
+
permission: 'files.access',
|
|
118
|
+
risk: 'high',
|
|
119
|
+
},
|
|
120
|
+
{ method: DIRECTORY_LIST_METHOD, module: 'directory', capability: DIRECTORY_LIST_METHOD, permission: 'files.access', risk: 'high' },
|
|
65
121
|
{ method: UI_SHOW_TOAST_METHOD, module: 'ui', capability: UI_SHOW_TOAST_METHOD, permission: 'ui.toast', risk: 'low' },
|
|
66
122
|
{ method: UI_SHOW_LOADING_METHOD, module: 'ui', capability: UI_SHOW_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
|
|
67
123
|
{ method: UI_HIDE_LOADING_METHOD, module: 'ui', capability: UI_HIDE_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
|
|
@@ -126,15 +182,134 @@ const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
|
|
|
126
182
|
const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
|
|
127
183
|
const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
|
|
128
184
|
const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
|
|
185
|
+
const MINI_PROGRAM_OPERATION_PROGRESS_METHOD = 'operation.progress';
|
|
129
186
|
|
|
130
187
|
function isMiniProgramBridgeMessage(value) {
|
|
131
|
-
if (!value
|
|
188
|
+
if (!isRecord$1(value))
|
|
189
|
+
return false;
|
|
190
|
+
if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString(value.nonce)) {
|
|
132
191
|
return false;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
(
|
|
136
|
-
|
|
137
|
-
|
|
192
|
+
}
|
|
193
|
+
if (value.type === 'handshake') {
|
|
194
|
+
return isNonEmptyString(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
|
|
195
|
+
}
|
|
196
|
+
if (value.type === 'request') {
|
|
197
|
+
return isNonEmptyString(value.id) && isNonEmptyString(value.method) && value.error === undefined;
|
|
198
|
+
}
|
|
199
|
+
if (value.type === 'response') {
|
|
200
|
+
return (isNonEmptyString(value.id) &&
|
|
201
|
+
(value.method === undefined || isNonEmptyString(value.method)) &&
|
|
202
|
+
(value.error === undefined || isBridgeError(value.error)));
|
|
203
|
+
}
|
|
204
|
+
if (value.type === 'event') {
|
|
205
|
+
if (!isNonEmptyString(value.method) || value.error !== undefined)
|
|
206
|
+
return false;
|
|
207
|
+
if (value.method === MINI_PROGRAM_OPERATION_PROGRESS_METHOD) {
|
|
208
|
+
return value.version === 2 && isNonEmptyString(value.id) && isMiniProgramDownloadProgressPayload(value.payload);
|
|
209
|
+
}
|
|
210
|
+
return value.id === undefined || isNonEmptyString(value.id);
|
|
211
|
+
}
|
|
212
|
+
if (value.type === 'cancel') {
|
|
213
|
+
return (value.version === 2 && isNonEmptyString(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
|
|
214
|
+
}
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
function isMiniProgramRelativePath(value) {
|
|
218
|
+
if (typeof value !== 'string' || !value || value.startsWith('/') || value.endsWith('/')) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
if (/[\\\u0000-\u001f\u007f]/.test(value))
|
|
222
|
+
return false;
|
|
223
|
+
return value.split('/').every((segment) => Boolean(segment) && segment !== '.' && segment !== '..');
|
|
224
|
+
}
|
|
225
|
+
function isMiniProgramPathRootRef(value) {
|
|
226
|
+
if (!isRecord$1(value))
|
|
227
|
+
return false;
|
|
228
|
+
if (value.kind === 'sandbox')
|
|
229
|
+
return hasOnlyKeys(value, ['kind']);
|
|
230
|
+
return value.kind === 'directory' && isNonEmptyString(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
|
|
231
|
+
}
|
|
232
|
+
function isMiniProgramFileRef(value) {
|
|
233
|
+
if (!isRecord$1(value) || value.kind !== 'file')
|
|
234
|
+
return false;
|
|
235
|
+
if (isNonEmptyString(value.handleId)) {
|
|
236
|
+
return hasOnlyKeys(value, ['kind', 'handleId']);
|
|
237
|
+
}
|
|
238
|
+
return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
|
|
239
|
+
}
|
|
240
|
+
function isMiniProgramDirectoryRef(value) {
|
|
241
|
+
if (!isRecord$1(value) || value.kind !== 'directory')
|
|
242
|
+
return false;
|
|
243
|
+
if (isNonEmptyString(value.handleId)) {
|
|
244
|
+
return hasOnlyKeys(value, ['kind', 'handleId']);
|
|
245
|
+
}
|
|
246
|
+
return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
|
|
247
|
+
}
|
|
248
|
+
function isMiniProgramFileDescriptor(value) {
|
|
249
|
+
return (isRecord$1(value) &&
|
|
250
|
+
value.kind === 'file' &&
|
|
251
|
+
isNonEmptyString(value.name) &&
|
|
252
|
+
isFileMode(value.mode) &&
|
|
253
|
+
isMiniProgramFileRef(value.ref) &&
|
|
254
|
+
hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
|
|
255
|
+
}
|
|
256
|
+
function isMiniProgramDirectoryDescriptor(value) {
|
|
257
|
+
return (isRecord$1(value) &&
|
|
258
|
+
value.kind === 'directory' &&
|
|
259
|
+
isNonEmptyString(value.name) &&
|
|
260
|
+
isFileMode(value.mode) &&
|
|
261
|
+
isMiniProgramDirectoryRef(value.ref) &&
|
|
262
|
+
hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
|
|
263
|
+
}
|
|
264
|
+
function isMiniProgramFileSystemEntityDescriptor(value) {
|
|
265
|
+
return isMiniProgramFileDescriptor(value) || isMiniProgramDirectoryDescriptor(value);
|
|
266
|
+
}
|
|
267
|
+
function isMiniProgramByteArray(value) {
|
|
268
|
+
return value instanceof Uint8Array && value.buffer instanceof ArrayBuffer;
|
|
269
|
+
}
|
|
270
|
+
function isMiniProgramFileStat(value) {
|
|
271
|
+
return (isRecord$1(value) &&
|
|
272
|
+
value.kind === 'file' &&
|
|
273
|
+
isNonNegativeSafeInteger(value.size) &&
|
|
274
|
+
(value.modifiedAt === undefined || isNonNegativeFiniteNumber(value.modifiedAt)) &&
|
|
275
|
+
(value.createdAt === undefined || isNonNegativeFiniteNumber(value.createdAt)) &&
|
|
276
|
+
hasOnlyKeys(value, ['kind', 'size', 'modifiedAt', 'createdAt']));
|
|
277
|
+
}
|
|
278
|
+
function isMiniProgramDownloadProgressPayload(value) {
|
|
279
|
+
if (!isRecord$1(value) ||
|
|
280
|
+
!isNonNegativeSafeInteger(value.loaded) ||
|
|
281
|
+
typeof value.lengthComputable !== 'boolean' ||
|
|
282
|
+
!hasOnlyKeys(value, ['loaded', 'total', 'lengthComputable'])) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
if (!value.lengthComputable)
|
|
286
|
+
return value.total === undefined;
|
|
287
|
+
return isNonNegativeSafeInteger(value.total) && value.loaded <= value.total;
|
|
288
|
+
}
|
|
289
|
+
function isSDKHandshakePayload(value) {
|
|
290
|
+
return isRecord$1(value) && isNonEmptyString(value.href) && typeof value.userAgent === 'string' && isNonEmptyString(value.sdkVersion);
|
|
291
|
+
}
|
|
292
|
+
function isBridgeError(value) {
|
|
293
|
+
return isRecord$1(value) && isNonEmptyString(value.code) && typeof value.message === 'string';
|
|
294
|
+
}
|
|
295
|
+
function isFileMode(value) {
|
|
296
|
+
return value === 'read' || value === 'readwrite';
|
|
297
|
+
}
|
|
298
|
+
function isNonNegativeSafeInteger(value) {
|
|
299
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
300
|
+
}
|
|
301
|
+
function isNonNegativeFiniteNumber(value) {
|
|
302
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
303
|
+
}
|
|
304
|
+
function isNonEmptyString(value) {
|
|
305
|
+
return typeof value === 'string' && value.length > 0;
|
|
306
|
+
}
|
|
307
|
+
function hasOnlyKeys(value, allowedKeys) {
|
|
308
|
+
const allowed = new Set(allowedKeys);
|
|
309
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
310
|
+
}
|
|
311
|
+
function isRecord$1(value) {
|
|
312
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
138
313
|
}
|
|
139
314
|
|
|
140
315
|
/** 当前用户信息与登录能力支持的完整 scope 目录。 */
|
|
@@ -187,13 +362,30 @@ exports.CLOUD_LEADERBOARD_GET_LIST_METHOD = CLOUD_LEADERBOARD_GET_LIST_METHOD;
|
|
|
187
362
|
exports.CLOUD_LEADERBOARD_SUBMIT_METHOD = CLOUD_LEADERBOARD_SUBMIT_METHOD;
|
|
188
363
|
exports.DEVICE_SET_CLIPBOARD_METHOD = DEVICE_SET_CLIPBOARD_METHOD;
|
|
189
364
|
exports.DEVICE_VIBRATE_METHOD = DEVICE_VIBRATE_METHOD;
|
|
365
|
+
exports.DIRECTORY_CREATE_METHOD = DIRECTORY_CREATE_METHOD;
|
|
366
|
+
exports.DIRECTORY_EXISTS_METHOD = DIRECTORY_EXISTS_METHOD;
|
|
367
|
+
exports.DIRECTORY_LIST_METHOD = DIRECTORY_LIST_METHOD;
|
|
368
|
+
exports.DIRECTORY_REMOVE_METHOD = DIRECTORY_REMOVE_METHOD;
|
|
369
|
+
exports.FILES_PICK_DIRECTORY_METHOD = FILES_PICK_DIRECTORY_METHOD;
|
|
370
|
+
exports.FILES_PICK_FILES_METHOD = FILES_PICK_FILES_METHOD;
|
|
371
|
+
exports.FILES_SAVE_FILE_METHOD = FILES_SAVE_FILE_METHOD;
|
|
372
|
+
exports.FILE_CREATE_METHOD = FILE_CREATE_METHOD;
|
|
373
|
+
exports.FILE_EXISTS_METHOD = FILE_EXISTS_METHOD;
|
|
374
|
+
exports.FILE_READ_BYTES_METHOD = FILE_READ_BYTES_METHOD;
|
|
375
|
+
exports.FILE_READ_TEXT_METHOD = FILE_READ_TEXT_METHOD;
|
|
376
|
+
exports.FILE_REMOVE_METHOD = FILE_REMOVE_METHOD;
|
|
377
|
+
exports.FILE_STAT_METHOD = FILE_STAT_METHOD;
|
|
378
|
+
exports.FILE_WRITE_BYTES_METHOD = FILE_WRITE_BYTES_METHOD;
|
|
379
|
+
exports.FILE_WRITE_TEXT_METHOD = FILE_WRITE_TEXT_METHOD;
|
|
190
380
|
exports.MINI_PROGRAM_BRIDGE_NONCE_PARAM = MINI_PROGRAM_BRIDGE_NONCE_PARAM;
|
|
191
381
|
exports.MINI_PROGRAM_MESSAGE_NAMESPACE = MINI_PROGRAM_MESSAGE_NAMESPACE;
|
|
192
382
|
exports.MINI_PROGRAM_MESSAGE_VERSION = MINI_PROGRAM_MESSAGE_VERSION;
|
|
383
|
+
exports.MINI_PROGRAM_OPERATION_PROGRESS_METHOD = MINI_PROGRAM_OPERATION_PROGRESS_METHOD;
|
|
193
384
|
exports.MINI_PROGRAM_PROTOCOL_CAPABILITIES = MINI_PROGRAM_PROTOCOL_CAPABILITIES;
|
|
194
385
|
exports.NAVIGATION_CLOSE_METHOD = NAVIGATION_CLOSE_METHOD;
|
|
195
386
|
exports.NAVIGATION_OPEN_APP_PAGE_METHOD = NAVIGATION_OPEN_APP_PAGE_METHOD;
|
|
196
387
|
exports.NAVIGATION_RELOAD_METHOD = NAVIGATION_RELOAD_METHOD;
|
|
388
|
+
exports.NETWORK_DOWNLOAD_METHOD = NETWORK_DOWNLOAD_METHOD;
|
|
197
389
|
exports.NETWORK_REQUEST_METHOD = NETWORK_REQUEST_METHOD;
|
|
198
390
|
exports.RUNTIME_LOCATION_PROBE_METHOD = RUNTIME_LOCATION_PROBE_METHOD;
|
|
199
391
|
exports.SDK_CSP_VIOLATION_METHOD = SDK_CSP_VIOLATION_METHOD;
|
|
@@ -215,4 +407,14 @@ exports.VIEWPORT_GET_WINDOW_INFO_METHOD = VIEWPORT_GET_WINDOW_INFO_METHOD;
|
|
|
215
407
|
exports.VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD = VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD;
|
|
216
408
|
exports.isManagedMiniProgramRuntimePermissionKey = isManagedMiniProgramRuntimePermissionKey;
|
|
217
409
|
exports.isMiniProgramBridgeMessage = isMiniProgramBridgeMessage;
|
|
410
|
+
exports.isMiniProgramByteArray = isMiniProgramByteArray;
|
|
411
|
+
exports.isMiniProgramDirectoryDescriptor = isMiniProgramDirectoryDescriptor;
|
|
412
|
+
exports.isMiniProgramDirectoryRef = isMiniProgramDirectoryRef;
|
|
413
|
+
exports.isMiniProgramDownloadProgressPayload = isMiniProgramDownloadProgressPayload;
|
|
414
|
+
exports.isMiniProgramFileDescriptor = isMiniProgramFileDescriptor;
|
|
415
|
+
exports.isMiniProgramFileRef = isMiniProgramFileRef;
|
|
416
|
+
exports.isMiniProgramFileStat = isMiniProgramFileStat;
|
|
417
|
+
exports.isMiniProgramFileSystemEntityDescriptor = isMiniProgramFileSystemEntityDescriptor;
|
|
418
|
+
exports.isMiniProgramPathRootRef = isMiniProgramPathRootRef;
|
|
419
|
+
exports.isMiniProgramRelativePath = isMiniProgramRelativePath;
|
|
218
420
|
exports.parseMiniProgramRuntimePermissions = parseMiniProgramRuntimePermissions;
|