@heybox/hb-sdk 0.8.0-alpha.3 → 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.
Files changed (72) hide show
  1. package/CHANGELOG.md +136 -422
  2. package/README.md +28 -18
  3. package/dist/cli-chunks/{build-qWzAbpS7.cjs → build-PYCNacya.cjs} +8 -5
  4. package/dist/cli-chunks/{context-CtS2Thp0.cjs → context-m2W2XbL0.cjs} +42 -59
  5. package/dist/cli-chunks/{create-PV5ua977.cjs → create-BdAg3WGA.cjs} +2 -2
  6. package/dist/cli-chunks/{dev-CwKbAm_H.cjs → dev-CyZuw7Yn.cjs} +76 -64
  7. package/dist/cli-chunks/{doctor-tJUGOYrm.cjs → doctor-DU8rCfUF.cjs} +1 -1
  8. package/dist/cli-chunks/{index-DVuD75Hr.cjs → index-DATObqzK.cjs} +2 -2
  9. package/dist/cli-chunks/{index-De687C6-.cjs → index-MMW2ibQm.cjs} +32 -21
  10. package/dist/cli-chunks/{index.esm-B-4yrLNm.cjs → index.esm-BiAaAUFC.cjs} +8 -8
  11. package/dist/cli-chunks/{login-DolpqD8K.cjs → login-B3TThMss.cjs} +2 -2
  12. package/dist/cli-chunks/{project-vite-1rvkK-M8.cjs → project-vite-BQj8YLI4.cjs} +1 -1
  13. package/dist/cli-chunks/{remote-rIAQE_G2.cjs → remote-DNvI7tHH.cjs} +57 -25
  14. package/dist/cli-chunks/{runtime-gate-DFjw66kF.cjs → runtime-gate-BEFp1w_s.cjs} +11 -3
  15. package/dist/cli-chunks/{runtime-permission-env-CjsCe5bp.cjs → runtime-permission-env-CtL8rsjB.cjs} +351 -0
  16. package/dist/cli-chunks/{session-CzaM2Cq3.cjs → session-DjBkjaF8.cjs} +1 -1
  17. package/dist/cli-chunks/{skill-CM40_9WH.cjs → skill-cR_wnaw2.cjs} +2 -2
  18. package/dist/cli-chunks/{version-Bz-AfXQU.cjs → version-yEn1E2Bg.cjs} +1 -1
  19. package/dist/cli.cjs +1 -1
  20. package/dist/devtools/browser-dev-host/assets/browser-dev-host-TzYf9L6C.js +99 -0
  21. package/dist/devtools/browser-dev-host/assets/{index-CeP6SLB3.js → index-C5MZZDa5.js} +4 -4
  22. package/dist/devtools/browser-dev-host/assets/index-P-ra4m1y.css +1 -0
  23. package/dist/devtools/browser-dev-host/assets/workbench-state-BwV7bm4n.js +5 -0
  24. package/dist/devtools/browser-dev-host/index.html +3 -3
  25. package/dist/index.cjs.js +100 -2
  26. package/dist/index.esm.js +100 -2
  27. package/dist/protocol.cjs.js +189 -47
  28. package/dist/protocol.esm.js +189 -47
  29. package/dist/templates/{vue3-vite-ts → vanilla-vite-js}/.gitignore.ejs +0 -1
  30. package/dist/templates/vanilla-vite-js/README.md.ejs +14 -0
  31. package/dist/templates/vanilla-vite-js/index.html.ejs +20 -0
  32. package/dist/templates/vanilla-vite-js/package.json.ejs +22 -0
  33. package/dist/templates/vanilla-vite-js/src/assets/heybox-logo.svg +8 -0
  34. package/dist/templates/vanilla-vite-js/src/main.js +39 -0
  35. package/dist/templates/vanilla-vite-js/src/styles.css +155 -0
  36. package/dist/templates/{vue3-vite-ts/vite.config.ts → vanilla-vite-js/vite.config.js} +1 -2
  37. package/dist/vite.cjs.js +281 -13
  38. package/dist/vite.esm.js +281 -13
  39. package/package.json +13 -9
  40. package/skill/SKILL.md +8 -9
  41. package/skill/references/api-protocol.md +1 -3
  42. package/skill/references/api-root.md +65 -21
  43. package/skill/references/cli.md +17 -5
  44. package/skill/references/examples.md +3 -3
  45. package/skill/references/recipes.md +40 -41
  46. package/skill/references/safety-boundaries.md +9 -5
  47. package/skill/skill.json +5 -5
  48. package/types/core/mini-dev-console.d.ts +36 -0
  49. package/types/miniapp-manifest/index.d.ts +1 -0
  50. package/types/miniapp-manifest/node.d.ts +3 -0
  51. package/types/miniapp-manifest/permissions.d.ts +37 -0
  52. package/types/miniapp-manifest/schema.d.ts +5 -0
  53. package/types/modules/share/index.d.ts +1 -1
  54. package/types/modules/share/show-share-menu.d.ts +1 -1
  55. package/types/modules/share/types.d.ts +2 -4
  56. package/types/vite/index.d.ts +3 -1
  57. package/dist/devtools/browser-dev-host/assets/browser-dev-host-uq-Wac6k.js +0 -97
  58. package/dist/devtools/browser-dev-host/assets/index-KD2f3Jdz.css +0 -1
  59. package/dist/devtools/browser-dev-host/assets/workbench-state-D-1U0JRq.js +0 -5
  60. package/dist/templates/vue3-vite-ts/README.md.ejs +0 -47
  61. package/dist/templates/vue3-vite-ts/index.html.ejs +0 -12
  62. package/dist/templates/vue3-vite-ts/package.json.ejs +0 -33
  63. package/dist/templates/vue3-vite-ts/src/App.vue +0 -78
  64. package/dist/templates/vue3-vite-ts/src/__tests__/App.spec.ts +0 -148
  65. package/dist/templates/vue3-vite-ts/src/auth-handoff.ts +0 -46
  66. package/dist/templates/vue3-vite-ts/src/main.ts +0 -5
  67. package/dist/templates/vue3-vite-ts/src/styles.css +0 -60
  68. package/dist/templates/vue3-vite-ts/src/vite-env.d.ts +0 -1
  69. package/dist/templates/vue3-vite-ts/tsconfig.app.json +0 -17
  70. package/dist/templates/vue3-vite-ts/tsconfig.json +0 -11
  71. package/dist/templates/vue3-vite-ts/tsconfig.node.json +0 -11
  72. package/dist/templates/vue3-vite-ts/vitest.config.ts +0 -10
