@heybox/hb-sdk 0.9.5 → 0.9.6-alpha.1

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 (34) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +4 -0
  3. package/dist/cli-chunks/{artifact-BQjpVazW.cjs → artifact-C5n7xjnz.cjs} +3 -3
  4. package/dist/cli-chunks/{build-Ds2vtEaS.cjs → build-BgBt5SkX.cjs} +5 -5
  5. package/dist/cli-chunks/{create-DSvHazlY.cjs → create-BL6uwtkQ.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-BUZaQAqF.cjs → dev-NgklQb6b.cjs} +8 -8
  7. package/dist/cli-chunks/{dev-context-iwZzKi8v.cjs → dev-context-Tf8MgSsu.cjs} +2 -2
  8. package/dist/cli-chunks/{doctor-DBHIFXJ_.cjs → doctor-CGlEf1yi.cjs} +1 -1
  9. package/dist/cli-chunks/{games-DJ8FFJEh.cjs → games-Cc-DclmK.cjs} +1 -1
  10. package/dist/cli-chunks/{index-CPdVzdQ4.cjs → index-CmxsiTTn.cjs} +17 -17
  11. package/dist/cli-chunks/{index-DYmSgt-R.cjs → index-D9XLBbNV.cjs} +1 -1
  12. package/dist/cli-chunks/{index.esm-BwPX3niz.cjs → index.esm-DnyLP_Zc.cjs} +6 -6
  13. package/dist/cli-chunks/{login-CVdgNJu0.cjs → login-ZMBDHBuA.cjs} +1 -1
  14. package/dist/cli-chunks/{project-vite-CRiHrfto.cjs → project-vite-eM87vX9L.cjs} +1 -1
  15. package/dist/cli-chunks/{remote-B_T2nCpI.cjs → remote-DVhxpWDg.cjs} +6 -6
  16. package/dist/cli-chunks/{runtime-permission-env-D3nbeD_M.cjs → runtime-permission-env-q1FWWwbV.cjs} +2 -2
  17. package/dist/cli-chunks/{skill-BCUvQ_DM.cjs → skill-mRXM87hY.cjs} +2 -2
  18. package/dist/cli-chunks/{version-CYlLbj1-.cjs → version-BqHRI4Lz.cjs} +1 -1
  19. package/dist/cli.cjs +1 -1
  20. package/dist/devtools/browser-dev-host/assets/browser-dev-host-DtWOjzCe.js +103 -0
  21. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-26ZdXlpU.js → desktop-app-launch-C2Vw0-AC.js} +1 -1
  22. package/dist/devtools/browser-dev-host/assets/{index-CnC8QCV1.js → index-B-rjfibN.js} +3 -3
  23. package/dist/devtools/browser-dev-host/index.html +2 -2
  24. package/dist/index.cjs.js +4 -1
  25. package/dist/index.esm.js +4 -1
  26. package/dist/protocol.cjs.js +2 -0
  27. package/dist/protocol.esm.js +2 -0
  28. package/dist/vite.cjs.js +1 -1
  29. package/dist/vite.esm.js +1 -1
  30. package/docs/appreciation-code.md +67 -0
  31. package/package.json +7 -6
  32. package/skill/skill.json +4 -4
  33. package/types/index.d.ts +18 -0
  34. package/dist/devtools/browser-dev-host/assets/browser-dev-host-xmiOis7_.js +0 -103
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="theme-color" content="#f4f5f7" />
7
7
  <title>小程序工坊调试台</title>
8
- <script type="module" crossorigin src="/assets/index-CnC8QCV1.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-26ZdXlpU.js">
8
+ <script type="module" crossorigin src="/assets/index-B-rjfibN.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-C2Vw0-AC.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/index-DSTlrpnQ.css">
11
11
  </head>
12
12
  <body>
package/dist/index.cjs.js CHANGED
@@ -424,6 +424,7 @@ const GAME_SAVES_READ_PARSED_DATA_METHOD = 'gameSaves.readParsedData';
424
424
  const USER_GET_INFO_METHOD = 'user.getInfo';
425
425
  const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
426
426
  const USER_GET_STEAM_GAME_LIST_METHOD = 'user.getSteamGameList';
427
+ const USER_SHOW_APPRECIATION_METHOD = 'user.showAppreciation';
427
428
  const SHARE_COPY_LINK_METHOD = 'share.copyLink';
428
429
  const SHARE_SHOW_SHARE_MENU_METHOD = 'share.showShareMenu';
