@heybox/hb-sdk 0.8.0-alpha → 0.8.0-alpha.10

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 (94) hide show
  1. package/CHANGELOG.md +92 -396
  2. package/README.md +101 -24
  3. package/THIRD_PARTY_NOTICES.md +1755 -0
  4. package/dist/cli-chunks/{build-DJWFSM1B.cjs → build-aDJbiFqF.cjs} +8 -5
  5. package/dist/cli-chunks/{context-DV2UK1Nz.cjs → context-Dp36pZ9a.cjs} +39 -81
  6. package/dist/cli-chunks/{create-2HfoB48V.cjs → create-P3g0ricz.cjs} +2 -2
  7. package/dist/cli-chunks/{dev-Dgt2zS9k.cjs → dev-CisJkXuQ.cjs} +396 -576
  8. package/dist/cli-chunks/doctor-B-LF5-uj.cjs +65 -0
  9. package/dist/cli-chunks/{index-D62ANeBv.cjs → index-BDaeBI_B.cjs} +50 -30
  10. package/dist/cli-chunks/{index-BjoSXl8C.cjs → index-CZGkk7fQ.cjs} +2 -2
  11. package/dist/cli-chunks/{index.esm-CigcxJ2B.cjs → index.esm-NNLG29Tt.cjs} +8 -7
  12. package/dist/cli-chunks/{login-Cumknwdx.cjs → login-DTY5GolC.cjs} +2 -2
  13. package/dist/cli-chunks/{project-vite-CcE-HMmd.cjs → project-vite-DlCjHlu_.cjs} +1 -1
  14. package/dist/cli-chunks/{remote-DDdP3xcE.cjs → remote-BBMr7j8W.cjs} +57 -25
  15. package/dist/cli-chunks/{runtime-gate-DFjw66kF.cjs → runtime-gate-BppCl1r3.cjs} +11 -3
  16. package/dist/cli-chunks/{runtime-permission-env-CjsCe5bp.cjs → runtime-permission-env-CqsTHeas.cjs} +351 -0
  17. package/dist/cli-chunks/{session-BDi_AZSv.cjs → session-CnGeZCRZ.cjs} +1 -1
  18. package/dist/cli-chunks/skill-B0yAnPOJ.cjs +83 -0
  19. package/dist/cli-chunks/version-DN5jrixS.cjs +8 -0
  20. package/dist/cli.cjs +1 -1
  21. package/dist/devtools/browser-dev-host/assets/browser-dev-host-BhZGUyYw.js +97 -0
  22. package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
  23. package/dist/devtools/browser-dev-host/assets/index-DJFB5ySU.css +1 -0
  24. package/dist/devtools/browser-dev-host/assets/index-Dh9H1JOm.js +567 -0
  25. package/dist/devtools/browser-dev-host/assets/workbench-state-wHgWRb7I.js +5 -0
  26. package/dist/devtools/browser-dev-host/index.html +6 -435
  27. package/dist/index.cjs.js +939 -29
  28. package/dist/index.esm.js +939 -30
  29. package/dist/protocol.cjs.js +381 -37
  30. package/dist/protocol.esm.js +355 -38
  31. package/dist/templates/{vue3-vite-ts → vanilla-vite-js}/.gitignore.ejs +0 -1
  32. package/dist/templates/vanilla-vite-js/README.md.ejs +14 -0
  33. package/dist/templates/vanilla-vite-js/index.html.ejs +20 -0
  34. package/dist/templates/vanilla-vite-js/package.json.ejs +22 -0
  35. package/dist/templates/vanilla-vite-js/src/assets/heybox-logo.svg +8 -0
  36. package/dist/templates/vanilla-vite-js/src/main.js +39 -0
  37. package/dist/templates/vanilla-vite-js/src/styles.css +155 -0
  38. package/dist/templates/{vue3-vite-ts/vite.config.ts → vanilla-vite-js/vite.config.js} +1 -2
  39. package/dist/vite.cjs.js +228 -9
  40. package/dist/vite.esm.js +228 -9
  41. package/package.json +36 -13
  42. package/skill/SKILL.md +22 -20
  43. package/skill/references/api-protocol.md +100 -6
  44. package/skill/references/api-root.md +166 -23
  45. package/skill/references/cli.md +41 -24
  46. package/skill/references/examples.md +30 -1
  47. package/skill/references/llms-index.md +1 -1
  48. package/skill/references/recipes.md +139 -36
  49. package/skill/references/safety-boundaries.md +14 -5
  50. package/skill/skill.json +10 -5
  51. package/types/core/client.d.ts +17 -1
  52. package/types/core/sdk.d.ts +3 -0
  53. package/types/core/singleton.d.ts +3 -0
  54. package/types/index.d.ts +4 -2
  55. package/types/miniapp-manifest/index.d.ts +1 -0
  56. package/types/miniapp-manifest/node.d.ts +3 -0
  57. package/types/miniapp-manifest/permissions.d.ts +37 -0
  58. package/types/miniapp-manifest/schema.d.ts +5 -0
  59. package/types/modules/files/index.d.ts +5 -0
  60. package/types/modules/files/registry.d.ts +35 -0
  61. package/types/modules/files/types.d.ts +159 -0
  62. package/types/modules/network/index.d.ts +50 -3
  63. package/types/modules/share/index.d.ts +1 -1
  64. package/types/modules/share/show-share-menu.d.ts +1 -1
  65. package/types/modules/share/types.d.ts +2 -4
  66. package/types/protocol/capabilities.d.ts +2 -2
  67. package/types/protocol/constants.d.ts +1 -1
  68. package/types/protocol/guards.d.ts +1 -1
  69. package/types/protocol/types.d.ts +1 -1
  70. package/types/protocol.d.ts +4 -3
  71. package/types/skill-metadata.d.ts +0 -4
  72. package/dist/cli-chunks/doctor-C95gIao_.cjs +0 -204
  73. package/dist/devtools/browser-dev-host/main.js +0 -12263
  74. package/dist/templates/vue3-vite-ts/README.md.ejs +0 -47
  75. package/dist/templates/vue3-vite-ts/index.html.ejs +0 -12
  76. package/dist/templates/vue3-vite-ts/package.json.ejs +0 -33
  77. package/dist/templates/vue3-vite-ts/src/App.vue +0 -78
  78. package/dist/templates/vue3-vite-ts/src/__tests__/App.spec.ts +0 -148
  79. package/dist/templates/vue3-vite-ts/src/auth-handoff.ts +0 -46
  80. package/dist/templates/vue3-vite-ts/src/main.ts +0 -5
  81. package/dist/templates/vue3-vite-ts/src/styles.css +0 -60
  82. package/dist/templates/vue3-vite-ts/src/vite-env.d.ts +0 -1
  83. package/dist/templates/vue3-vite-ts/tsconfig.app.json +0 -17
  84. package/dist/templates/vue3-vite-ts/tsconfig.json +0 -11
  85. package/dist/templates/vue3-vite-ts/tsconfig.node.json +0 -11
  86. package/dist/templates/vue3-vite-ts/vitest.config.ts +0 -10
  87. package/skill/scripts/check-references.mjs +0 -14
  88. package/skill/scripts/markdown-sections.mjs +0 -36
  89. package/skill/scripts/package-skill.mjs +0 -60
  90. package/skill/scripts/package-skill.sh +0 -6
  91. package/skill/scripts/skill-metadata.mjs +0 -77
  92. package/skill/scripts/sync-agent-skills-payload.mjs +0 -359
  93. package/skill/scripts/sync-references.mjs +0 -794
  94. package/skill/scripts/validate-skill.mjs +0 -263