@@ -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
- { method: AUTH_LOGIN_METHOD, module: 'auth', capability: AUTH_LOGIN_METHOD, permission: 'auth.login', risk: 'medium' },
46
- { method: USER_GET_INFO_METHOD, module: 'user', capability: USER_GET_INFO_METHOD, permission: 'user.getInfo', risk: 'medium' },
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
- permission: 'user.revokeAuthorization',
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
- permission: 'user.platformAccount.steam',
70
+ requirement: { kind: 'all', permissions: ['steamLibrary'] },
59
71
  risk: 'high',
60
72
  },
61
- { method: SHARE_COPY_LINK_METHOD, module: 'share', capability: SHARE_COPY_LINK_METHOD, permission: 'share.copyLink', risk: 'medium' },
62
- { method: SHARE_SHOW_SHARE_MENU_METHOD, module: 'share', capability: SHARE_SHOW_SHARE_MENU_METHOD, permission: 'share.basic', risk: 'low' },
63
- { method: SHARE_SCREENSHOT_METHOD, module: 'share', capability: SHARE_SCREENSHOT_METHOD, permission: 'share.screenshot', risk: 'medium' },
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
- permission: 'viewport.windowInfo',
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
- permission: 'viewport.navigationBarStyle',
105
+ requirement: { kind: 'none' },
76
106
  risk: 'low',
77
107
  },
78
- { method: STORAGE_GET_STORAGE_METHOD, module: 'storage', capability: STORAGE_GET_STORAGE_METHOD, permission: 'storage.read', risk: 'low' },
79
- { method: STORAGE_SET_STORAGE_METHOD, module: 'storage', capability: STORAGE_SET_STORAGE_METHOD, permission: 'storage.write', risk: 'medium' },
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' },
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
- permission: 'files.external',
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
- { 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' },
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
- permission: 'files.access',
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
- permission: 'files.access',
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
- permission: 'files.access',
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: DIRECTORY_LIST_METHOD, module: 'directory', capability: DIRECTORY_LIST_METHOD, permission: 'files.access', risk: 'high' },
121
- { method: UI_SHOW_TOAST_METHOD, module: 'ui', capability: UI_SHOW_TOAST_METHOD, permission: 'ui.toast', risk: 'low' },
122
- { method: UI_SHOW_LOADING_METHOD, module: 'ui', capability: UI_SHOW_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
123
- { method: UI_HIDE_LOADING_METHOD, module: 'ui', capability: UI_HIDE_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
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
- permission: 'device.clipboard.write',
243
+ requirement: { kind: 'all', permissions: ['clipboard'] },
130
244
  risk: 'medium',
131
245
  },
132
- { method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD, permission: 'navigation.close', risk: 'medium' },
133
- { method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD, permission: 'navigation.reload', risk: 'medium' },
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
- permission: 'navigation.openAppPage',
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
- permission: 'cloud.leaderboard.write',
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
- permission: 'cloud.leaderboard.read',
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
- permission: 'cloud.leaderboard.currentUserEntry.read',
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
- permission: 'cloud.leaderboard.currentUserEntry.delete',
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
- permission: 'cloud.leaderboard.info.read',
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 MANAGED_RUNTIME_PERMISSION_KEYS = new Set(['network.request']);
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 key = rawEntry.key.trim();
336
- if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled') || !isRecord(rawEntry.config)) {
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
- if (key === 'network.request' && typeof rawEntry.config.useOfficialDomain !== 'boolean') {
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: { useOfficialDomain: rawEntry.config.useOfficialDomain },
490
+ config: {},
349
491
  };
350
492
  }
351
493
  return { valid: true, permissions };