@heybox/hb-sdk 0.6.8-alpha.2 → 0.6.9-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +2 -0
  3. package/dist/cli-chunks/{build-CglqyB9Z.cjs → build-9hbhrRbU.cjs} +29 -25
  4. package/dist/cli-chunks/{context-CP7W_8aR.cjs → context-7rmakzS_.cjs} +122 -23
  5. package/dist/cli-chunks/{create-DldsTIVt.cjs → create-BkX4rtRP.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-BG0icySa.cjs → dev-DiZGT4FQ.cjs} +142 -108
  7. package/dist/cli-chunks/{doctor-Cd6Xq0m-.cjs → doctor-BcpqXVRh.cjs} +1 -1
  8. package/dist/cli-chunks/{index-jXyfZKy2.cjs → index-6HfcwZ_r.cjs} +3 -3
  9. package/dist/cli-chunks/{index-paN77avR.cjs → index-DofTxdoX.cjs} +14 -14
  10. package/dist/cli-chunks/{login-DlD9n_AF.cjs → login-DUiejZcD.cjs} +2 -2
  11. package/dist/cli-chunks/{project-vite-vHezGsg7.cjs → project-vite-CfD8Bp1K.cjs} +1 -1
  12. package/dist/cli-chunks/{remote-O5_nRdZN.cjs → remote-A4-PKgOn.cjs} +462 -190
  13. package/dist/cli-chunks/{runtime-gate-DfMJQGH9.cjs → runtime-gate-BWlU-R4h.cjs} +3 -3
  14. package/dist/cli-chunks/{index-v4-6fbXX.cjs → runtime-permission-env-DKrhgVM3.cjs} +276 -49
  15. package/dist/cli-chunks/{session-CiQplems.cjs → session-D5u3XzHN.cjs} +1 -1
  16. package/dist/cli.cjs +1 -1
  17. package/dist/devtools/mock-host/main.js +609 -6
  18. package/dist/index.cjs.js +403 -7
  19. package/dist/index.esm.js +403 -7
  20. package/dist/miniapp-publish.cjs.js +205 -0
  21. package/dist/miniapp-publish.esm.js +201 -1
  22. package/dist/vite.cjs.js +17 -2
  23. package/dist/vite.esm.js +17 -2
  24. package/package.json +2 -2
  25. package/skill/SKILL.md +7 -6
  26. package/skill/references/api-root.md +7 -2
  27. package/skill/references/cli.md +12 -0
  28. package/skill/references/examples.md +17 -2
  29. package/skill/references/safety-boundaries.md +2 -0
  30. package/skill/scripts/sync-references.mjs +17 -2
  31. package/skill/skill.json +4 -4
  32. package/types/core/network-sanitize.d.ts +31 -0
  33. package/types/miniapp-publish/index.d.ts +77 -0
  34. package/types/modules/network/index.d.ts +2 -0
  35. package/types/modules/network/observability.d.ts +39 -0
  36. package/types/modules/network/request-shape.d.ts +44 -0
  37. package/types/vite/html-policy.d.ts +1 -0
  38. package/types/vite/runtime-permission-env.d.ts +9 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,61 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.9-alpha.0
