@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.
Files changed (76) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +69 -16
  3. package/THIRD_PARTY_NOTICES.md +1755 -0
  4. package/dist/cli-chunks/{build-V1YBdpzY.cjs → build-CCLWgXyA.cjs} +6 -5
  5. package/dist/cli-chunks/{context-Ba1Je-wT.cjs → context-Brh56h56.cjs} +2 -27
  6. package/dist/cli-chunks/{create-CKGjqo9E.cjs → create-BZ-hi2s1.cjs} +1 -1
  7. package/dist/cli-chunks/{dev-XopYKLYZ.cjs → dev-CoSXtEYa.cjs} +336 -517
  8. package/dist/cli-chunks/{doctor-BHbrYQqT.cjs → doctor-EsCYJGhV.cjs} +1 -1
  9. package/dist/cli-chunks/{index-C9mpajVG.cjs → index-BL5eEPap.cjs} +14 -14
  10. package/dist/cli-chunks/{index-DKWfX6Ut.cjs → index-CS6Q0o5C.cjs} +2 -2
  11. package/dist/cli-chunks/{index.esm-SXAQ3WVR.cjs → index.esm-BoBHPfpq.cjs} +6 -6
  12. package/dist/cli-chunks/{login-BVWicWqe.cjs → login-CILLxGuf.cjs} +2 -2
  13. package/dist/cli-chunks/{project-vite-CBb38HJ3.cjs → project-vite-Qu6Xe9Dn.cjs} +1 -1
  14. package/dist/cli-chunks/{remote-BG1u0NKT.cjs → remote-DRuTQ51u.cjs} +10 -8
  15. package/dist/cli-chunks/{runtime-gate-CtV7rWyX.cjs → runtime-gate-DFjw66kF.cjs} +20 -1
  16. package/dist/cli-chunks/{runtime-permission-env-D-8_jPG3.cjs → runtime-permission-env-CjsCe5bp.cjs} +13 -13
  17. package/dist/cli-chunks/{session-CJS_SEp9.cjs → session-D-_N3WVL.cjs} +1 -1
  18. package/dist/cli.cjs +1 -1
  19. package/dist/devtools/browser-dev-host/assets/browser-dev-host-uq-Wac6k.js +97 -0
  20. package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
  21. package/dist/devtools/browser-dev-host/assets/index-CeP6SLB3.js +567 -0
  22. package/dist/devtools/browser-dev-host/assets/index-KD2f3Jdz.css +1 -0
  23. package/dist/devtools/browser-dev-host/assets/workbench-state-D-1U0JRq.js +5 -0
  24. package/dist/devtools/browser-dev-host/index.html +6 -435
  25. package/dist/index.cjs.js +1036 -90
  26. package/dist/index.esm.js +1036 -91
  27. package/dist/miniapp-publish.cjs.js +13 -13
  28. package/dist/miniapp-publish.esm.js +13 -13
  29. package/dist/protocol.cjs.js +208 -6
  30. package/dist/protocol.esm.js +182 -7
  31. package/dist/templates/vue3-vite-ts/README.md.ejs +2 -0
  32. package/dist/templates/vue3-vite-ts/vite.config.ts +1 -1
  33. package/dist/vite.cjs.js +31 -4
  34. package/dist/vite.esm.js +31 -5
  35. package/package.json +28 -11
  36. package/skill/SKILL.md +9 -5
  37. package/skill/references/api-protocol.md +111 -3
  38. package/skill/references/api-root.md +170 -22
  39. package/skill/references/cli.md +21 -17
  40. package/skill/references/examples.md +30 -1
  41. package/skill/references/recipes.md +105 -1
  42. package/skill/references/safety-boundaries.md +12 -1
  43. package/skill/scripts/sync-references.mjs +37 -3
  44. package/skill/skill.json +4 -4
  45. package/types/core/client.d.ts +17 -1
  46. package/types/core/errors.d.ts +5 -5
  47. package/types/core/sdk.d.ts +8 -5
  48. package/types/core/singleton.d.ts +59 -6
  49. package/types/index.d.ts +4 -2
  50. package/types/miniapp-manifest/schema.d.ts +5 -0
  51. package/types/miniapp-publish/index.d.ts +8 -8
  52. package/types/modules/auth/index.d.ts +15 -1
  53. package/types/modules/cloud/index.d.ts +75 -5
  54. package/types/modules/device/index.d.ts +31 -3
  55. package/types/modules/files/index.d.ts +5 -0
  56. package/types/modules/files/registry.d.ts +35 -0
  57. package/types/modules/files/types.d.ts +159 -0
  58. package/types/modules/navigation/index.d.ts +46 -4
  59. package/types/modules/network/index.d.ts +72 -14
  60. package/types/modules/share/copy-link.d.ts +3 -3
  61. package/types/modules/share/index.d.ts +61 -5
  62. package/types/modules/share/screenshot.d.ts +3 -3
  63. package/types/modules/share/show-share-menu.d.ts +3 -3
  64. package/types/modules/storage/index.d.ts +38 -10
  65. package/types/modules/ui/index.d.ts +46 -4
  66. package/types/modules/user/get-info.d.ts +1 -1
  67. package/types/modules/user/index.d.ts +46 -4
  68. package/types/modules/user/steam-game-list.d.ts +2 -2
  69. package/types/modules/viewport/index.d.ts +36 -8
  70. package/types/protocol/capabilities.d.ts +2 -2
  71. package/types/protocol/constants.d.ts +1 -1
  72. package/types/protocol/guards.d.ts +1 -1
  73. package/types/protocol/types.d.ts +1 -1
  74. package/types/protocol.d.ts +4 -3
  75. package/types/vite/index.d.ts +15 -7
  76. 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(',')) {
@@ -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 || typeof value !== 'object')
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
- const message = value;
134
- return (message.namespace === MINI_PROGRAM_MESSAGE_NAMESPACE &&
135
- (message.version === 1 || message.version === 2) &&
136
- typeof message.nonce === 'string' &&
137
- typeof message.type === 'string');
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;