@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.
- package/CHANGELOG.md +92 -396
- package/README.md +101 -24
- package/THIRD_PARTY_NOTICES.md +1755 -0
- package/dist/cli-chunks/{build-DJWFSM1B.cjs → build-aDJbiFqF.cjs} +8 -5
- package/dist/cli-chunks/{context-DV2UK1Nz.cjs → context-Dp36pZ9a.cjs} +39 -81
- package/dist/cli-chunks/{create-2HfoB48V.cjs → create-P3g0ricz.cjs} +2 -2
- package/dist/cli-chunks/{dev-Dgt2zS9k.cjs → dev-CisJkXuQ.cjs} +396 -576
- package/dist/cli-chunks/doctor-B-LF5-uj.cjs +65 -0
- package/dist/cli-chunks/{index-D62ANeBv.cjs → index-BDaeBI_B.cjs} +50 -30
- package/dist/cli-chunks/{index-BjoSXl8C.cjs → index-CZGkk7fQ.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-CigcxJ2B.cjs → index.esm-NNLG29Tt.cjs} +8 -7
- package/dist/cli-chunks/{login-Cumknwdx.cjs → login-DTY5GolC.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CcE-HMmd.cjs → project-vite-DlCjHlu_.cjs} +1 -1
- package/dist/cli-chunks/{remote-DDdP3xcE.cjs → remote-BBMr7j8W.cjs} +57 -25
- package/dist/cli-chunks/{runtime-gate-DFjw66kF.cjs → runtime-gate-BppCl1r3.cjs} +11 -3
- package/dist/cli-chunks/{runtime-permission-env-CjsCe5bp.cjs → runtime-permission-env-CqsTHeas.cjs} +351 -0
- package/dist/cli-chunks/{session-BDi_AZSv.cjs → session-CnGeZCRZ.cjs} +1 -1
- package/dist/cli-chunks/skill-B0yAnPOJ.cjs +83 -0
- package/dist/cli-chunks/version-DN5jrixS.cjs +8 -0
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-BhZGUyYw.js +97 -0
- package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
- package/dist/devtools/browser-dev-host/assets/index-DJFB5ySU.css +1 -0
- package/dist/devtools/browser-dev-host/assets/index-Dh9H1JOm.js +567 -0
- package/dist/devtools/browser-dev-host/assets/workbench-state-wHgWRb7I.js +5 -0
- package/dist/devtools/browser-dev-host/index.html +6 -435
- package/dist/index.cjs.js +939 -29
- package/dist/index.esm.js +939 -30
- package/dist/protocol.cjs.js +381 -37
- package/dist/protocol.esm.js +355 -38
- package/dist/templates/{vue3-vite-ts → vanilla-vite-js}/.gitignore.ejs +0 -1
- package/dist/templates/vanilla-vite-js/README.md.ejs +14 -0
- package/dist/templates/vanilla-vite-js/index.html.ejs +20 -0
- package/dist/templates/vanilla-vite-js/package.json.ejs +22 -0
- package/dist/templates/vanilla-vite-js/src/assets/heybox-logo.svg +8 -0
- package/dist/templates/vanilla-vite-js/src/main.js +39 -0
- package/dist/templates/vanilla-vite-js/src/styles.css +155 -0
- package/dist/templates/{vue3-vite-ts/vite.config.ts → vanilla-vite-js/vite.config.js} +1 -2
- package/dist/vite.cjs.js +228 -9
- package/dist/vite.esm.js +228 -9
- package/package.json +36 -13
- package/skill/SKILL.md +22 -20
- package/skill/references/api-protocol.md +100 -6
- package/skill/references/api-root.md +166 -23
- package/skill/references/cli.md +41 -24
- package/skill/references/examples.md +30 -1
- package/skill/references/llms-index.md +1 -1
- package/skill/references/recipes.md +139 -36
- package/skill/references/safety-boundaries.md +14 -5
- package/skill/skill.json +10 -5
- package/types/core/client.d.ts +17 -1
- package/types/core/sdk.d.ts +3 -0
- package/types/core/singleton.d.ts +3 -0
- package/types/index.d.ts +4 -2
- package/types/miniapp-manifest/index.d.ts +1 -0
- package/types/miniapp-manifest/node.d.ts +3 -0
- package/types/miniapp-manifest/permissions.d.ts +37 -0
- package/types/miniapp-manifest/schema.d.ts +5 -0
- package/types/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/network/index.d.ts +50 -3
- package/types/modules/share/index.d.ts +1 -1
- package/types/modules/share/show-share-menu.d.ts +1 -1
- package/types/modules/share/types.d.ts +2 -4
- 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/skill-metadata.d.ts +0 -4
- package/dist/cli-chunks/doctor-C95gIao_.cjs +0 -204
- package/dist/devtools/browser-dev-host/main.js +0 -12263
- package/dist/templates/vue3-vite-ts/README.md.ejs +0 -47
- package/dist/templates/vue3-vite-ts/index.html.ejs +0 -12
- package/dist/templates/vue3-vite-ts/package.json.ejs +0 -33
- package/dist/templates/vue3-vite-ts/src/App.vue +0 -78
- package/dist/templates/vue3-vite-ts/src/__tests__/App.spec.ts +0 -148
- package/dist/templates/vue3-vite-ts/src/auth-handoff.ts +0 -46
- package/dist/templates/vue3-vite-ts/src/main.ts +0 -5
- package/dist/templates/vue3-vite-ts/src/styles.css +0 -60
- package/dist/templates/vue3-vite-ts/src/vite-env.d.ts +0 -1
- package/dist/templates/vue3-vite-ts/tsconfig.app.json +0 -17
- package/dist/templates/vue3-vite-ts/tsconfig.json +0 -11
- package/dist/templates/vue3-vite-ts/tsconfig.node.json +0 -11
- package/dist/templates/vue3-vite-ts/vitest.config.ts +0 -10
- package/skill/scripts/check-references.mjs +0 -14
- package/skill/scripts/markdown-sections.mjs +0 -36
- package/skill/scripts/package-skill.mjs +0 -60
- package/skill/scripts/package-skill.sh +0 -6
- package/skill/scripts/skill-metadata.mjs +0 -77
- package/skill/scripts/sync-agent-skills-payload.mjs +0 -359
- package/skill/scripts/sync-references.mjs +0 -794
- package/skill/scripts/validate-skill.mjs +0 -263
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';
|
|
@@ -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
|
-
{
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
requirement: { kind: 'all', permissions: ['steamLibrary'] },
|
|
43
71
|
risk: 'high',
|
|
44
72
|
},
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
-
|
|
105
|
+
requirement: { kind: 'none' },
|
|
60
106
|
risk: 'low',
|
|
61
107
|
},
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
243
|
+
requirement: { kind: 'all', permissions: ['clipboard'] },
|
|
74
244
|
risk: 'medium',
|
|
75
245
|
},
|
|
76
|
-
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD,
|
|
77
|
-
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD,
|
|
246
|
+
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
247
|
+
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
78
248
|
{
|
|
79
249
|
method: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
80
250
|
module: 'navigation',
|
|
81
251
|
capability: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
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
|
|
161
|
-
|
|
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
|
-
|
|
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: {
|
|
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;
|