4
+
5
+ ### SDK
6
+
7
+ - `@heybox/hb-sdk/miniapp-publish` 提供跨 CLI 和开放平台复用的整包 framing、严格路径校验与上传 session 文件映射工具。
8
+
9
+ ### Build and CLI
10
+
11
+ - `hb-sdk remote deploy` 改为按整包签名创建或恢复服务端上传会话;同一构建仅上传服务端尚未确认的文件,不再维护本地上传会话缓存。
12
+ - 上传产物使用 session 隔离目录,同 key 重传可安全覆盖;上传回调按批次确认,重新执行 deploy 可依据服务端回执恢复上传。
13
+ - 同一设备的普通 deploy 按 API 环境、小程序和版本使用本地文件锁减少重复上传;锁目录不可用时降级为无锁执行,不影响服务端上传会话的正确性。
14
+ - CLI 不再自行拼接版本目录 key,当前小程序产物上传只使用服务端上传 session 返回的文件映射。
15
+ - 上传协议 hard cut 到 `0.6.8`;`0.6.7` 及更早 CLI 不再支持部署小程序构建产物,需升级后使用上传 session。
16
+
17
+ ## 0.6.8
18
+
19
+ ### SDK
20
+
21
+ - `network.request` 增加脱敏诊断日志和更完整的错误上下文,覆盖 HTTP 非 2xx、无效响应及 bridge/runtime 错误;业务应继续通过错误类型与结构化字段判断失败。
22
+ - `network.request` 在 SDK、Mock Host 和 Mock 网络代理中统一拒绝 `multipart/form-data`,并提示改用 form-urlencoded、JSON 或专用上传能力。
23
+
24
+ ### Build and CLI
25
+
26
+ - `hb-sdk dev` 与 `hb-sdk remote deploy` 在远端已启用 `network.request` 且 `useOfficialDomain=true` 时跳过平台 CSP;普通 build、匿名或异常权限快照继续 fail closed 注入。
27
+
28
+ ### Runtime
29
+
30
+ - Runtime 为 `network.request` 参数校验、adapter 失败与非 2xx 响应增加脱敏诊断,并同步拒绝 multipart 请求;非 2xx 响应继续保持 bridge success 语义。
31
+ - Runtime 默认分享链接保留当前 Host `h_src`,并在小程序加载成功时上报 `h_src` 与 `h_src_parent`,不改变 SDK 公共 API。
32
+
33
+ ### Docs / Agent Skill
34
+
35
+ - 精简外部开发者 README 并拆分详细参考内容;npm 包显式包含 README 与共同 Changelog。
36
+ - 同步公开 Agent Skill references、SDK compatibility、版本元数据与 integrity 至 0.6.8。
37
+
38
+ ## 0.6.8-alpha.4
39
+
40
+ ### Build and CLI
41
+
42
+ - 恢复远端官方域名网络权限项目的 CSP 兼容行为:`hb-sdk dev` 与 `hb-sdk remote deploy` 在 `network.request.status=enabled` 且 `useOfficialDomain=true` 时跳过平台 CSP,其他场景继续 fail closed 注入。
43
+
44
+ ## 0.6.8-alpha.3
45
+
46
+ ### SDK
47
+
48
+ - `network.request` 失败时输出脱敏诊断日志,覆盖 HTTP 非 2xx、无效响应与 bridge/runtime 错误;`HbMiniProgramNetworkError` 文案补充 statusText/method/url(message 为诊断字符串,业务请用 `instanceof` + `status`/`data` 等字段,勿精确匹配全文) (@heybox/hb-sdk).
49
+ - 诊断日志与错误文案统一脱敏:敏感 header/query/body 字段、URL userinfo;Mock Host / mock network proxy 复用同一套脱敏原语 (@heybox/hb-sdk).
50
+ - 日志前缀:`[hb-sdk][network.request]` / `[hb-sdk][mock-host][network.request]` / `[hb-sdk][mock-network]` (@heybox/hb-sdk).
51
+ - `network.request` 提前拒绝 `multipart/form-data`(含手写 boundary body),以 `INVALID_PARAMS` 给出可操作中文说明;Mock 网络代理同步拒绝,避免本地 fetch 能通、App Host heybox 代发失败 (@heybox/hb-sdk).
52
+ - `HbMiniProgramNetworkError` 识别宿主伪装的 `network_error` / `unsupported-request-shape` 失败,在 message 中标明“非目标站 HTTP 状态”并补充 form/json 用法提示 (@heybox/hb-sdk).
53
+
54
+ ### Runtime
55
+
56
+ - Runtime 侧记录 `network.request` 参数校验失败、adapter 失败与非 2xx 诊断日志(前缀 `[hb-sdk-runtime][network.request]`;非 2xx 仍保持 bridge success) (@heybox/hb-sdk-runtime).
57
+ - Runtime 参数校验同步拒绝 multipart,避免落到 heybox transport 后变成含糊的 500 `network_error` (@heybox/hb-sdk-runtime).
58
+
3
59
  ## 0.6.8-alpha.2
4
60
 
5
61
  ### Docs / Agent Skill