@@ -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';
@@ -26,95 +42,249 @@ const CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.getCu
26
42
  const CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.deleteCurrentUserEntry';
27
43
  const CLOUD_LEADERBOARD_GET_INFO_METHOD = 'cloud.leaderboard.getInfo';
28
44
  const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
29
- { method: AUTH_LOGIN_METHOD, module: 'auth', capability: AUTH_LOGIN_METHOD, permission: 'auth.login', risk: 'medium' },
30
- { 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
+ },
31
59
  {
32
60
  method: USER_REVOKE_AUTHORIZATION_METHOD,
33
61
  module: 'user',
34
62
  capability: USER_REVOKE_AUTHORIZATION_METHOD,
35
- permission: 'user.revokeAuthorization',
63
+ requirement: { kind: 'none' },
36
64
  risk: 'high',
37
65
  },
38
66
  {
39
67
  method: USER_GET_STEAM_GAME_LIST_METHOD,
40
68
  module: 'user',
41
69
  capability: USER_GET_STEAM_GAME_LIST_METHOD,
42
- permission: 'user.platformAccount.steam',
70
+ requirement: { kind: 'all', permissions: ['steamLibrary'] },
43
71
  risk: 'high',
44
72
  },
45
- { method: SHARE_COPY_LINK_METHOD, module: 'share', capability: SHARE_COPY_LINK_METHOD, permission: 'share.copyLink', risk: 'medium' },
46
- { method: SHARE_SHOW_SHARE_MENU_METHOD, module: 'share', capability: SHARE_SHOW_SHARE_MENU_METHOD, permission: 'share.basic', risk: 'low' },
47
- { 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
+ },
48
94
  {
49
95
  method: VIEWPORT_GET_WINDOW_INFO_METHOD,
50
96
  module: 'viewport',
51
97
  capability: VIEWPORT_GET_WINDOW_INFO_METHOD,
52
- permission: 'viewport.windowInfo',
98
+ requirement: { kind: 'none' },
53
99
  risk: 'low',
54
100
  },
