@heybox/hb-sdk 0.8.0-alpha → 0.8.0-alpha.12
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 +106 -395
- package/README.md +107 -24
- package/THIRD_PARTY_NOTICES.md +1755 -0
- package/dist/cli-chunks/{build-DJWFSM1B.cjs → build-DNtjBmyy.cjs} +8 -5
- package/dist/cli-chunks/{context-DV2UK1Nz.cjs → context-CO_3KgM_.cjs} +39 -81
- package/dist/cli-chunks/{create-2HfoB48V.cjs → create-DG8JxrPU.cjs} +2 -2
- package/dist/cli-chunks/{dev-Dgt2zS9k.cjs → dev-C5U1Lo4e.cjs} +404 -577
- package/dist/cli-chunks/doctor-B50OXvrj.cjs +65 -0
- package/dist/cli-chunks/{index-D62ANeBv.cjs → index-B4nFqf-3.cjs} +50 -30
- package/dist/cli-chunks/{index-BjoSXl8C.cjs → index-B8FK1ojC.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-CigcxJ2B.cjs → index.esm-DiX5WKSp.cjs} +8 -7
- package/dist/cli-chunks/{login-Cumknwdx.cjs → login-CBwmxsEK.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CcE-HMmd.cjs → project-vite-DWpmHOsV.cjs} +1 -1
- package/dist/cli-chunks/{remote-DDdP3xcE.cjs → remote-Dt-U4gDD.cjs} +57 -25
- package/dist/cli-chunks/{runtime-gate-DFjw66kF.cjs → runtime-gate-CMnGCdfq.cjs} +11 -3
- package/dist/cli-chunks/{runtime-permission-env-CjsCe5bp.cjs → runtime-permission-env-BcUsO3nG.cjs} +351 -0
- package/dist/cli-chunks/{session-BDi_AZSv.cjs → session-yy543BIB.cjs} +1 -1
- package/dist/cli-chunks/skill-B4SWt2o6.cjs +83 -0
- package/dist/cli-chunks/version-CmizPu7D.cjs +8 -0
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-TzYf9L6C.js +99 -0
- package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
- package/dist/devtools/browser-dev-host/assets/index-C5MZZDa5.js +567 -0
- package/dist/devtools/browser-dev-host/assets/index-P-ra4m1y.css +1 -0
- package/dist/devtools/browser-dev-host/assets/workbench-state-BwV7bm4n.js +5 -0
- package/dist/devtools/browser-dev-host/index.html +6 -435
- package/dist/index.cjs.js +1023 -29
- package/dist/index.esm.js +1023 -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 +281 -13
- package/dist/vite.esm.js +281 -13
- package/package.json +34 -11
- package/skill/SKILL.md +22 -20
- package/skill/references/api-protocol.md +100 -6
- package/skill/references/api-root.md +199 -28
- 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 +20 -5
- package/skill/skill.json +10 -5
- package/types/core/client.d.ts +17 -1
- package/types/core/mini-dev-console.d.ts +36 -0
- 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/types/vite/index.d.ts +3 -1
- 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.esm.js
CHANGED
|
@@ -10,6 +10,22 @@ const VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD = 'viewport.setNavigationBarStyle
|
|
|
10
10
|
const STORAGE_GET_STORAGE_METHOD = 'storage.getStorage';
|
|
11
11
|
const STORAGE_SET_STORAGE_METHOD = 'storage.setStorage';
|
|
12
12
|
const NETWORK_REQUEST_METHOD = 'network.request';
|
|
13
|
+
const NETWORK_DOWNLOAD_METHOD = 'network.download';
|
|
14
|
+
const FILES_PICK_FILES_METHOD = 'files.pickFiles';
|
|
15
|
+
const FILES_PICK_DIRECTORY_METHOD = 'files.pickDirectory';
|
|
16
|
+
const FILES_SAVE_FILE_METHOD = 'files.saveFile';
|
|
17
|
+
const FILE_CREATE_METHOD = 'file.create';
|
|
18
|
+
const FILE_REMOVE_METHOD = 'file.remove';
|
|
19
|
+
const FILE_EXISTS_METHOD = 'file.exists';
|
|
20
|
+
const FILE_READ_TEXT_METHOD = 'file.readText';
|
|
21
|
+
const FILE_WRITE_TEXT_METHOD = 'file.writeText';
|
|
22
|
+
const FILE_READ_BYTES_METHOD = 'file.readBytes';
|
|
23
|
+
const FILE_WRITE_BYTES_METHOD = 'file.writeBytes';
|
|
24
|
+
const FILE_STAT_METHOD = 'file.stat';
|
|
25
|
+
const DIRECTORY_CREATE_METHOD = 'directory.create';
|
|
26
|
+
const DIRECTORY_REMOVE_METHOD = 'directory.remove';
|
|
27
|
+
const DIRECTORY_EXISTS_METHOD = 'directory.exists';
|
|
28
|
+
const DIRECTORY_LIST_METHOD = 'directory.list';
|
|
13
29
|
const UI_SHOW_TOAST_METHOD = 'ui.showToast';
|
|
14
30
|
const UI_SHOW_LOADING_METHOD = 'ui.showLoading';
|
|
15
31
|
const UI_HIDE_LOADING_METHOD = 'ui.hideLoading';
|
|
@@ -24,95 +40,249 @@ const CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.getCu
|
|
|
24
40
|
const CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD = 'cloud.leaderboard.deleteCurrentUserEntry';
|
|
25
41
|
const CLOUD_LEADERBOARD_GET_INFO_METHOD = 'cloud.leaderboard.getInfo';
|
|
26
42
|
const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
27
|
-
{
|
|
28
|
-
|
|
43
|
+
{
|
|
44
|
+
method: AUTH_LOGIN_METHOD,
|
|
45
|
+
module: 'auth',
|
|
46
|
+
capability: AUTH_LOGIN_METHOD,
|
|
47
|
+
requirement: { kind: 'all', permissions: ['userInfo'] },
|
|
48
|
+
risk: 'medium',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
method: USER_GET_INFO_METHOD,
|
|
52
|
+
module: 'user',
|
|
53
|
+
capability: USER_GET_INFO_METHOD,
|
|
54
|
+
requirement: { kind: 'all', permissions: ['userInfo'] },
|
|
55
|
+
risk: 'medium',
|
|
56
|
+
},
|
|
29
57
|
{
|
|
30
58
|
method: USER_REVOKE_AUTHORIZATION_METHOD,
|
|
31
59
|
module: 'user',
|
|
32
60
|
capability: USER_REVOKE_AUTHORIZATION_METHOD,
|
|
33
|
-
|
|
61
|
+
requirement: { kind: 'none' },
|
|
34
62
|
risk: 'high',
|
|
35
63
|
},
|
|
36
64
|
{
|
|
37
65
|
method: USER_GET_STEAM_GAME_LIST_METHOD,
|
|
38
66
|
module: 'user',
|
|
39
67
|
capability: USER_GET_STEAM_GAME_LIST_METHOD,
|
|
40
|
-
|
|
68
|
+
requirement: { kind: 'all', permissions: ['steamLibrary'] },
|
|
41
69
|
risk: 'high',
|
|
42
70
|
},
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
71
|
+
{
|
|
72
|
+
method: SHARE_COPY_LINK_METHOD,
|
|
73
|
+
module: 'share',
|
|
74
|
+
capability: SHARE_COPY_LINK_METHOD,
|
|
75
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
76
|
+
risk: 'medium',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
method: SHARE_SHOW_SHARE_MENU_METHOD,
|
|
80
|
+
module: 'share',
|
|
81
|
+
capability: SHARE_SHOW_SHARE_MENU_METHOD,
|
|
82
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
83
|
+
risk: 'low',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
method: SHARE_SCREENSHOT_METHOD,
|
|
87
|
+
module: 'share',
|
|
88
|
+
capability: SHARE_SCREENSHOT_METHOD,
|
|
89
|
+
requirement: { kind: 'all', permissions: ['share'] },
|
|
90
|
+
risk: 'medium',
|
|
91
|
+
},
|
|
46
92
|
{
|
|
47
93
|
method: VIEWPORT_GET_WINDOW_INFO_METHOD,
|
|
48
94
|
module: 'viewport',
|
|
49
95
|
capability: VIEWPORT_GET_WINDOW_INFO_METHOD,
|
|
50
|
-
|
|
96
|
+
requirement: { kind: 'none' },
|
|
51
97
|
risk: 'low',
|
|
52
98
|
},
|
|
53
99
|
{
|
|
54
100
|
method: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
|
|
55
101
|
module: 'viewport',
|
|
56
102
|
capability: VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD,
|
|
57
|
-
|
|
103
|
+
requirement: { kind: 'none' },
|
|
58
104
|
risk: 'low',
|
|
59
105
|
},
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
106
|
+
{
|
|
107
|
+
method: STORAGE_GET_STORAGE_METHOD,
|
|
108
|
+
module: 'storage',
|
|
109
|
+
capability: STORAGE_GET_STORAGE_METHOD,
|
|
110
|
+
requirement: { kind: 'all', permissions: ['storage'] },
|
|
111
|
+
risk: 'low',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
method: STORAGE_SET_STORAGE_METHOD,
|
|
115
|
+
module: 'storage',
|
|
116
|
+
capability: STORAGE_SET_STORAGE_METHOD,
|
|
117
|
+
requirement: { kind: 'all', permissions: ['storage'] },
|
|
118
|
+
risk: 'medium',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
method: NETWORK_REQUEST_METHOD,
|
|
122
|
+
module: 'network',
|
|
123
|
+
capability: NETWORK_REQUEST_METHOD,
|
|
124
|
+
requirement: { kind: 'all', permissions: ['network'] },
|
|
125
|
+
risk: 'high',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
method: NETWORK_DOWNLOAD_METHOD,
|
|
129
|
+
module: 'network',
|
|
130
|
+
capability: NETWORK_DOWNLOAD_METHOD,
|
|
131
|
+
requirement: { kind: 'all', permissions: ['network', 'filesystem'] },
|
|
132
|
+
risk: 'high',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
method: FILES_PICK_FILES_METHOD,
|
|
136
|
+
module: 'files',
|
|
137
|
+
capability: FILES_PICK_FILES_METHOD,
|
|
138
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
139
|
+
risk: 'high',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
method: FILES_PICK_DIRECTORY_METHOD,
|
|
143
|
+
module: 'files',
|
|
144
|
+
capability: FILES_PICK_DIRECTORY_METHOD,
|
|
145
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
146
|
+
risk: 'high',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
method: FILES_SAVE_FILE_METHOD,
|
|
150
|
+
module: 'files',
|
|
151
|
+
capability: FILES_SAVE_FILE_METHOD,
|
|
152
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
153
|
+
risk: 'high',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
method: FILE_CREATE_METHOD,
|
|
157
|
+
module: 'file',
|
|
158
|
+
capability: FILE_CREATE_METHOD,
|
|
159
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
160
|
+
risk: 'high',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
method: FILE_REMOVE_METHOD,
|
|
164
|
+
module: 'file',
|
|
165
|
+
capability: FILE_REMOVE_METHOD,
|
|
166
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
167
|
+
risk: 'high',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
method: FILE_EXISTS_METHOD,
|
|
171
|
+
module: 'file',
|
|
172
|
+
capability: FILE_EXISTS_METHOD,
|
|
173
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
174
|
+
risk: 'high',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
method: FILE_READ_TEXT_METHOD,
|
|
178
|
+
module: 'file',
|
|
179
|
+
capability: FILE_READ_TEXT_METHOD,
|
|
180
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
181
|
+
risk: 'high',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
method: FILE_WRITE_TEXT_METHOD,
|
|
185
|
+
module: 'file',
|
|
186
|
+
capability: FILE_WRITE_TEXT_METHOD,
|
|
187
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
188
|
+
risk: 'high',
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
method: FILE_READ_BYTES_METHOD,
|
|
192
|
+
module: 'file',
|
|
193
|
+
capability: FILE_READ_BYTES_METHOD,
|
|
194
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
195
|
+
risk: 'high',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
method: FILE_WRITE_BYTES_METHOD,
|
|
199
|
+
module: 'file',
|
|
200
|
+
capability: FILE_WRITE_BYTES_METHOD,
|
|
201
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
202
|
+
risk: 'high',
|
|
203
|
+
},
|
|
204
|
+
{ method: FILE_STAT_METHOD, module: 'file', capability: FILE_STAT_METHOD, requirement: { kind: 'all', permissions: ['filesystem'] }, risk: 'high' },
|
|
205
|
+
{
|
|
206
|
+
method: DIRECTORY_CREATE_METHOD,
|
|
207
|
+
module: 'directory',
|
|
208
|
+
capability: DIRECTORY_CREATE_METHOD,
|
|
209
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
210
|
+
risk: 'high',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
method: DIRECTORY_REMOVE_METHOD,
|
|
214
|
+
module: 'directory',
|
|
215
|
+
capability: DIRECTORY_REMOVE_METHOD,
|
|
216
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
217
|
+
risk: 'high',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
method: DIRECTORY_EXISTS_METHOD,
|
|
221
|
+
module: 'directory',
|
|
222
|
+
capability: DIRECTORY_EXISTS_METHOD,
|
|
223
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
224
|
+
risk: 'high',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
method: DIRECTORY_LIST_METHOD,
|
|
228
|
+
module: 'directory',
|
|
229
|
+
capability: DIRECTORY_LIST_METHOD,
|
|
230
|
+
requirement: { kind: 'all', permissions: ['filesystem'] },
|
|
231
|
+
risk: 'high',
|
|
232
|
+
},
|
|
233
|
+
{ method: UI_SHOW_TOAST_METHOD, module: 'ui', capability: UI_SHOW_TOAST_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
234
|
+
{ method: UI_SHOW_LOADING_METHOD, module: 'ui', capability: UI_SHOW_LOADING_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
235
|
+
{ method: UI_HIDE_LOADING_METHOD, module: 'ui', capability: UI_HIDE_LOADING_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
236
|
+
{ method: DEVICE_VIBRATE_METHOD, module: 'device', capability: DEVICE_VIBRATE_METHOD, requirement: { kind: 'none' }, risk: 'low' },
|
|
67
237
|
{
|
|
68
238
|
method: DEVICE_SET_CLIPBOARD_METHOD,
|
|
69
239
|
module: 'device',
|
|
70
240
|
capability: DEVICE_SET_CLIPBOARD_METHOD,
|
|
71
|
-
|
|
241
|
+
requirement: { kind: 'all', permissions: ['clipboard'] },
|
|
72
242
|
risk: 'medium',
|
|
73
243
|
},
|
|
74
|
-
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD,
|
|
75
|
-
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD,
|
|
244
|
+
{ method: NAVIGATION_CLOSE_METHOD, module: 'navigation', capability: NAVIGATION_CLOSE_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
245
|
+
{ method: NAVIGATION_RELOAD_METHOD, module: 'navigation', capability: NAVIGATION_RELOAD_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
|
|
76
246
|
{
|
|
77
247
|
method: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
78
248
|
module: 'navigation',
|
|
79
249
|
capability: NAVIGATION_OPEN_APP_PAGE_METHOD,
|
|
80
|
-
|
|
250
|
+
requirement: { kind: 'none' },
|
|
81
251
|
risk: 'medium',
|
|
82
252
|
},
|
|
83
253
|
{
|
|
84
254
|
method: CLOUD_LEADERBOARD_SUBMIT_METHOD,
|
|
85
255
|
module: 'cloud',
|
|
86
256
|
capability: CLOUD_LEADERBOARD_SUBMIT_METHOD,
|
|
87
|
-
|
|
257
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
88
258
|
risk: 'medium',
|
|
89
259
|
},
|
|
90
260
|
{
|
|
91
261
|
method: CLOUD_LEADERBOARD_GET_LIST_METHOD,
|
|
92
262
|
module: 'cloud',
|
|
93
263
|
capability: CLOUD_LEADERBOARD_GET_LIST_METHOD,
|
|
94
|
-
|
|
264
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
95
265
|
risk: 'low',
|
|
96
266
|
},
|
|
97
267
|
{
|
|
98
268
|
method: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
|
|
99
269
|
module: 'cloud',
|
|
100
270
|
capability: CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD,
|
|
101
|
-
|
|
271
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
102
272
|
risk: 'medium',
|
|
103
273
|
},
|
|
104
274
|
{
|
|
105
275
|
method: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
|
|
106
276
|
module: 'cloud',
|
|
107
277
|
capability: CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD,
|
|
108
|
-
|
|
278
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
109
279
|
risk: 'medium',
|
|
110
280
|
},
|
|
111
281
|
{
|
|
112
282
|
method: CLOUD_LEADERBOARD_GET_INFO_METHOD,
|
|
113
283
|
module: 'cloud',
|
|
114
284
|
capability: CLOUD_LEADERBOARD_GET_INFO_METHOD,
|
|
115
|
-
|
|
285
|
+
requirement: { kind: 'all', permissions: ['leaderboard'] },
|
|
116
286
|
risk: 'low',
|
|
117
287
|
},
|
|
118
288
|
];
|
|
@@ -124,21 +294,152 @@ const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
|
|
|
124
294
|
const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
|
|
125
295
|
const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
|
|
126
296
|
const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
|
|
297
|
+
const MINI_PROGRAM_OPERATION_PROGRESS_METHOD = 'operation.progress';
|
|
127
298
|
|
|
128
299
|
function isMiniProgramBridgeMessage(value) {
|
|
129
|
-
if (!value
|
|
300
|
+
if (!isRecord$1(value))
|
|
301
|
+
return false;
|
|
302
|
+
if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString(value.nonce)) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
if (value.type === 'handshake') {
|
|
306
|
+
return isNonEmptyString(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
|
|
307
|
+
}
|
|
308
|
+
if (value.type === 'request') {
|
|
309
|
+
return isNonEmptyString(value.id) && isNonEmptyString(value.method) && value.error === undefined;
|
|
310
|
+
}
|
|
311
|
+
if (value.type === 'response') {
|
|
312
|
+
return (isNonEmptyString(value.id) &&
|
|
313
|
+
(value.method === undefined || isNonEmptyString(value.method)) &&
|
|
314
|
+
(value.error === undefined || isBridgeError(value.error)));
|
|
315
|
+
}
|
|
316
|
+
if (value.type === 'event') {
|
|
317
|
+
if (!isNonEmptyString(value.method) || value.error !== undefined)
|
|
318
|
+
return false;
|
|
319
|
+
if (value.method === MINI_PROGRAM_OPERATION_PROGRESS_METHOD) {
|
|
320
|
+
return value.version === 2 && isNonEmptyString(value.id) && isMiniProgramDownloadProgressPayload(value.payload);
|
|
321
|
+
}
|
|
322
|
+
return value.id === undefined || isNonEmptyString(value.id);
|
|
323
|
+
}
|
|
324
|
+
if (value.type === 'cancel') {
|
|
325
|
+
return (value.version === 2 && isNonEmptyString(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
|
|
326
|
+
}
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
function isMiniProgramRelativePath(value) {
|
|
330
|
+
if (typeof value !== 'string' || !value || value.startsWith('/') || value.endsWith('/')) {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
if (/[\\\u0000-\u001f\u007f]/.test(value))
|
|
334
|
+
return false;
|
|
335
|
+
return value.split('/').every((segment) => Boolean(segment) && segment !== '.' && segment !== '..');
|
|
336
|
+
}
|
|
337
|
+
function isMiniProgramPathRootRef(value) {
|
|
338
|
+
if (!isRecord$1(value))
|
|
130
339
|
return false;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
340
|
+
if (value.kind === 'sandbox')
|
|
341
|
+
return hasOnlyKeys(value, ['kind']);
|
|
342
|
+
return value.kind === 'directory' && isNonEmptyString(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
|
|
343
|
+
}
|
|
344
|
+
function isMiniProgramFileRef(value) {
|
|
345
|
+
if (!isRecord$1(value) || value.kind !== 'file')
|
|
346
|
+
return false;
|
|
347
|
+
if (isNonEmptyString(value.handleId)) {
|
|
348
|
+
return hasOnlyKeys(value, ['kind', 'handleId']);
|
|
349
|
+
}
|
|
350
|
+
return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
|
|
351
|
+
}
|
|
352
|
+
function isMiniProgramDirectoryRef(value) {
|
|
353
|
+
if (!isRecord$1(value) || value.kind !== 'directory')
|
|
354
|
+
return false;
|
|
355
|
+
if (isNonEmptyString(value.handleId)) {
|
|
356
|
+
return hasOnlyKeys(value, ['kind', 'handleId']);
|
|
357
|
+
}
|
|
358
|
+
return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
|
|
359
|
+
}
|
|
360
|
+
function isMiniProgramFileDescriptor(value) {
|
|
361
|
+
return (isRecord$1(value) &&
|
|
362
|
+
value.kind === 'file' &&
|
|
363
|
+
isNonEmptyString(value.name) &&
|
|
364
|
+
isFileMode(value.mode) &&
|
|
365
|
+
isMiniProgramFileRef(value.ref) &&
|
|
366
|
+
hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
|
|
367
|
+
}
|
|
368
|
+
function isMiniProgramDirectoryDescriptor(value) {
|
|
369
|
+
return (isRecord$1(value) &&
|
|
370
|
+
value.kind === 'directory' &&
|
|
371
|
+
isNonEmptyString(value.name) &&
|
|
372
|
+
isFileMode(value.mode) &&
|
|
373
|
+
isMiniProgramDirectoryRef(value.ref) &&
|
|
374
|
+
hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
|
|
375
|
+
}
|
|
376
|
+
function isMiniProgramFileSystemEntityDescriptor(value) {
|
|
377
|
+
return isMiniProgramFileDescriptor(value) || isMiniProgramDirectoryDescriptor(value);
|
|
378
|
+
}
|
|
379
|
+
function isMiniProgramByteArray(value) {
|
|
380
|
+
return value instanceof Uint8Array && value.buffer instanceof ArrayBuffer;
|
|
381
|
+
}
|
|
382
|
+
function isMiniProgramFileStat(value) {
|
|
383
|
+
return (isRecord$1(value) &&
|
|
384
|
+
value.kind === 'file' &&
|
|
385
|
+
isNonNegativeSafeInteger(value.size) &&
|
|
386
|
+
(value.modifiedAt === undefined || isNonNegativeFiniteNumber(value.modifiedAt)) &&
|
|
387
|
+
(value.createdAt === undefined || isNonNegativeFiniteNumber(value.createdAt)) &&
|
|
388
|
+
hasOnlyKeys(value, ['kind', 'size', 'modifiedAt', 'createdAt']));
|
|
389
|
+
}
|
|
390
|
+
function isMiniProgramDownloadProgressPayload(value) {
|
|
391
|
+
if (!isRecord$1(value) ||
|
|
392
|
+
!isNonNegativeSafeInteger(value.loaded) ||
|
|
393
|
+
typeof value.lengthComputable !== 'boolean' ||
|
|
394
|
+
!hasOnlyKeys(value, ['loaded', 'total', 'lengthComputable'])) {
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
if (!value.lengthComputable)
|
|
398
|
+
return value.total === undefined;
|
|
399
|
+
return isNonNegativeSafeInteger(value.total) && value.loaded <= value.total;
|
|
400
|
+
}
|
|
401
|
+
function isSDKHandshakePayload(value) {
|
|
402
|
+
return isRecord$1(value) && isNonEmptyString(value.href) && typeof value.userAgent === 'string' && isNonEmptyString(value.sdkVersion);
|
|
403
|
+
}
|
|
404
|
+
function isBridgeError(value) {
|
|
405
|
+
return isRecord$1(value) && isNonEmptyString(value.code) && typeof value.message === 'string';
|
|
406
|
+
}
|
|
407
|
+
function isFileMode(value) {
|
|
408
|
+
return value === 'read' || value === 'readwrite';
|
|
409
|
+
}
|
|
410
|
+
function isNonNegativeSafeInteger(value) {
|
|
411
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
412
|
+
}
|
|
413
|
+
function isNonNegativeFiniteNumber(value) {
|
|
414
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
415
|
+
}
|
|
416
|
+
function isNonEmptyString(value) {
|
|
417
|
+
return typeof value === 'string' && value.length > 0;
|
|
418
|
+
}
|
|
419
|
+
function hasOnlyKeys(value, allowedKeys) {
|
|
420
|
+
const allowed = new Set(allowedKeys);
|
|
421
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
422
|
+
}
|
|
423
|
+
function isRecord$1(value) {
|
|
424
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
136
425
|
}
|
|
137
426
|
|
|
138
427
|
/** 当前用户信息与登录能力支持的完整 scope 目录。 */
|
|
139
428
|
const USER_INFO_AUTHORIZATION_SCOPES = ['identity', 'profile'];
|
|
140
429
|
|
|
141
|
-
const
|
|
430
|
+
const MINI_PROGRAM_PERMISSION_KEYS = [
|
|
431
|
+
'userInfo',
|
|
432
|
+
'steamLibrary',
|
|
433
|
+
'share',
|
|
434
|
+
'storage',
|
|
435
|
+
'filesystem',
|
|
436
|
+
'clipboard',
|
|
437
|
+
'leaderboard',
|
|
438
|
+
'network',
|
|
439
|
+
];
|
|
440
|
+
new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
441
|
+
|
|
442
|
+
const MANAGED_RUNTIME_PERMISSION_KEYS = new Set(MINI_PROGRAM_PERMISSION_KEYS);
|
|
142
443
|
function isManagedMiniProgramRuntimePermissionKey(key) {
|
|
143
444
|
return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
|
|
144
445
|
}
|
|
@@ -155,20 +456,36 @@ function parseMiniProgramRuntimePermissions(snapshot) {
|
|
|
155
456
|
if (!isRecord(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
|
|
156
457
|
return { valid: false, permissions: {} };
|
|
157
458
|
}
|
|
158
|
-
const
|
|
159
|
-
|
|
459
|
+
const inputKey = rawEntry.key.trim();
|
|
460
|
+
const key = inputKey === 'network.request' ? 'network' : inputKey;
|
|
461
|
+
if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled')) {
|
|
160
462
|
return { valid: false, permissions: {} };
|
|
161
463
|
}
|
|
162
464
|
seenKeys.add(key);
|
|
163
|
-
if (!isManagedMiniProgramRuntimePermissionKey(key))
|
|
465
|
+
if (!isManagedMiniProgramRuntimePermissionKey(key)) {
|
|
466
|
+
if (!isRecord(rawEntry.config))
|
|
467
|
+
return { valid: false, permissions: {} };
|
|
164
468
|
continue;
|
|
165
|
-
|
|
469
|
+
}
|
|
470
|
+
if (key === 'network') {
|
|
471
|
+
const config = rawEntry.config;
|
|
472
|
+
if (!isRecord(config) || typeof config.useOfficialDomain !== 'boolean') {
|
|
473
|
+
return { valid: false, permissions: {} };
|
|
474
|
+
}
|
|
475
|
+
permissions[key] = {
|
|
476
|
+
key,
|
|
477
|
+
status: rawEntry.status,
|
|
478
|
+
config: { useOfficialDomain: config.useOfficialDomain },
|
|
479
|
+
};
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
if (rawEntry.config !== null && rawEntry.config !== undefined && (!isRecord(rawEntry.config) || Object.keys(rawEntry.config).length > 0)) {
|
|
166
483
|
return { valid: false, permissions: {} };
|
|
167
484
|
}
|
|
168
485
|
permissions[key] = {
|
|
169
486
|
key,
|
|
170
487
|
status: rawEntry.status,
|
|
171
|
-
config: {
|
|
488
|
+
config: {},
|
|
172
489
|
};
|
|
173
490
|
}
|
|
174
491
|
return { valid: true, permissions };
|
|
@@ -177,4 +494,4 @@ function isRecord(value) {
|
|
|
177
494
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
178
495
|
}
|
|
179
496
|
|
|
180
|
-
export { AUTH_LOGIN_METHOD, CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_INFO_METHOD, CLOUD_LEADERBOARD_GET_LIST_METHOD, CLOUD_LEADERBOARD_SUBMIT_METHOD, DEVICE_SET_CLIPBOARD_METHOD, DEVICE_VIBRATE_METHOD, MINI_PROGRAM_BRIDGE_NONCE_PARAM, MINI_PROGRAM_MESSAGE_NAMESPACE, MINI_PROGRAM_MESSAGE_VERSION, MINI_PROGRAM_PROTOCOL_CAPABILITIES, NAVIGATION_CLOSE_METHOD, NAVIGATION_OPEN_APP_PAGE_METHOD, NAVIGATION_RELOAD_METHOD, NETWORK_REQUEST_METHOD, RUNTIME_LOCATION_PROBE_METHOD, SDK_CSP_VIOLATION_METHOD, SDK_HANDSHAKE_METHOD, SDK_LOCATION_REPORT_METHOD, SHARE_COPY_LINK_METHOD, SHARE_SCREENSHOT_METHOD, SHARE_SHOW_SHARE_MENU_METHOD, STORAGE_GET_STORAGE_METHOD, STORAGE_SET_STORAGE_METHOD, UI_HIDE_LOADING_METHOD, UI_SHOW_LOADING_METHOD, UI_SHOW_TOAST_METHOD, USER_GET_INFO_METHOD, USER_GET_STEAM_GAME_LIST_METHOD, USER_INFO_AUTHORIZATION_SCOPES, USER_REVOKE_AUTHORIZATION_METHOD, VIEWPORT_GET_WINDOW_INFO_METHOD, VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD, isManagedMiniProgramRuntimePermissionKey, isMiniProgramBridgeMessage, parseMiniProgramRuntimePermissions };
|
|
497
|
+
export { AUTH_LOGIN_METHOD, CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_INFO_METHOD, CLOUD_LEADERBOARD_GET_LIST_METHOD, CLOUD_LEADERBOARD_SUBMIT_METHOD, DEVICE_SET_CLIPBOARD_METHOD, DEVICE_VIBRATE_METHOD, DIRECTORY_CREATE_METHOD, DIRECTORY_EXISTS_METHOD, DIRECTORY_LIST_METHOD, DIRECTORY_REMOVE_METHOD, FILES_PICK_DIRECTORY_METHOD, FILES_PICK_FILES_METHOD, FILES_SAVE_FILE_METHOD, FILE_CREATE_METHOD, FILE_EXISTS_METHOD, FILE_READ_BYTES_METHOD, FILE_READ_TEXT_METHOD, FILE_REMOVE_METHOD, FILE_STAT_METHOD, FILE_WRITE_BYTES_METHOD, FILE_WRITE_TEXT_METHOD, MINI_PROGRAM_BRIDGE_NONCE_PARAM, MINI_PROGRAM_MESSAGE_NAMESPACE, MINI_PROGRAM_MESSAGE_VERSION, MINI_PROGRAM_OPERATION_PROGRESS_METHOD, MINI_PROGRAM_PROTOCOL_CAPABILITIES, NAVIGATION_CLOSE_METHOD, NAVIGATION_OPEN_APP_PAGE_METHOD, NAVIGATION_RELOAD_METHOD, NETWORK_DOWNLOAD_METHOD, NETWORK_REQUEST_METHOD, RUNTIME_LOCATION_PROBE_METHOD, SDK_CSP_VIOLATION_METHOD, SDK_HANDSHAKE_METHOD, SDK_LOCATION_REPORT_METHOD, SHARE_COPY_LINK_METHOD, SHARE_SCREENSHOT_METHOD, SHARE_SHOW_SHARE_MENU_METHOD, STORAGE_GET_STORAGE_METHOD, STORAGE_SET_STORAGE_METHOD, UI_HIDE_LOADING_METHOD, UI_SHOW_LOADING_METHOD, UI_SHOW_TOAST_METHOD, USER_GET_INFO_METHOD, USER_GET_STEAM_GAME_LIST_METHOD, USER_INFO_AUTHORIZATION_SCOPES, USER_REVOKE_AUTHORIZATION_METHOD, VIEWPORT_GET_WINDOW_INFO_METHOD, VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD, isManagedMiniProgramRuntimePermissionKey, isMiniProgramBridgeMessage, isMiniProgramByteArray, isMiniProgramDirectoryDescriptor, isMiniProgramDirectoryRef, isMiniProgramDownloadProgressPayload, isMiniProgramFileDescriptor, isMiniProgramFileRef, isMiniProgramFileStat, isMiniProgramFileSystemEntityDescriptor, isMiniProgramPathRootRef, isMiniProgramRelativePath, parseMiniProgramRuntimePermissions };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# <%= projectName %>
|
|
2
|
+
|
|
3
|
+
## 命令
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install
|
|
7
|
+
npm run dev
|
|
8
|
+
npm run build
|
|
9
|
+
npm run deploy -- --release-note "更新说明"
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`vite.config.js` 默认声明 `android`、`ios`、`ohos`。发布前请在每个声明的平台完成真机验收;需要支持桌面平台时,由项目自行加入并验收。
|
|
13
|
+
|
|
14
|
+
更多内容见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli) 和 [SDK 文档](https://docs.xiaoheihe.cn/hb_sdk/)。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
6
|
+
<title><%= projectName %></title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<main class="page">
|
|
10
|
+
<div class="content">
|
|
11
|
+
<img class="logo" src="/src/assets/heybox-logo.svg" alt="小黑盒" />
|
|
12
|
+
<h1>Hello, World!</h1>
|
|
13
|
+
<p class="welcome">欢迎来到小黑盒小程序工坊</p>
|
|
14
|
+
<button type="button" data-testid="greeting-button">打个招呼</button>
|
|
15
|
+
<p class="error" data-testid="greeting-error" role="status" aria-live="polite"></p>
|
|
16
|
+
</div>
|
|
17
|
+
</main>
|
|
18
|
+
<script type="module" src="/src/main.js"></script>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "<%= packageName %>",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"heybox": {
|
|
7
|
+
"miniProgramId": "",
|
|
8
|
+
"permissions": {}
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"hb-sdk": "hb-sdk",
|
|
12
|
+
"dev": "hb-sdk dev",
|
|
13
|
+
"build": "hb-sdk build",
|
|
14
|
+
"deploy": "hb-sdk remote deploy"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@heybox/hb-sdk": "^<%= sdkVersion %>"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"vite": "^8.0.12"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path
|
|
3
|
+
fill-rule="evenodd"
|
|
4
|
+
clip-rule="evenodd"
|
|
5
|
+
d="M16.5 6.59477C16.5 6.43342 16.3831 6.23597 16.2396 6.15586L10.2098 2.76306C10.0663 2.68296 9.94826 2.61751 9.94595 2.61864C9.94363 2.61977 9.82561 2.55433 9.68212 2.47422L8.89989 2.03418C8.75641 1.95407 8.63953 2.01952 8.63953 2.18086V8.42036C8.63953 8.5817 8.77376 8.71259 8.93923 8.71259H10.9584C11.1251 8.71259 11.2593 8.5817 11.2593 8.42036V6.74032C11.2593 6.57897 11.3762 6.51353 11.5197 6.59364L13.6187 7.7761C13.7622 7.85621 13.8791 8.05366 13.8791 8.21501V14.8562C13.8791 15.0175 13.9959 15.083 14.1394 15.0029L16.2396 13.8215C16.3831 13.7414 16.5 13.544 16.5 13.3826V6.59477ZM9.03937 11.2825C8.87383 11.2825 8.73954 11.4133 8.73954 11.5745L8.74301 13.2518C8.74301 13.413 8.62609 13.4784 8.48254 13.3983L6.3814 12.2181C6.23901 12.1381 6.12208 11.9408 6.12208 11.7796V5.14365C6.12208 4.98246 6.00516 4.91708 5.86161 4.99711L3.76047 6.17732C3.61692 6.25735 3.5 6.45462 3.5 6.61581V13.3972C3.5 13.5584 3.61692 13.7557 3.76047 13.8357L8.02642 16.2344C8.16997 16.3145 8.2869 16.381 8.2869 16.3821C8.2869 16.3832 8.40266 16.4497 8.54621 16.5298L11.1 17.9658C11.2435 18.0459 11.3605 17.9805 11.3605 17.8193V11.5745C11.3593 11.4133 11.225 11.2825 11.0595 11.2825H9.03937Z"
|
|
6
|
+
fill="#14191E"
|
|
7
|
+
/>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import hbSDK from '@heybox/hb-sdk';
|
|
2
|
+
import './styles.css';
|
|
3
|
+
|
|
4
|
+
const greetingButton = document.querySelector('[data-testid="greeting-button"]');
|
|
5
|
+
const greetingError = document.querySelector('[data-testid="greeting-error"]');
|
|
6
|
+
const colorScheme = window.matchMedia('(prefers-color-scheme: dark)');
|
|
7
|
+
|
|
8
|
+
async function greet() {
|
|
9
|
+
greetingButton.disabled = true;
|
|
10
|
+
greetingButton.setAttribute('aria-busy', 'true');
|
|
11
|
+
greetingError.textContent = '';
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
await hbSDK.ui.showToast({
|
|
15
|
+
message: '欢迎来到小黑盒小程序工坊',
|
|
16
|
+
status: 'success',
|
|
17
|
+
});
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error('无法显示欢迎提示', error);
|
|
20
|
+
greetingError.textContent = '欢迎提示无法显示,请重试';
|
|
21
|
+
} finally {
|
|
22
|
+
greetingButton.disabled = false;
|
|
23
|
+
greetingButton.setAttribute('aria-busy', 'false');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function syncNavigationBar() {
|
|
28
|
+
hbSDK.viewport
|
|
29
|
+
.setNavigationBarStyle({ foregroundStyle: colorScheme.matches ? 'light' : 'dark' })
|
|
30
|
+
.catch((error) => console.error('无法同步导航栏样式', error));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
greetingButton.addEventListener('click', greet);
|
|
34
|
+
if (typeof colorScheme.addEventListener === 'function') {
|
|
35
|
+
colorScheme.addEventListener('change', syncNavigationBar);
|
|
36
|
+
} else if (typeof colorScheme.addListener === 'function') {
|
|
37
|
+
colorScheme.addListener(syncNavigationBar);
|
|
38
|
+
}
|
|
39
|
+
syncNavigationBar();
|