429
430
  const SHARE_SCREENSHOT_METHOD = 'share.screenshot';
@@ -7508,7 +7509,7 @@ function createMessageId() {
7508
7509
  /** 构建时替换为当前发布包的实际版本。 */
7509
7510
  const HB_SDK_VERSION = typeof undefined === 'string'
7510
7511
  ? undefined
7511
- : '0.9.5';
7512
+ : '0.9.6-alpha.1';
7512
7513
 
7513
7514
  const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
7514
7515
  const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
@@ -11446,6 +11447,7 @@ function createUserModule(requester) {
11446
11447
  return {
11447
11448
  requestFollowAuthor: () => requestFollowAuthor(requester),
11448
11449
  getFollowStatus: () => getFollowStatus(requester),
11450
+ showAppreciation: () => requester.request(USER_SHOW_APPRECIATION_METHOD),
11449
11451
  getInfo: () => getInfo(requester),
11450
11452
  revokeAuthorization: () => revokeAuthorization(requester),
11451
11453
  getSteamGameList: (options) => getSteamGameList(requester, options),
@@ -12258,6 +12260,7 @@ const auth = {
12258
12260
  const user = {
12259
12261
  requestFollowAuthor: () => getDefaultSDK().user.requestFollowAuthor(),
12260
12262
  getFollowStatus: () => getDefaultSDK().user.getFollowStatus(),
12263
+ showAppreciation: () => getDefaultSDK().user.showAppreciation(),
12261
12264
  getInfo: () => getDefaultSDK().user.getInfo(),
12262
12265
  revokeAuthorization: () => getDefaultSDK().user.revokeAuthorization(),
12263
12266
  getSteamGameList: (options) => getDefaultSDK().user.getSteamGameList(options),
package/dist/index.esm.js CHANGED
@@ -420,6 +420,7 @@ const GAME_SAVES_READ_PARSED_DATA_METHOD = 'gameSaves.readParsedData';
420
420
  const USER_GET_INFO_METHOD = 'user.getInfo';
421
421
  const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
422
422
  const USER_GET_STEAM_GAME_LIST_METHOD = 'user.getSteamGameList';
423
+ const USER_SHOW_APPRECIATION_METHOD = 'user.showAppreciation';
423
424
  const SHARE_COPY_LINK_METHOD = 'share.copyLink';
424
425
  const SHARE_SHOW_SHARE_MENU_METHOD = 'share.showShareMenu';
425
426
  const SHARE_SCREENSHOT_METHOD = 'share.screenshot';
@@ -7504,7 +7505,7 @@ function createMessageId() {
7504
7505
  /** 构建时替换为当前发布包的实际版本。 */
7505
7506
  const HB_SDK_VERSION = typeof undefined === 'string'
7506
7507
  ? undefined
7507
- : '0.9.5';
7508
+ : '0.9.6-alpha.1';
7508
7509
 
7509
7510
  const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
7510
7511
  const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
@@ -11442,6 +11443,7 @@ function createUserModule(requester) {
11442
11443
  return {
11443
11444
  requestFollowAuthor: () => requestFollowAuthor(requester),
11444
11445
  getFollowStatus: () => getFollowStatus(requester),
11446
+ showAppreciation: () => requester.request(USER_SHOW_APPRECIATION_METHOD),
11445
11447
  getInfo: () => getInfo(requester),
11446
11448
  revokeAuthorization: () => revokeAuthorization(requester),
11447
11449
  getSteamGameList: (options) => getSteamGameList(requester, options),
@@ -12254,6 +12256,7 @@ const auth = {
12254
12256
  const user = {
12255
12257
  requestFollowAuthor: () => getDefaultSDK().user.requestFollowAuthor(),
12256
12258
  getFollowStatus: () => getDefaultSDK().user.getFollowStatus(),
12259
+ showAppreciation: () => getDefaultSDK().user.showAppreciation(),
12257
12260
  getInfo: () => getDefaultSDK().user.getInfo(),
12258
12261
  revokeAuthorization: () => getDefaultSDK().user.revokeAuthorization(),
12259
12262
  getSteamGameList: (options) => getDefaultSDK().user.getSteamGameList(options),
@@ -43,6 +43,7 @@ const GAME_SAVES_READ_PARSED_DATA_METHOD = 'gameSaves.readParsedData';
43
43
  const USER_GET_INFO_METHOD = 'user.getInfo';
44
44
  const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
45
45
  const USER_GET_STEAM_GAME_LIST_METHOD = 'user.getSteamGameList';
46
+ const USER_SHOW_APPRECIATION_METHOD = 'user.showAppreciation';
46
47
  const SHARE_COPY_LINK_METHOD = 'share.copyLink';
47
48
  const SHARE_SHOW_SHARE_MENU_METHOD = 'share.showShareMenu';
48
49
  const SHARE_SCREENSHOT_METHOD = 'share.screenshot';
@@ -177,6 +178,7 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
177
178
  requirement: { kind: 'all', permissions: ['steamLibrary'] },
178
179
  risk: 'high',
179
180
  },
181
+ { method: USER_SHOW_APPRECIATION_METHOD, module: 'user', capability: USER_SHOW_APPRECIATION_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
180
182
  {
181
183
  method: SHARE_COPY_LINK_METHOD,
182
184
  module: 'share',
@@ -41,6 +41,7 @@ const GAME_SAVES_READ_PARSED_DATA_METHOD = 'gameSaves.readParsedData';
41
41
  const USER_GET_INFO_METHOD = 'user.getInfo';
42
42
  const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
43
43
  const USER_GET_STEAM_GAME_LIST_METHOD = 'user.getSteamGameList';
44
+ const USER_SHOW_APPRECIATION_METHOD = 'user.showAppreciation';
44
45
  const SHARE_COPY_LINK_METHOD = 'share.copyLink';
45
46
  const SHARE_SHOW_SHARE_MENU_METHOD = 'share.showShareMenu';
46
47
  const SHARE_SCREENSHOT_METHOD = 'share.screenshot';
@@ -175,6 +176,7 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
175
176
  requirement: { kind: 'all', permissions: ['steamLibrary'] },
176
177
  risk: 'high',
177
178
  },
179
+ { method: USER_SHOW_APPRECIATION_METHOD, module: 'user', capability: USER_SHOW_APPRECIATION_METHOD, requirement: { kind: 'none' }, risk: 'medium' },
178
180
  {
179
181
  method: SHARE_COPY_LINK_METHOD,
180
182
  module: 'share',
package/dist/vite.cjs.js CHANGED
@@ -10329,7 +10329,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
10329
10329
  /** 构建时替换为当前发布包的实际版本。 */
10330
10330
  const HB_SDK_VERSION = typeof undefined === 'string'
10331
10331
  ? undefined
10332
- : '0.9.5';
10332
+ : '0.9.6-alpha.1';
10333
10333
 
10334
10334
  /**
10335
10335
  * iframe 与调试台页面的开发期 console 捕获转发。
package/dist/vite.esm.js CHANGED
@@ -10326,7 +10326,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
10326
10326
  /** 构建时替换为当前发布包的实际版本。 */
10327
10327
  const HB_SDK_VERSION = typeof undefined === 'string'
10328
10328
  ? undefined
10329
- : '0.9.5';
10329
+ : '0.9.6-alpha.1';
10330
10330
 
10331
10331
  /**
10332
10332
  * iframe 与调试台页面的开发期 console 捕获转发。
@@ -0,0 +1,67 @@
1
+ # 赞赏(实验性)
2
+
3
+ `hbSDK.user.showAppreciation(): Promise<void>` 是**不稳定的实验性 API**,平台可随时调整、停用或下架,不承诺长期兼容。调用方必须捕获 SDK 错误,并在能力不可用时隐藏或降级赞赏入口。此标记不表示 API 已废弃。
4
+
5
+ ## 配置
6
+
7
+ 在开放平台“小程序管理 → 基础信息 → 微信赞赏码”中上传开发者微信导出的 JPG/PNG 原图(最大 2 MB,边长不超过 4096 像素),并打开“开启打赏”。图片复用现有上传服务,存放于当前小程序资源目录 `/u/<上传别名>/appreciation/<内容SHA256>.<jpg|png>`,上传成功后立即保存到平台。
8
+
9
+ - 图片与开关分别保存:关闭开关不会删除图片,重新开启无需再次上传;开启且已上传图片时才对用户生效。
10
+ - 图片上传和保存都成功才提示保存成功;保存失败可直接重试,不需要重新上传。
11
+ - 更换图片时,原图在新图片保存成功前继续生效。
12
+ - 刷新后台会读取已保存的图片和开关状态;读取失败时禁用编辑,点击“重新加载”后再操作。
13
+
14
+ 配置保存在平台的小程序资料中,**不写入 Manifest,不需要重新构建或发布小程序**,保存后对后续调用立即生效。沿用现有小程序管理权限,无需在 `permissions` 中声明,也不进入权限申请或审批。
15
+
16
+ 平台可停止展示赞赏码;停止期间开发者配置保留,恢复后无需重新上传。
17
+
18
+ ## 调用
19
+
20
+ ```ts
21
+ import hbSDK, { HbMiniProgramSDKError } from '@heybox/hb-sdk'
22
+
23
+ async function onSupportClick() {
24
+ try {
25
+ await hbSDK.user.showAppreciation()
26
+ } catch (error) {
27
+ if (error instanceof HbMiniProgramSDKError &&
28
+ ['REQUEST_UNSUPPORTED', 'METHOD_NOT_FOUND'].includes(error.code)) {
29
+ hideSupportEntry()
30
+ return
31
+ }
32
+ // 请求失败时提示稍后重试;由用户再次点击,不自动循环重试。
33
+ showSupportError()
34
+ }
35
+ }
36
+ ```
37
+
38
+ 方法不接收参数,不允许调用方指定图片 URL、收款人或金额。无需登录或 userInfo 权限,但必须由用户点击触发。宿主每次打开前都向平台重新查询赞赏码,不使用启动时的缓存;不支持、未配置、平台停用、请求失败或打开失败时抛 SDK 错误。
39
+
40
+ **没有业务返回值。** Promise resolve 仅表示半弹窗已打开,不表示图片已保存,更不表示用户已付款。关闭弹窗不产生付款或取消付款结果。
41
+
42
+ ## 展示与保存
43
+
44
+ 标题为 `打赏「小程序名·开发者」`,名称取自平台已加载的小程序详情。说明为“金额随心,感谢你对开发者的支持”。半弹窗等比展示完整原图,主按钮为“查看并保存赞赏码”,引导用户打开客户端图片预览后长按保存,再前往微信识别。
45
+
46
+ 不改 Android/iOS,不新增原生保存、相册权限或设置接口,不自动拉起微信。宿主在打开前校验图片地址;Web 处理图片加载失败、打开预览失败、重复点击和关闭后的迟到结果,不伪造“保存成功”。未接入该半弹窗的宿主报能力不可用。
47
+
48
+ ## 埋点
49
+
50
+ 复用宿主 telemetry:`open`、`image_error`、`preview_click`、`preview_opened`、`preview_error`、`close`。只上报当前小程序 ID 和必要错误码,不上报赞赏码地址、图片内容或支付信息。这些事件均不能作为保存成功、支付成功或收入数据。
51
+
52
+ 本能力只提供赞赏码配置和展示,不涉及支付订单、钱包、结算、退款或到账通知。
53
+
54
+ ## 错误处理
55
+
56
+ 失败时 Promise reject `HbMiniProgramSDKError`,通过 `code` 分支处理,不依赖提示文案。底层请求失败也通过此类返回,不使用 `HbMiniProgramNetworkError`。
57
+
58
+ | code | 含义与处理 |
59
+ | --- | --- |
60
+ | `REQUEST_UNSUPPORTED` | 宿主不支持、未开启、未配置图片或平台停用;隐藏或降级入口。 |
61
+ | `METHOD_NOT_FOUND` | 旧 Runtime 尚未接入;隐藏或降级入口。 |
62
+ | `REQUEST_FAILED` | 获取赞赏码失败;提示稍后重试,不永久隐藏入口。 |
63
+ | `INVALID_STATE` | 缺少平台加载的小程序身份、名称或开发者信息;检查宿主接入。 |
64
+ | `USER_GESTURE_REQUIRED` | 必须从真实点击事件直接调用。 |
65
+ | `INVALID_PARAMS` | 此方法不接受任何参数。 |
66
+
67
+ 取消、上下文变化、宿主销毁与限流保留原错误码。弹窗打开后发生的图片加载或预览失败由弹窗反馈,并记录相应埋点,不会改变已经 resolve 的调用结果。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heybox/hb-sdk",
3
- "version": "0.9.5",
3
+ "version": "0.9.6-alpha.1",
4
4
  "sideEffects": [
5
5
  "./src/index.ts",
6
6
  "./src/core/singleton.ts",
@@ -52,6 +52,7 @@
52
52
  "README.md",
53
53
  "CHANGELOG.md",
54
54
  "THIRD_PARTY_NOTICES.md",
55
+ "docs/appreciation-code.md",
55
56
  "docs/device-logs.md",
56
57
  "docs/runtime-host-migration.md",
57
58
  "bin",
@@ -76,7 +77,7 @@
76
77
  "undici": "^7.28.0",
77
78
  "ws": "^8.18.0",
78
79
  "sharp": "^0.34.5",
79
- "@heybox/hb-sdk-protocol": "0.9.5"
80
+ "@heybox/hb-sdk-protocol": "0.9.6-alpha.1"
80
81
  },
81
82
  "peerDependencies": {
82
83
  "vite": ">=5"
@@ -129,12 +130,12 @@
129
130
  "@ai-desktop/view-contract": "file:../hb-sdk-protocol/vendor/view-contract-2.2.2-6ac49bbf6410.tgz",
130
131
  "rollup-plugin-dts": "6.4.0",
131
132
  "@heybox-domain/heybox-theme": "~0.1.0",
133
+ "@heybox/hb-sdk-runtime": "~0.9.6-alpha.1",
134
+ "@heybox/hb-api": "~1.28.20",
132
135
  "@heybox-domain/heybox-vue3-ui": "~0.1.0",
133
- "@heybox/hb-api": "~1.28.19",
134
- "@heybox/hb-sdk-runtime": "~0.9.5",
135
136
  "@heybox/runtime-policy": "~0.2.1",
136
- "@heybox/runtime-transport-fetch": "~0.2.1",
137
- "@heybox/runtime": "~0.2.1"
137
+ "@heybox/runtime": "~0.2.1",
138
+ "@heybox/runtime-transport-fetch": "~0.2.1"
138
139
  },
139
140
  "publishConfig": {
140
141
  "registry": "https://registry.npmjs.org/",
package/skill/skill.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "hb-sdk",
3
- "skillVersion": "0.9.5+skill.fe3b525ecac8",
3
+ "skillVersion": "0.9.6-alpha.1+skill.fe3b525ecac8",
4
4
  "sdk": {
5
5
  "package": "@heybox/hb-sdk",
6
- "version": "0.9.5",
7
- "compatibility": "0.9.5"
6
+ "version": "0.9.6-alpha.1",
7
+ "compatibility": "0.9.6-alpha.1"
8
8
  },
9
9
  "distribution": {
10
10
  "type": "npm",
11
11
  "package": "@heybox/hb-sdk",
12
- "version": "0.9.5",
12
+ "version": "0.9.6-alpha.1",
13
13
  "path": "skill"
14
14
  },
15
15
  "integrity": "sha256-fe3b525ecac8431e1774ee453864cf9ba58ff6897272e2356ceb17b621c8c427"
package/types/index.d.ts CHANGED
@@ -2844,6 +2844,24 @@ interface MiniProgramUserModule {
2844
2844
  * @hbPlatform macos
2845
2845
  */
2846
2846
  getFollowStatus(): Promise<GetFollowStatusResult>;
2847
+ /**
2848
+ * 赞赏:打开当前小程序配置的开发者赞赏码半弹窗。
2849
+ * @returns 弹窗打开后以 void resolve,不提供图片保存或付款结果。
2850
+ * @throws {@link HbMiniProgramSDKError} `REQUEST_UNSUPPORTED` 表示宿主不支持、未配置或平台停用;
2851
+ * `REQUEST_FAILED` 表示获取赞赏码失败;`INVALID_STATE` 表示缺少宿主小程序信息;
2852
+ * `USER_GESTURE_REQUIRED` 表示缺少用户点击;`INVALID_PARAMS` 表示传入了参数。
2853
+ * 旧 Runtime 可能返回 `METHOD_NOT_FOUND`;取消、上下文变化、销毁和限流保留对应错误码。
2854
+ * @remarks 需要用户点击;无需 userInfo 权限和登录,不接受图片 URL、收款人或金额参数。
2855
+ * 用户通过现有客户端图片预览长按保存,不自动打开微信。
2856
+ * 此 API 不稳定,不承诺长期兼容;平台可随时调整、停用或下架。调用方必须捕获错误,并隐藏或降级赞赏入口。
2857
+ * @since 0.9.6
2858
+ * @experimental
2859
+ * @hbPlatform android
2860
+ * @hbPlatform ios
2861
+ * @hbClient android none
2862
+ * @hbClient ios none
2863
+ */
2864
+ showAppreciation(): Promise<void>;
2847
2865
  /**
2848
2866
  * 获取当前黑盒 APP 登录态、授权状态和已获准披露的资料。
2849
2867
  *