55
101
  {
56
102
  method: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
57
103
  module: 'viewport',
58
104
  capability: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
59
- permission: 'viewport.navigationBarStyle',
105
+ requirement: { kind: 'none' },
60
106
  risk: 'low',
61
107
  },
62
- { method: STORAGE_GET_STORAGE_METHOD, module: 'storage', capability: STORAGE_GET_STORAGE_METHOD, permission: 'storage.read', risk: 'low' },
63
- { method: STORAGE_SET_STORAGE_METHOD, module: 'storage', capability: STORAGE_SET_STORAGE_METHOD, permission: 'storage.write', risk: 'medium' },
64
- { method: NETWORK_REQUEST_METHOD, module: 'network', capability: NETWORK_REQUEST_METHOD, permission: 'network.request', risk: 'high' },
65
- { method: UI_SHOW_TOAST_METHOD, module: 'ui', capability: UI_SHOW_TOAST_METHOD, permission: 'ui.toast', risk: 'low' },
66
- { method: UI_SHOW_LOADING_METHOD, module: 'ui', capability: UI_SHOW_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
67
- { method: UI_HIDE_LOADING_METHOD, module: 'ui', capability: UI_HIDE_LOADING_METHOD, permission: 'ui.loading', risk: 'low' },
68
- { method: DEVICE_VIBRATE_METHOD, module: 'device', capability: DEVICE_VIBRATE_METHOD, permission: 'device.vibrate', risk: 'low' },
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
+ },
143
+ {
144
+ method: FILES_PICK_DIRECTORY_METHOD,
145
+ module: 'files',
146
+ capability: FILES_PICK_DIRECTORY_METHOD,
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'] },
169
+ risk: 'high',
170
+ },
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' },
207
+ {
208
+ method: DIRECTORY_CREATE_METHOD,
209
+ module: 'directory',
210
+ capability: DIRECTORY_CREATE_METHOD,
211
+ requirement: { kind: 'all', permissions: ['filesystem'] },
212
+ risk: 'high',
213
+ },
214
+ {
215
+ method: DIRECTORY_REMOVE_METHOD,
216
+ module: 'directory',
217
+ capability: DIRECTORY_REMOVE_METHOD,
218
+ requirement: { kind: 'all', permissions: ['filesystem'] },
219
+ risk: 'high',
220
+ },
221
+ {
222
+ method: DIRECTORY_EXISTS_METHOD,
223
+ module: 'directory',
224
+ capability: DIRECTORY_EXISTS_METHOD,
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'] },
233
+ risk: 'high',
234
+ },
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' },
69
239
  {
70
240
  method: DEVICE_SET_CLIPBOARD_METHOD,
71
241
  module: 'device',
72
242
  capability: DEVICE_SET_CLIPBOARD_METHOD,
73
- permission: 'device.clipboard.write',
243
+ requirement: { kind: 'all', permissions: ['clipboard'] },
74
244
  risk: 'medium',
75
245
  },