package/README.md CHANGED
@@ -97,6 +97,8 @@ try {
97
97
  - `auth.login()` 只能由明确的用户操作触发,不要在页面初始化时自动登录。
98
98
  - `on()` 返回取消监听函数,组件卸载或页面销毁时需要调用。
99
99
  - 业务网络请求使用 `network.request()`,不要依赖浏览器原生网络出口。
100
+ - `network.request` 不支持 `multipart/form-data`;App Host 仅支持 form(`application/x-www-form-urlencoded`)与 JSON。表单请用 `URLSearchParams#toString()` 作为 `data`,文件上传请走专用上传能力。
101
+ - 仅当远端已启用 `network.request` 且 `useOfficialDomain=true` 时,`hb-sdk dev` 与 `hb-sdk remote deploy` 构建才会跳过平台 CSP;其他构建继续注入平台 CSP。
100
102
  - 构建必须启用 `miniappManifest()`,推荐统一使用 `hb-sdk build`。
101
103
 
102
104
  ## CLI 主流程
@@ -3,10 +3,11 @@
3
3
  var fs$1 = require('node:fs');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var index$1 = require('./index-v4-6fbXX.cjs');
7
- var runtimeGate = require('./runtime-gate-DfMJQGH9.cjs');
8
- var index = require('./index-paN77avR.cjs');
9
- var projectVite = require('./project-vite-vHezGsg7.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-DKrhgVM3.cjs');
7
+ var runtimeGate = require('./runtime-gate-BWlU-R4h.cjs');
8
+ var index = require('./index-DofTxdoX.cjs');
9
+ var projectVite = require('./project-vite-CfD8Bp1K.cjs');
10
+ require('node:async_hooks');
10
11
  require('node:module');
11
12
  require('path');
12
13
  require('os');
@@ -25,25 +26,28 @@ async function runBuildCommand(_options = {}, runtime = {}) {
25
26
  const distDir = path.join(projectRoot, 'dist');
26
27
  const env = runtime.env ?? process.env;
27
28
  const mode = env.HB_SDK_ENV?.trim() || undefined;
29
+ const skipPlatformCsp = runtimePermissionEnv.shouldSkipMiniappPlatformCspFromEnv(env);
28
30
  await fs.rm(distDir, { force: true, recursive: true });
29
31
  try {
30
- const vite = await logger.task('正在加载项目 Vite', () => projectVite.loadProjectVite(projectRoot), {
31
- successText: '已加载项目 Vite',
32
- });
33
- await logger.task('正在构建小程序', () => vite.build({
34
- root: projectRoot,
35
- ...(mode ? { mode } : {}),
36
- plugins: [createFixedBuildOutputPlugin(projectRoot)],
37
- build: {
38
- outDir: 'dist',
39
- emptyOutDir: true,
40
- watch: null,
41
- write: true,
42
- },
43
- }), { successText: 'Vite 构建完成' });
44
- const result = await validateBuildOutput(projectRoot, logger);
45
- logger.success(`构建完成: dist/ | manifest version ${result.version} | sdkVersion ${result.sdkVersion} | 待上传文件 ${result.fileCount} 个 | ${formatSize(result.totalBytes)}`);
46
- return result;
32
+ return await runtimePermissionEnv.withMiniappPlatformCspEnv(skipPlatformCsp, async () => {
33
+ const vite = await logger.task('正在加载项目 Vite', () => projectVite.loadProjectVite(projectRoot), {
34
+ successText: '已加载项目 Vite',
35
+ });
36
+ await logger.task('正在构建小程序', () => vite.build({
37
+ root: projectRoot,
38
+ ...(mode ? { mode } : {}),
39
+ plugins: [createFixedBuildOutputPlugin(projectRoot)],
40
+ build: {
41
+ outDir: 'dist',
42
+ emptyOutDir: true,
43
+ watch: null,
44
+ write: true,
45
+ },
46
+ }), { successText: 'Vite 构建完成' });
47
+ const result = await validateBuildOutput(projectRoot, logger);
48
+ logger.success(`构建完成: dist/ | manifest version ${result.version} | sdkVersion ${result.sdkVersion} | 待上传文件 ${result.fileCount} 个 | ${formatSize(result.totalBytes)}`);
49
+ return result;
50
+ }, env);
47
51
  }
48
52
  catch (error) {
49
53
  await fs.rm(distDir, { force: true, recursive: true });
@@ -89,8 +93,8 @@ async function validateBuildOutput(projectRoot, logger) {
89
93
  }
90
94
  const { sdkVersion, version } = runtimeGate.validateMiniappManifestForDeploy(manifest);
91
95
  const allFiles = await walkDistFiles(distDir);
92
- const uploadFiles = allFiles.filter((file) => index$1.shouldUploadDistFile(file.relativePath));
93
- const sizeError = index$1.validateUploadTotalSize(uploadFiles);
96
+ const uploadFiles = allFiles.filter((file) => runtimePermissionEnv.shouldUploadDistFile(file.relativePath));
97
+ const sizeError = runtimePermissionEnv.validateUploadTotalSize(uploadFiles);
94
98
  if (sizeError) {
95
99
  throw new Error(sizeError.replace('重新 deploy', '重新 build'));
96
100
  }
@@ -110,12 +114,12 @@ async function walkDistFiles(distDir) {
110
114
  const entries = await fs.readdir(absDir, { withFileTypes: true });
111
115
  for (const entry of entries) {
112
116
  const absPath = path.join(absDir, entry.name);
113
- const relPath = index$1.normalizeRelativePath(relDir ? `${relDir}/${entry.name}` : entry.name);
117
+ const relPath = runtimePermissionEnv.normalizeRelativePath(relDir ? `${relDir}/${entry.name}` : entry.name);
114
118
  const link = await fs.lstat(absPath);
115
119
  if (link.isSymbolicLink()) {
116
120
  throw new Error(`dist 目录包含 symlink,拒绝处理:${relPath}`);
117
121
  }
118
- if (index$1.relativePathContainsNodeModulesSegment(relPath)) {
122
+ if (runtimePermissionEnv.relativePathContainsNodeModulesSegment(relPath)) {
119
123
  throw new Error(`dist 目录含 node_modules:${relPath}`);
120
124
  }
121
125
  if (entry.isDirectory()) {
@@ -1,11 +1,106 @@
1
1
  'use strict';
2
2
 
3
- var session = require('./session-CiQplems.cjs');
4
- var index = require('./index-v4-6fbXX.cjs');
3
+ var session = require('./session-D5u3XzHN.cjs');
4
+ var runtimePermissionEnv = require('./runtime-permission-env-DKrhgVM3.cjs');
5
5
  var fs$1 = require('node:fs');
6
6
  var fs = require('node:fs/promises');
7
7
  var path = require('node:path');
8
8
 
9
+ const MANAGED_RUNTIME_PERMISSION_KEYS = new Set(['network.request']);
10
+ /**
11
+ * 判断 permission key 是否由 Runtime 权限快照管理。
12
+ *
13
+ * @param key 待判断的 permission key。
14
+ * @returns 该 key 需要读取 Runtime 权限快照时返回 `true`。
15
+ */
16
+ function isManagedMiniProgramRuntimePermissionKey(key) {
17
+ return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
18
+ }
19
+ /**
20
+ * 解析服务端权限快照;格式不完整时整份快照失效并 fail closed。
21
+ *
22
+ * @param snapshot 待校验的服务端权限快照。
23
+ * @returns 解析状态和通过校验的受管权限。
24
+ */
25
+ function parseMiniProgramRuntimePermissions(snapshot) {
26
+ if (!isRecord(snapshot) || snapshot.schema_version !== 1 || !Array.isArray(snapshot.entries)) {
27
+ return { valid: false, permissions: {} };
28
+ }
29
+ if (snapshot.revision !== undefined && (typeof snapshot.revision !== 'number' || !Number.isInteger(snapshot.revision) || snapshot.revision < 0)) {
30
+ return { valid: false, permissions: {} };
31
+ }
32
+ const seenKeys = new Set();
33
+ const permissions = {};
34
+ for (const rawEntry of snapshot.entries) {
35
+ if (!isRecord(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
36
+ return { valid: false, permissions: {} };
37
+ }
38
+ const key = rawEntry.key.trim();
39
+ if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled') || !isRecord(rawEntry.config)) {
40
+ return { valid: false, permissions: {} };
41
+ }
42
+ seenKeys.add(key);
43
+ if (!isManagedMiniProgramRuntimePermissionKey(key)) {
44
+ continue;
45
+ }
46
+ if (key === 'network.request' && typeof rawEntry.config.useOfficialDomain !== 'boolean') {
47
+ return { valid: false, permissions: {} };
48
+ }
49
+ permissions[key] = {
50
+ key,
51
+ status: rawEntry.status,
52
+ config: { useOfficialDomain: rawEntry.config.useOfficialDomain },
53
+ };
54
+ }
55
+ return { valid: true, permissions };
56
+ }
57
+ function isRecord(value) {
58
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
59
+ }
60
+
61
+ function shouldSkipMiniappPlatformCsp(runtimePermissions) {
62
+ const parsed = parseMiniProgramRuntimePermissions(runtimePermissions);
63
+ const networkRequest = parsed.permissions['network.request'];
64
+ return parsed.valid && networkRequest?.status === 'enabled' && networkRequest.config.useOfficialDomain === true;
65
+ }
66
+ const DEFAULT_PERMISSION_STATE = {
67
+ networkRequest: {
68
+ status: 'disabled',
69
+ useOfficialDomain: false,
70
+ },
71
+ };
72
+ function createMiniProgramMockPermissionState(context) {
73
+ const parsed = parseMiniProgramRuntimePermissions(context.runtimePermissions);
74
+ const networkRequest = parsed.permissions['network.request'];
75
+ return parsed.valid && networkRequest
76
+ ? {
77
+ networkRequest: {
78
+ status: networkRequest.status,
79
+ useOfficialDomain: networkRequest.config.useOfficialDomain === true,
80
+ },
81
+ }
82
+ : cloneDefaultPermissionState();
83
+ }
84
+ function createMiniProgramMockRuntimePermissions(state) {
85
+ return {
86
+ schema_version: 1,
87
+ entries: [
88
+ {
89
+ key: 'network.request',
90
+ status: state.networkRequest.status,
91
+ config: {
92
+ useOfficialDomain: state.networkRequest.useOfficialDomain,
93
+ },
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ function cloneDefaultPermissionState() {
99
+ return {
100
+ networkRequest: { ...DEFAULT_PERMISSION_STATE.networkRequest },
101
+ };
102
+ }
103
+
9
104
  function createRemoteApiClient(options) {
10
105
  return {
11
106
  listDeveloperEntities: () => listDeveloperEntities(options),
@@ -32,74 +127,74 @@ function createRemoteApiClient(options) {
32
127
  };
33
128
  }
34
129
  async function listDeveloperEntities(runtime) {
35
- return remoteGet(index.DEVELOPER_ENTITY_LIST_API_PATH, {}, runtime);
130
+ return remoteGet(runtimePermissionEnv.DEVELOPER_ENTITY_LIST_API_PATH, {}, runtime);
36
131
  }
37
132
  async function switchDeveloperEntity(options, runtime) {
38
- return (await remotePostForm(index.DEVELOPER_ENTITY_SWITCH_API_PATH, options, runtime, { requireResult: false })) ?? {};
133
+ return (await remotePostForm(runtimePermissionEnv.DEVELOPER_ENTITY_SWITCH_API_PATH, options, runtime, { requireResult: false })) ?? {};
39
134
  }
40
135
  async function getDeveloperAccessStatus(runtime) {
41
- return remoteGet(index.USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, {}, runtime);
136
+ return remoteGet(runtimePermissionEnv.USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, {}, runtime);
42
137
  }
43
138
  async function listUserMiniprograms(options, runtime) {
44
- return remoteGet(index.LIST_USER_MINIPROGRAM_API_PATH, options, runtime);
139
+ return remoteGet(runtimePermissionEnv.LIST_USER_MINIPROGRAM_API_PATH, options, runtime);
45
140
  }
46
141
  async function createUserMiniprogram(runtime) {
47
- return remotePostForm(index.CREATE_USER_MINIPROGRAM_API_PATH, {}, runtime);
142
+ return remotePostForm(runtimePermissionEnv.CREATE_USER_MINIPROGRAM_API_PATH, {}, runtime);
48
143
  }
49
144
  async function getUserMiniprogramDetail(options, runtime) {
50
- return remoteGet(index.DETAIL_USER_MINIPROGRAM_API_PATH, options, runtime);
145
+ return remoteGet(runtimePermissionEnv.DETAIL_USER_MINIPROGRAM_API_PATH, options, runtime);
51
146
  }
52
147
  async function getPreviewAllowlist(options, runtime) {
53
- return remoteGet(index.USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
148
+ return remoteGet(runtimePermissionEnv.USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
54
149
  }
55
150
  async function updatePreviewAllowlist(options, runtime) {
56
- return remotePostForm(index.UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
151
+ return remotePostForm(runtimePermissionEnv.UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
57
152
  }
58
153
  async function createUserMiniprogramLeaderboard(options, runtime) {
59
- return remotePostForm(index.CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
154
+ return remotePostForm(runtimePermissionEnv.CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
60
155
  }
61
156
  async function getUserMiniprogramLeaderboard(options, runtime) {
62
- return remoteGet(index.DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
157
+ return remoteGet(runtimePermissionEnv.DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
63
158
  }
64
159
  async function listUserMiniprogramLeaderboards(options, runtime) {
65
- return remoteGet(index.LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
160
+ return remoteGet(runtimePermissionEnv.LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
66
161
  }
67
162
  async function deleteUserMiniprogramLeaderboard(options, runtime) {
68
- return (await remotePostForm(index.DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime, { requireResult: false })) ?? {};
163
+ return ((await remotePostForm(runtimePermissionEnv.DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime, { requireResult: false })) ?? {});
69
164
  }
70
165
  async function precheckUserMiniprogramVersion(options, runtime) {
71
- return remotePostForm(index.PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
166
+ return remotePostForm(runtimePermissionEnv.PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
72
167
  }
73
168
  async function submitUserMiniprogramAudit(options, runtime) {
74
169
  const form = { ...options };
75
170
  if (form.manifest && typeof form.manifest !== 'string') {
76
171
  form.manifest = JSON.stringify(form.manifest);
77
172
  }
78
- return remotePostForm(index.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, form, runtime);
173
+ return remotePostForm(runtimePermissionEnv.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, form, runtime);
79
174
  }
80
175
  async function getVersionPreviewInfo(options, runtime) {
81
- return remoteGet(index.USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, {
176
+ return remoteGet(runtimePermissionEnv.USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, {
82
177
  mini_program_id: options.mini_program_id,
83
178
  preview_version: options.version,
84
179
  }, runtime);
85
180
  }
86
181
  async function withdrawUserMiniprogramVersion(options, runtime) {
87
- return remotePostForm(index.WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
182
+ return remotePostForm(runtimePermissionEnv.WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
88
183
  }
89
184
  async function releaseUserMiniprogramVersion(options, runtime) {
90
- return remotePostForm(index.RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
185
+ return remotePostForm(runtimePermissionEnv.RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
91
186
  }
92
187
  async function takeDownUserMiniprogram(options, runtime) {
93
- return remotePostForm(index.TAKE_DOWN_USER_MINIPROGRAM_API_PATH, options, runtime);
188
+ return remotePostForm(runtimePermissionEnv.TAKE_DOWN_USER_MINIPROGRAM_API_PATH, options, runtime);
94
189
  }
95
190
  async function reopenUserMiniprogram(options, runtime) {
96
- return remotePostForm(index.REOPEN_USER_MINIPROGRAM_API_PATH, options, runtime);
191
+ return remotePostForm(runtimePermissionEnv.REOPEN_USER_MINIPROGRAM_API_PATH, options, runtime);
97
192
  }
98
193
  async function updateSquareDisplay(options, runtime) {
99
- return remotePostForm(index.UPDATE_SQUARE_DISPLAY_API_PATH, options, runtime);
194
+ return remotePostForm(runtimePermissionEnv.UPDATE_SQUARE_DISPLAY_API_PATH, options, runtime);
100
195
  }
101
196
  async function listUserMiniprogramVersions(options, runtime) {
102
- return remoteGet(index.LIST_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
197
+ return remoteGet(runtimePermissionEnv.LIST_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
103
198
  }
104
199
  async function remoteGet(path, query, runtime) {
105
200
  const pathWithQuery = createPathWithQuery(path, query);
@@ -302,10 +397,14 @@ function isTruthyEnvFlag(value) {
302
397
  }
303
398
 
304
399
  exports.MiniProgramProjectBindingError = MiniProgramProjectBindingError;
400
+ exports.createMiniProgramMockPermissionState = createMiniProgramMockPermissionState;
401
+ exports.createMiniProgramMockRuntimePermissions = createMiniProgramMockRuntimePermissions;
305
402
  exports.createRemoteApiClientForEnvironment = createRemoteApiClientForEnvironment;
306
403
  exports.getBoundMiniProgram = getBoundMiniProgram;
404
+ exports.parseMiniProgramRuntimePermissions = parseMiniProgramRuntimePermissions;
307
405
  exports.readBoundMiniProgramId = readBoundMiniProgramId;
308
406
  exports.readBoundMiniProgramIdFromPackageJson = readBoundMiniProgramIdFromPackageJson;
309
407
  exports.readMiniProgramProjectPackage = readMiniProgramProjectPackage;
310
408
  exports.resolveRemoteEnvironment = resolveRemoteEnvironment;
409
+ exports.shouldSkipMiniappPlatformCsp = shouldSkipMiniappPlatformCsp;
311
410
  exports.writeBoundMiniProgramId = writeBoundMiniProgramId;
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
6
  var require$$0 = require('fs');
7
7
  var require$$1 = require('path');
8
- var index = require('./index-paN77avR.cjs');
8
+ var index = require('./index-DofTxdoX.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
11
  require('readline');