76
- { method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD, permission: 'navigation.close', risk: 'medium' },
77
- { 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' },
78
248
  {
79
249
  method: NAVIGATION_OPEN_APP_PAGE_METHOD,
80
250
  module: 'navigation',
81
251
  capability: NAVIGATION_OPEN_APP_PAGE_METHOD,
82
- permission: 'navigation.openAppPage',
252
+ requirement: { kind: 'none' },
83
253
  risk: 'medium',
84
254
  },
85
255
  {
86
256
  method: CLOUD_LEADERBOARD_SUBMIT_METHOD,
87
257
  module: 'cloud',
88
258
  capability: CLOUD_LEADERBOARD_SUBMIT_METHOD,
89
- permission: 'cloud.leaderboard.write',
259
+ requirement: { kind: 'all', permissions: ['leaderboard'] },
90
260
  risk: 'medium',
91
261
  },
92
262
  {
93
263
  method: CLOUD_LEADERBOARD_GET_LIST_METHOD,
94
264
  module: 'cloud',
95
265
  capability: CLOUD_LEADERBOARD_GET_LIST_METHOD,
96
- permission: 'cloud.leaderboard.read',
266
+ requirement: { kind: 'all', permissions: ['leaderboard'] },
97
267
  risk: 'low',
98
268
  },
99
269
  {
100
270
  method: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
101
271
  module: 'cloud',
102
272
  capability: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
103
- permission: 'cloud.leaderboard.currentUserEntry.read',
273
+ requirement: { kind: 'all', permissions: ['leaderboard'] },
104
274
  risk: 'medium',
105
275
  },
106
276
  {
107
277
  method: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
108
278
  module: 'cloud',
109
279
  capability: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
110
- permission: 'cloud.leaderboard.currentUserEntry.delete',
280
+ requirement: { kind: 'all', permissions: ['leaderboard'] },
111
281
  risk: 'medium',
112
282
  },
113
283
  {
114
284
  method: CLOUD_LEADERBOARD_GET_INFO_METHOD,
115
285
  module: 'cloud',
116
286
  capability: CLOUD_LEADERBOARD_GET_INFO_METHOD,
117
- permission: 'cloud.leaderboard.info.read',
287
+ requirement: { kind: 'all', permissions: ['leaderboard'] },
118
288
  risk: 'low',
119
289
  },
120
290
  ];
@@ -126,21 +296,152 @@ const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
126
296
  const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
127
297
  const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
128
298
  const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
299
+ const MINI_PROGRAM_OPERATION_PROGRESS_METHOD = 'operation.progress';
129
300
 
130
301
  function isMiniProgramBridgeMessage(value) {
131
- if (!value || typeof value !== 'object')
302
+ if (!isRecord$1(value))
303
+ return false;
304
+ if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString(value.nonce)) {
305
+ return false;
306
+ }
307
+ if (value.type === 'handshake') {
308
+ return isNonEmptyString(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
309
+ }
310
+ if (value.type === 'request') {
311
+ return isNonEmptyString(value.id) && isNonEmptyString(value.method) && value.error === undefined;
312
+ }
313
+ if (value.type === 'response') {
314
+ return (isNonEmptyString(value.id) &&
315
+ (value.method === undefined || isNonEmptyString(value.method)) &&
316
+ (value.error === undefined || isBridgeError(value.error)));
317
+ }
318
+ if (value.type === 'event') {
319
+ if (!isNonEmptyString(value.method) || value.error !== undefined)
320
+ return false;
321
+ if (value.method === MINI_PROGRAM_OPERATION_PROGRESS_METHOD) {
322
+ return value.version === 2 && isNonEmptyString(value.id) && isMiniProgramDownloadProgressPayload(value.payload);
323
+ }
324
+ return value.id === undefined || isNonEmptyString(value.id);
325
+ }
326
+ if (value.type === 'cancel') {
327
+ return (value.version === 2 && isNonEmptyString(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
328
+ }
329
+ return false;
330
+ }
331
+ function isMiniProgramRelativePath(value) {
332
+ if (typeof value !== 'string' || !value || value.startsWith('/') || value.endsWith('/')) {
333
+ return false;
334
+ }
335
+ if (/[\\\u0000-\u001f\u007f]/.test(value))
336
+ return false;
337
+ return value.split('/').every((segment) => Boolean(segment) && segment !== '.' && segment !== '..');
338
+ }
339
+ function isMiniProgramPathRootRef(value) {
340
+ if (!isRecord$1(value))
132
341
  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');
342
+ if (value.kind === 'sandbox')
343
+ return hasOnlyKeys(value, ['kind']);
344
+ return value.kind === 'directory' && isNonEmptyString(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
345
+ }
346
+ function isMiniProgramFileRef(value) {
347
+ if (!isRecord$1(value) || value.kind !== 'file')
348
+ return false;
349
+ if (isNonEmptyString(value.handleId)) {
350
+ return hasOnlyKeys(value, ['kind', 'handleId']);
351
+ }
352
+ return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
353
+ }
354
+ function isMiniProgramDirectoryRef(value) {
355
+ if (!isRecord$1(value) || value.kind !== 'directory')
356
+ return false;
357
+ if (isNonEmptyString(value.handleId)) {
358
+ return hasOnlyKeys(value, ['kind', 'handleId']);
359
+ }
360
+ return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
361
+ }
362
+ function isMiniProgramFileDescriptor(value) {
363
+ return (isRecord$1(value) &&
364
+ value.kind === 'file' &&
365
+ isNonEmptyString(value.name) &&
366
+ isFileMode(value.mode) &&
367
+ isMiniProgramFileRef(value.ref) &&
368
+ hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
369
+ }
370
+ function isMiniProgramDirectoryDescriptor(value) {
371
+ return (isRecord$1(value) &&
372
+ value.kind === 'directory' &&
373
+ isNonEmptyString(value.name) &&
374
+ isFileMode(value.mode) &&
375
+ isMiniProgramDirectoryRef(value.ref) &&
376
+ hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
377
+ }
378
+ function isMiniProgramFileSystemEntityDescriptor(value) {
379
+ return isMiniProgramFileDescriptor(value) || isMiniProgramDirectoryDescriptor(value);
380
+ }
381
+ function isMiniProgramByteArray(value) {
382
+ return value instanceof Uint8Array && value.buffer instanceof ArrayBuffer;
383
+ }
384
+ function isMiniProgramFileStat(value) {
385
+ return (isRecord$1(value) &&
386
+ value.kind === 'file' &&
387
+ isNonNegativeSafeInteger(value.size) &&
388
+ (value.modifiedAt === undefined || isNonNegativeFiniteNumber(value.modifiedAt)) &&
389
+ (value.createdAt === undefined || isNonNegativeFiniteNumber(value.createdAt)) &&
390
+ hasOnlyKeys(value, ['kind', 'size', 'modifiedAt', 'createdAt']));
391
+ }
392
+ function isMiniProgramDownloadProgressPayload(value) {
393
+ if (!isRecord$1(value) ||
394
+ !isNonNegativeSafeInteger(value.loaded) ||
395
+ typeof value.lengthComputable !== 'boolean' ||
396
+ !hasOnlyKeys(value, ['loaded', 'total', 'lengthComputable'])) {
397
+ return false;
398
+ }
399
+ if (!value.lengthComputable)
400
+ return value.total === undefined;
401
+ return isNonNegativeSafeInteger(value.total) && value.loaded <= value.total;
402
+ }
403
+ function isSDKHandshakePayload(value) {
404
+ return isRecord$1(value) && isNonEmptyString(value.href) && typeof value.userAgent === 'string' && isNonEmptyString(value.sdkVersion);
405
+ }
406
+ function isBridgeError(value) {
407
+ return isRecord$1(value) && isNonEmptyString(value.code) && typeof value.message === 'string';
408
+ }
409
+ function isFileMode(value) {
410
+ return value === 'read' || value === 'readwrite';
411
+ }
412
+ function isNonNegativeSafeInteger(value) {
413
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
414
+ }
415
+ function isNonNegativeFiniteNumber(value) {
416
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0;
417
+ }
418
+ function isNonEmptyString(value) {
419
+ return typeof value === 'string' && value.length > 0;
420
+ }
421
+ function hasOnlyKeys(value, allowedKeys) {
422
+ const allowed = new Set(allowedKeys);
423
+ return Object.keys(value).every((key) => allowed.has(key));
424
+ }
425
+ function isRecord$1(value) {
426
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
138
427
  }
139
428
 
140
429
  /** 当前用户信息与登录能力支持的完整 scope 目录。 */
141
430
  const USER_INFO_AUTHORIZATION_SCOPES = ['identity', 'profile'];
142
431
 
143
- 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);
144
445
  function isManagedMiniProgramRuntimePermissionKey(key) {
145
446
  return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
146
447
  }
@@ -157,20 +458,36 @@ function parseMiniProgramRuntimePermissions(snapshot) {
157
458
  if (!isRecord(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
158
459
  return { valid: false, permissions: {} };
159
460
  }
160
- const key = rawEntry.key.trim();
161
- 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')) {
162
464
  return { valid: false, permissions: {} };
163
465
  }
164
466
  seenKeys.add(key);
165
- if (!isManagedMiniProgramRuntimePermissionKey(key))
467
+ if (!isManagedMiniProgramRuntimePermissionKey(key)) {
468
+ if (!isRecord(rawEntry.config))
469
+ return { valid: false, permissions: {} };
166
470
  continue;
167
- if (key === 'network.request' && typeof rawEntry.config.useOfficialDomain !== 'boolean') {
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
+ };
482
+ continue;
483
+ }
484
+ if (rawEntry.config !== null && rawEntry.config !== undefined && (!isRecord(rawEntry.config) || Object.keys(rawEntry.config).length > 0)) {
168
485
  return { valid: false, permissions: {} };
169
486
  }
170
487
  permissions[key] = {
171
488
  key,
172
489
  status: rawEntry.status,
173
- config: { useOfficialDomain: rawEntry.config.useOfficialDomain },
490
+ config: {},
174
491
  };
175
492
  }
176
493
  return { valid: true, permissions };
@@ -187,13 +504,30 @@ exports.CLOUD_LEADERBOARD_GET_LIST_METHOD = CLOUD_LEADERBOARD_GET_LIST_METHOD;
187
504
  exports.CLOUD_LEADERBOARD_SUBMIT_METHOD = CLOUD_LEADERBOARD_SUBMIT_METHOD;
188
505
  exports.DEVICE_SET_CLIPBOARD_METHOD = DEVICE_SET_CLIPBOARD_METHOD;
189
506
  exports.DEVICE_VIBRATE_METHOD = DEVICE_VIBRATE_METHOD;
507
+ exports.DIRECTORY_CREATE_METHOD = DIRECTORY_CREATE_METHOD;
508
+ exports.DIRECTORY_EXISTS_METHOD = DIRECTORY_EXISTS_METHOD;
509
+ exports.DIRECTORY_LIST_METHOD = DIRECTORY_LIST_METHOD;
510
+ exports.DIRECTORY_REMOVE_METHOD = DIRECTORY_REMOVE_METHOD;
511
+ exports.FILES_PICK_DIRECTORY_METHOD = FILES_PICK_DIRECTORY_METHOD;
512
+ exports.FILES_PICK_FILES_METHOD = FILES_PICK_FILES_METHOD;
513
+ exports.FILES_SAVE_FILE_METHOD = FILES_SAVE_FILE_METHOD;
514
+ exports.FILE_CREATE_METHOD = FILE_CREATE_METHOD;
515
+ exports.FILE_EXISTS_METHOD = FILE_EXISTS_METHOD;
516
+ exports.FILE_READ_BYTES_METHOD = FILE_READ_BYTES_METHOD;
517
+ exports.FILE_READ_TEXT_METHOD = FILE_READ_TEXT_METHOD;
518
+ exports.FILE_REMOVE_METHOD = FILE_REMOVE_METHOD;
519
+ exports.FILE_STAT_METHOD = FILE_STAT_METHOD;
520
+ exports.FILE_WRITE_BYTES_METHOD = FILE_WRITE_BYTES_METHOD;
521
+ exports.FILE_WRITE_TEXT_METHOD = FILE_WRITE_TEXT_METHOD;
190
522
  exports.MINI_PROGRAM_BRIDGE_NONCE_PARAM = MINI_PROGRAM_BRIDGE_NONCE_PARAM;
191
523
  exports.MINI_PROGRAM_MESSAGE_NAMESPACE = MINI_PROGRAM_MESSAGE_NAMESPACE;
192
524
  exports.MINI_PROGRAM_MESSAGE_VERSION = MINI_PROGRAM_MESSAGE_VERSION;
525
+ exports.MINI_PROGRAM_OPERATION_PROGRESS_METHOD = MINI_PROGRAM_OPERATION_PROGRESS_METHOD;
193
526
  exports.MINI_PROGRAM_PROTOCOL_CAPABILITIES = MINI_PROGRAM_PROTOCOL_CAPABILITIES;
194
527
  exports.NAVIGATION_CLOSE_METHOD = NAVIGATION_CLOSE_METHOD;
195
528
  exports.NAVIGATION_OPEN_APP_PAGE_METHOD = NAVIGATION_OPEN_APP_PAGE_METHOD;
196
529
  exports.NAVIGATION_RELOAD_METHOD = NAVIGATION_RELOAD_METHOD;
530
+ exports.NETWORK_DOWNLOAD_METHOD = NETWORK_DOWNLOAD_METHOD;
197
531
  exports.NETWORK_REQUEST_METHOD = NETWORK_REQUEST_METHOD;
198
532
  exports.RUNTIME_LOCATION_PROBE_METHOD = RUNTIME_LOCATION_PROBE_METHOD;
199
533
  exports.SDK_CSP_VIOLATION_METHOD = SDK_CSP_VIOLATION_METHOD;
@@ -215,4 +549,14 @@ exports.VIEWPORT_GET_WINDOW_INFO_METHOD = VIEWPORT_GET_WINDOW_INFO_METHOD;
215
549
  exports.VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD = VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD;
216
550
  exports.isManagedMiniProgramRuntimePermissionKey = isManagedMiniProgramRuntimePermissionKey;
217
551
  exports.isMiniProgramBridgeMessage = isMiniProgramBridgeMessage;
552
+ exports.isMiniProgramByteArray = isMiniProgramByteArray;
553
+ exports.isMiniProgramDirectoryDescriptor = isMiniProgramDirectoryDescriptor;
554
+ exports.isMiniProgramDirectoryRef = isMiniProgramDirectoryRef;
555
+ exports.isMiniProgramDownloadProgressPayload = isMiniProgramDownloadProgressPayload;
556
+ exports.isMiniProgramFileDescriptor = isMiniProgramFileDescriptor;
557
+ exports.isMiniProgramFileRef = isMiniProgramFileRef;
558
+ exports.isMiniProgramFileStat = isMiniProgramFileStat;
559
+ exports.isMiniProgramFileSystemEntityDescriptor = isMiniProgramFileSystemEntityDescriptor;
560
+ exports.isMiniProgramPathRootRef = isMiniProgramPathRootRef;
561
+ exports.isMiniProgramRelativePath = isMiniProgramRelativePath;
218
562
  exports.parseMiniProgramRuntimePermissions = parseMiniProgramRuntimePermissions;