@heybox/hb-sdk 0.6.6-alpha.2 → 0.6.6-alpha.4
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/README.md +44 -7
- package/dist/cli-chunks/build-C54stoRf.cjs +142 -0
- package/dist/cli-chunks/context-DvTynj3F.cjs +410 -0
- package/dist/cli-chunks/{create-CxjB3oSo.cjs → create-uQS30kS_.cjs} +1 -1
- package/dist/cli-chunks/{dev-Km0or0yY.cjs → dev-1wE8dNiL.cjs} +29 -149
- package/dist/cli-chunks/{doctor-baVOqNSh.cjs → doctor-B2aCUOQ7.cjs} +1 -1
- package/dist/cli-chunks/{index-ByDy5HXi.cjs → index-19i3Dr5H.cjs} +32 -16
- package/dist/cli-chunks/{index-DCsEAuca.cjs → index-DypVMqsr.cjs} +3 -3
- package/dist/cli-chunks/{login-fNe0eDs_.cjs → login-BIIUGwoq.cjs} +2 -2
- package/dist/cli-chunks/project-vite-Dl3OoQjL.cjs +45 -0
- package/dist/cli-chunks/remote-47MjCKhu.cjs +1522 -0
- package/dist/cli-chunks/{remote-BRIlRrCG.cjs → runtime-gate--rPXjiG6.cjs} +7 -1501
- package/dist/cli-chunks/{context-CM46YbPT.cjs → runtime-permission-env-BSs4uCNa.cjs} +75 -293
- package/dist/cli-chunks/{session-CTcelATz.cjs → session-DJEuhrgq.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/main.js +149 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/templates/vue3-vite-ts/README.md.ejs +2 -2
- package/dist/templates/vue3-vite-ts/package.json.ejs +1 -1
- package/dist/vite.cjs.js +68 -4
- package/dist/vite.esm.js +68 -4
- package/package.json +2 -2
- package/skill/SKILL.md +19 -14
- package/skill/references/api-protocol.md +3 -2
- package/skill/references/api-root.md +57 -11
- package/skill/references/cli.md +33 -1
- package/skill/references/recipes.md +53 -0
- package/skill/references/safety-boundaries.md +1 -1
- package/skill/scripts/sync-references.mjs +23 -1
- package/skill/skill.json +4 -4
- package/types/index.d.ts +1 -1
- package/types/modules/share/types.d.ts +11 -0
- package/types/protocol.d.ts +1 -1
- package/types/vite/html-policy.d.ts +5 -1
- package/types/vite/index.d.ts +10 -1
- package/types/vite/runtime-permission-env.d.ts +9 -0
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var fs$1 = require('node:fs');
|
|
5
|
-
var fs = require('node:fs/promises');
|
|
6
|
-
var path = require('node:path');
|
|
3
|
+
var node_async_hooks = require('node:async_hooks');
|
|
7
4
|
|
|
8
5
|
var re = {exports: {}};
|
|
9
6
|
|
|
@@ -2884,319 +2881,104 @@ function shouldUploadDistFile(relativePath) {
|
|
|
2884
2881
|
return true;
|
|
2885
2882
|
}
|
|
2886
2883
|
|
|
2887
|
-
|
|
2884
|
+
const HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV = 'HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN';
|
|
2885
|
+
const HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV = 'HB_SDK_RUNTIME_PERMISSION_CONTEXT';
|
|
2886
|
+
const VERIFIED_RUNTIME_PERMISSION_CONTEXT = 'verified';
|
|
2887
|
+
const environmentScopeStorage = new node_async_hooks.AsyncLocalStorage();
|
|
2888
|
+
let environmentScopeTail = Promise.resolve();
|
|
2889
|
+
function shouldSkipMiniappPlatformCspFromEnv(env = process.env) {
|
|
2890
|
+
return env[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV] === VERIFIED_RUNTIME_PERMISSION_CONTEXT && env[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV] === '1';
|
|
2891
|
+
}
|
|
2892
|
+
function createMiniappPlatformCspEnv(env, skipPlatformCsp) {
|
|
2888
2893
|
return {
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
listUserMiniprograms: (requestOptions = {}) => listUserMiniprograms(requestOptions, options),
|
|
2893
|
-
createUserMiniprogram: () => createUserMiniprogram(options),
|
|
2894
|
-
getUserMiniprogramDetail: (requestOptions) => getUserMiniprogramDetail(requestOptions, options),
|
|
2895
|
-
getPreviewAllowlist: (requestOptions) => getPreviewAllowlist(requestOptions, options),
|
|
2896
|
-
updatePreviewAllowlist: (requestOptions) => updatePreviewAllowlist(requestOptions, options),
|
|
2897
|
-
createUserMiniprogramLeaderboard: (requestOptions) => createUserMiniprogramLeaderboard(requestOptions, options),
|
|
2898
|
-
getUserMiniprogramLeaderboard: (requestOptions) => getUserMiniprogramLeaderboard(requestOptions, options),
|
|
2899
|
-
listUserMiniprogramLeaderboards: (requestOptions) => listUserMiniprogramLeaderboards(requestOptions, options),
|
|
2900
|
-
deleteUserMiniprogramLeaderboard: (requestOptions) => deleteUserMiniprogramLeaderboard(requestOptions, options),
|
|
2901
|
-
precheckUserMiniprogramVersion: (requestOptions) => precheckUserMiniprogramVersion(requestOptions, options),
|
|
2902
|
-
submitUserMiniprogramAudit: (requestOptions) => submitUserMiniprogramAudit(requestOptions, options),
|
|
2903
|
-
getVersionPreviewInfo: (requestOptions) => getVersionPreviewInfo(requestOptions, options),
|
|
2904
|
-
withdrawUserMiniprogramVersion: (requestOptions) => withdrawUserMiniprogramVersion(requestOptions, options),
|
|
2905
|
-
releaseUserMiniprogramVersion: (requestOptions) => releaseUserMiniprogramVersion(requestOptions, options),
|
|
2906
|
-
takeDownUserMiniprogram: (requestOptions) => takeDownUserMiniprogram(requestOptions, options),
|
|
2907
|
-
reopenUserMiniprogram: (requestOptions) => reopenUserMiniprogram(requestOptions, options),
|
|
2908
|
-
updateSquareDisplay: (requestOptions) => updateSquareDisplay(requestOptions, options),
|
|
2909
|
-
listUserMiniprogramVersions: (requestOptions) => listUserMiniprogramVersions(requestOptions, options),
|
|
2894
|
+
...env,
|
|
2895
|
+
[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV]: VERIFIED_RUNTIME_PERMISSION_CONTEXT,
|
|
2896
|
+
[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV]: skipPlatformCsp ? '1' : '0',
|
|
2910
2897
|
};
|
|
2911
2898
|
}
|
|
2912
|
-
async function
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
async function switchDeveloperEntity(options, runtime) {
|
|
2916
|
-
return (await remotePostForm(DEVELOPER_ENTITY_SWITCH_API_PATH, options, runtime, { requireResult: false })) ?? {};
|
|
2917
|
-
}
|
|
2918
|
-
async function getDeveloperAccessStatus(runtime) {
|
|
2919
|
-
return remoteGet(USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, {}, runtime);
|
|
2920
|
-
}
|
|
2921
|
-
async function listUserMiniprograms(options, runtime) {
|
|
2922
|
-
return remoteGet(LIST_USER_MINIPROGRAM_API_PATH, options, runtime);
|
|
2923
|
-
}
|
|
2924
|
-
async function createUserMiniprogram(runtime) {
|
|
2925
|
-
return remotePostForm(CREATE_USER_MINIPROGRAM_API_PATH, {}, runtime);
|
|
2926
|
-
}
|
|
2927
|
-
async function getUserMiniprogramDetail(options, runtime) {
|
|
2928
|
-
return remoteGet(DETAIL_USER_MINIPROGRAM_API_PATH, options, runtime);
|
|
2929
|
-
}
|
|
2930
|
-
async function getPreviewAllowlist(options, runtime) {
|
|
2931
|
-
return remoteGet(USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
|
|
2932
|
-
}
|
|
2933
|
-
async function updatePreviewAllowlist(options, runtime) {
|
|
2934
|
-
return remotePostForm(UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, options, runtime);
|
|
2935
|
-
}
|
|
2936
|
-
async function createUserMiniprogramLeaderboard(options, runtime) {
|
|
2937
|
-
return remotePostForm(CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
|
|
2938
|
-
}
|
|
2939
|
-
async function getUserMiniprogramLeaderboard(options, runtime) {
|
|
2940
|
-
return remoteGet(DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
|
|
2941
|
-
}
|
|
2942
|
-
async function listUserMiniprogramLeaderboards(options, runtime) {
|
|
2943
|
-
return remoteGet(LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime);
|
|
2944
|
-
}
|
|
2945
|
-
async function deleteUserMiniprogramLeaderboard(options, runtime) {
|
|
2946
|
-
return (await remotePostForm(DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, options, runtime, { requireResult: false })) ?? {};
|
|
2947
|
-
}
|
|
2948
|
-
async function precheckUserMiniprogramVersion(options, runtime) {
|
|
2949
|
-
return remotePostForm(PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
|
|
2950
|
-
}
|
|
2951
|
-
async function submitUserMiniprogramAudit(options, runtime) {
|
|
2952
|
-
const form = { ...options };
|
|
2953
|
-
if (form.manifest && typeof form.manifest !== 'string') {
|
|
2954
|
-
form.manifest = JSON.stringify(form.manifest);
|
|
2899
|
+
async function withMiniappPlatformCspEnv(skipPlatformCsp, action, env = process.env) {
|
|
2900
|
+
if (environmentScopeStorage.getStore()?.active) {
|
|
2901
|
+
return runMiniappPlatformCspEnvScope(skipPlatformCsp, action, env);
|
|
2955
2902
|
}
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
mini_program_id: options.mini_program_id,
|
|
2961
|
-
preview_version: options.version,
|
|
2962
|
-
}, runtime);
|
|
2963
|
-
}
|
|
2964
|
-
async function withdrawUserMiniprogramVersion(options, runtime) {
|
|
2965
|
-
return remotePostForm(WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
|
|
2966
|
-
}
|
|
2967
|
-
async function releaseUserMiniprogramVersion(options, runtime) {
|
|
2968
|
-
return remotePostForm(RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
|
|
2969
|
-
}
|
|
2970
|
-
async function takeDownUserMiniprogram(options, runtime) {
|
|
2971
|
-
return remotePostForm(TAKE_DOWN_USER_MINIPROGRAM_API_PATH, options, runtime);
|
|
2972
|
-
}
|
|
2973
|
-
async function reopenUserMiniprogram(options, runtime) {
|
|
2974
|
-
return remotePostForm(REOPEN_USER_MINIPROGRAM_API_PATH, options, runtime);
|
|
2975
|
-
}
|
|
2976
|
-
async function updateSquareDisplay(options, runtime) {
|
|
2977
|
-
return remotePostForm(UPDATE_SQUARE_DISPLAY_API_PATH, options, runtime);
|
|
2978
|
-
}
|
|
2979
|
-
async function listUserMiniprogramVersions(options, runtime) {
|
|
2980
|
-
return remoteGet(LIST_USER_MINIPROGRAM_VERSION_API_PATH, options, runtime);
|
|
2981
|
-
}
|
|
2982
|
-
async function remoteGet(path, query, runtime) {
|
|
2983
|
-
const pathWithQuery = createPathWithQuery(path, query);
|
|
2984
|
-
const context = session.createHeyboxOpenPlatformRequestContext(runtime.session, pathWithQuery);
|
|
2985
|
-
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
2986
|
-
const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, pathWithQuery, context.platformParams), {
|
|
2987
|
-
method: 'GET',
|
|
2988
|
-
headers: context.headers,
|
|
2903
|
+
let releaseScope = () => undefined;
|
|
2904
|
+
const previousScope = environmentScopeTail;
|
|
2905
|
+
environmentScopeTail = new Promise((resolve) => {
|
|
2906
|
+
releaseScope = resolve;
|
|
2989
2907
|
});
|
|
2990
|
-
|
|
2991
|
-
}
|
|
2992
|
-
async function remotePostForm(path, fields, runtime, options = {}) {
|
|
2993
|
-
const context = session.createHeyboxOpenPlatformRequestContext(runtime.session, path, {
|
|
2994
|
-
contentType: 'application/x-www-form-urlencoded',
|
|
2995
|
-
});
|
|
2996
|
-
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
2997
|
-
const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, path, context.platformParams), {
|
|
2998
|
-
method: 'POST',
|
|
2999
|
-
headers: context.headers,
|
|
3000
|
-
body: createFormBody(fields),
|
|
3001
|
-
});
|
|
3002
|
-
if (options.requireResult === false) {
|
|
3003
|
-
return readOptionalResult(response, path);
|
|
3004
|
-
}
|
|
3005
|
-
return readRequiredResult(response, path);
|
|
3006
|
-
}
|
|
3007
|
-
async function readRequiredResult(response, pathWithQuery) {
|
|
3008
|
-
const result = await session.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: true });
|
|
3009
|
-
return result;
|
|
3010
|
-
}
|
|
3011
|
-
async function readOptionalResult(response, pathWithQuery) {
|
|
3012
|
-
return session.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: false });
|
|
3013
|
-
}
|
|
3014
|
-
function createPathWithQuery(path, query) {
|
|
3015
|
-
const params = new URLSearchParams();
|
|
3016
|
-
for (const [key, value] of Object.entries(query)) {
|
|
3017
|
-
if (value !== undefined && value !== null && value !== '') {
|
|
3018
|
-
params.set(key, String(value));
|
|
3019
|
-
}
|
|
3020
|
-
}
|
|
3021
|
-
const queryString = params.toString();
|
|
3022
|
-
return queryString ? `${path}?${queryString}` : path;
|
|
3023
|
-
}
|
|
3024
|
-
function createFormBody(fields) {
|
|
3025
|
-
const body = new URLSearchParams();
|
|
3026
|
-
for (const [key, value] of Object.entries(fields)) {
|
|
3027
|
-
if (value === undefined || value === null) {
|
|
3028
|
-
continue;
|
|
3029
|
-
}
|
|
3030
|
-
if (Array.isArray(value)) {
|
|
3031
|
-
body.set(key, value.join(','));
|
|
3032
|
-
continue;
|
|
3033
|
-
}
|
|
3034
|
-
if (typeof value === 'object') {
|
|
3035
|
-
body.set(key, JSON.stringify(value));
|
|
3036
|
-
continue;
|
|
3037
|
-
}
|
|
3038
|
-
body.set(key, String(value));
|
|
3039
|
-
}
|
|
3040
|
-
return body.toString();
|
|
3041
|
-
}
|
|
3042
|
-
|
|
3043
|
-
class MiniProgramProjectBindingError extends Error {
|
|
3044
|
-
code;
|
|
3045
|
-
constructor(message, code) {
|
|
3046
|
-
super(message);
|
|
3047
|
-
this.code = code;
|
|
3048
|
-
this.name = 'MiniProgramProjectBindingError';
|
|
3049
|
-
}
|
|
3050
|
-
}
|
|
3051
|
-
function findMiniProgramProjectRoot(startDir) {
|
|
3052
|
-
let current = path.resolve(startDir);
|
|
3053
|
-
while (true) {
|
|
3054
|
-
if (fs$1.existsSync(path.join(current, 'package.json'))) {
|
|
3055
|
-
return current;
|
|
3056
|
-
}
|
|
3057
|
-
const parent = path.dirname(current);
|
|
3058
|
-
if (parent === current) {
|
|
3059
|
-
throw new MiniProgramProjectBindingError('当前目录或父目录未找到 package.json', 'PACKAGE_JSON_NOT_FOUND');
|
|
3060
|
-
}
|
|
3061
|
-
current = parent;
|
|
3062
|
-
}
|
|
3063
|
-
}
|
|
3064
|
-
async function readMiniProgramProjectPackage(startDir) {
|
|
3065
|
-
const projectRoot = findMiniProgramProjectRoot(startDir);
|
|
3066
|
-
const packageJsonPath = path.join(projectRoot, 'package.json');
|
|
3067
|
-
const raw = await fs.readFile(packageJsonPath, 'utf8');
|
|
3068
|
-
let packageJson;
|
|
2908
|
+
await previousScope;
|
|
2909
|
+
const scope = { active: true };
|
|
3069
2910
|
try {
|
|
3070
|
-
|
|
2911
|
+
return await environmentScopeStorage.run(scope, () => runMiniappPlatformCspEnvScope(skipPlatformCsp, action, env));
|
|
3071
2912
|
}
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
2913
|
+
finally {
|
|
2914
|
+
scope.active = false;
|
|
2915
|
+
releaseScope();
|
|
3075
2916
|
}
|
|
3076
|
-
return {
|
|
3077
|
-
projectRoot,
|
|
3078
|
-
packageJsonPath,
|
|
3079
|
-
packageJson,
|
|
3080
|
-
raw,
|
|
3081
|
-
indent: detectJsonIndent(raw),
|
|
3082
|
-
trailingNewline: raw.endsWith('\r\n') ? '\r\n' : raw.endsWith('\n') ? '\n' : '',
|
|
3083
|
-
};
|
|
3084
|
-
}
|
|
3085
|
-
function readBoundMiniProgramIdFromPackageJson(packageJson) {
|
|
3086
|
-
const value = packageJson.heybox?.miniProgramId;
|
|
3087
|
-
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
3088
2917
|
}
|
|
3089
|
-
async function
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
2918
|
+
async function runMiniappPlatformCspEnvScope(skipPlatformCsp, action, env) {
|
|
2919
|
+
const targets = env === process.env ? [env] : [env, process.env];
|
|
2920
|
+
const previousValues = targets.map((target) => ({
|
|
2921
|
+
context: target[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV],
|
|
2922
|
+
officialDomain: target[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV],
|
|
2923
|
+
}));
|
|
2924
|
+
for (const target of targets) {
|
|
2925
|
+
target[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV] = VERIFIED_RUNTIME_PERMISSION_CONTEXT;
|
|
2926
|
+
target[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV] = skipPlatformCsp ? '1' : '0';
|
|
3097
2927
|
}
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
async function writeBoundMiniProgramId(startDir, miniProgramId, options = {}) {
|
|
3101
|
-
const context = await readMiniProgramProjectPackage(startDir);
|
|
3102
|
-
const normalizedMiniProgramId = String(miniProgramId).trim();
|
|
3103
|
-
if (!normalizedMiniProgramId) {
|
|
3104
|
-
throw new MiniProgramProjectBindingError('miniProgramId 不能为空', 'PACKAGE_JSON_INVALID');
|
|
3105
|
-
}
|
|
3106
|
-
const currentMiniProgramId = readBoundMiniProgramIdFromPackageJson(context.packageJson);
|
|
3107
|
-
if (currentMiniProgramId && currentMiniProgramId !== normalizedMiniProgramId && !options.force) {
|
|
3108
|
-
throw new MiniProgramProjectBindingError(`当前项目已绑定小程序 ${currentMiniProgramId}。如需覆盖本地绑定,请使用 --force。`, 'MINI_PROGRAM_BINDING_EXISTS');
|
|
3109
|
-
}
|
|
3110
|
-
if (currentMiniProgramId === normalizedMiniProgramId) {
|
|
3111
|
-
return {
|
|
3112
|
-
...context,
|
|
3113
|
-
changed: false,
|
|
3114
|
-
miniProgramId: normalizedMiniProgramId,
|
|
3115
|
-
};
|
|
3116
|
-
}
|
|
3117
|
-
if (context.packageJson.heybox !== undefined && !isPlainObject(context.packageJson.heybox)) {
|
|
3118
|
-
throw new MiniProgramProjectBindingError('package.json heybox 字段必须是对象,不能写入 miniProgramId', 'PACKAGE_JSON_HEYBOX_INVALID');
|
|
2928
|
+
try {
|
|
2929
|
+
return await action();
|
|
3119
2930
|
}
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
}
|
|
3135
|
-
|
|
3136
|
-
return Object.prototype.toString.call(value) === '[object Object]';
|
|
3137
|
-
}
|
|
3138
|
-
|
|
3139
|
-
async function resolveRemoteEnvironment(options = {}, runtime = {}) {
|
|
3140
|
-
const env = options.env ?? process.env;
|
|
3141
|
-
const apiBaseUrl = session.resolveHeyboxApiBaseUrl({ ...options, env });
|
|
3142
|
-
const loginBaseUrl = session.resolveHeyboxLoginBaseUrl({ ...options, env });
|
|
3143
|
-
const session$1 = options.session ?? (await (runtime.requireAuthSession ?? session.requireHeyboxAuthSession)({ loginBaseUrl }));
|
|
3144
|
-
return {
|
|
3145
|
-
apiBaseUrl,
|
|
3146
|
-
loginBaseUrl,
|
|
3147
|
-
allowUnsafeApiBaseUrl: options.allowUnsafeApiBaseUrl === true || isTruthyEnvFlag(env.HB_SDK_ALLOW_UNSAFE_API_BASE_URL),
|
|
3148
|
-
env,
|
|
3149
|
-
fetchImpl: runtime.fetchImpl ?? options.fetchImpl ?? fetch,
|
|
3150
|
-
session: session$1,
|
|
3151
|
-
};
|
|
3152
|
-
}
|
|
3153
|
-
function createRemoteApiClientForEnvironment(environment) {
|
|
3154
|
-
return createRemoteApiClient({
|
|
3155
|
-
baseUrl: environment.apiBaseUrl,
|
|
3156
|
-
fetchImpl: environment.fetchImpl,
|
|
3157
|
-
session: environment.session,
|
|
3158
|
-
});
|
|
3159
|
-
}
|
|
3160
|
-
async function getBoundMiniProgram(options = {}, runtime = {}) {
|
|
3161
|
-
const cwd = options.cwd ?? process.cwd();
|
|
3162
|
-
const binding = await requireBoundMiniProgramId(cwd);
|
|
3163
|
-
const api = await resolveRemoteApiClient(options, runtime);
|
|
3164
|
-
const detail = await api.getUserMiniprogramDetail({ mini_program_id: binding.miniProgramId });
|
|
3165
|
-
return {
|
|
3166
|
-
...binding,
|
|
3167
|
-
detail,
|
|
3168
|
-
};
|
|
3169
|
-
}
|
|
3170
|
-
async function resolveRemoteApiClient(options, runtime) {
|
|
3171
|
-
if (runtime.apiClient) {
|
|
3172
|
-
return runtime.apiClient;
|
|
2931
|
+
finally {
|
|
2932
|
+
targets.forEach((target, index) => {
|
|
2933
|
+
const previousValue = previousValues[index];
|
|
2934
|
+
if (previousValue?.context === undefined) {
|
|
2935
|
+
delete target[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV];
|
|
2936
|
+
}
|
|
2937
|
+
else {
|
|
2938
|
+
target[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV] = previousValue.context;
|
|
2939
|
+
}
|
|
2940
|
+
if (previousValue?.officialDomain === undefined) {
|
|
2941
|
+
delete target[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV];
|
|
2942
|
+
}
|
|
2943
|
+
else {
|
|
2944
|
+
target[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV] = previousValue.officialDomain;
|
|
2945
|
+
}
|
|
2946
|
+
});
|
|
3173
2947
|
}
|
|
3174
|
-
return createRemoteApiClientForEnvironment(await resolveRemoteEnvironment(options, runtime));
|
|
3175
|
-
}
|
|
3176
|
-
function isTruthyEnvFlag(value) {
|
|
3177
|
-
return ['1', 'true', 'yes', 'on'].includes(String(value ?? '')
|
|
3178
|
-
.trim()
|
|
3179
|
-
.toLowerCase());
|
|
3180
2948
|
}
|
|
3181
2949
|
|
|
3182
2950
|
exports.ACTIVITY_UPLOAD_KEY_MAX_LENGTH = ACTIVITY_UPLOAD_KEY_MAX_LENGTH;
|
|
2951
|
+
exports.CREATE_USER_MINIPROGRAM_API_PATH = CREATE_USER_MINIPROGRAM_API_PATH;
|
|
2952
|
+
exports.CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH = CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
|
|
2953
|
+
exports.DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH = DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
|
|
2954
|
+
exports.DETAIL_USER_MINIPROGRAM_API_PATH = DETAIL_USER_MINIPROGRAM_API_PATH;
|
|
2955
|
+
exports.DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH = DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
|
|
2956
|
+
exports.DEVELOPER_ENTITY_LIST_API_PATH = DEVELOPER_ENTITY_LIST_API_PATH;
|
|
2957
|
+
exports.DEVELOPER_ENTITY_SWITCH_API_PATH = DEVELOPER_ENTITY_SWITCH_API_PATH;
|
|
2958
|
+
exports.LIST_USER_MINIPROGRAM_API_PATH = LIST_USER_MINIPROGRAM_API_PATH;
|
|
2959
|
+
exports.LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH = LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
|
|
2960
|
+
exports.LIST_USER_MINIPROGRAM_VERSION_API_PATH = LIST_USER_MINIPROGRAM_VERSION_API_PATH;
|
|
3183
2961
|
exports.MINIAPP_UPLOAD_BATCH_SIZE = MINIAPP_UPLOAD_BATCH_SIZE;
|
|
3184
2962
|
exports.MINIAPP_UPLOAD_SCOPE = MINIAPP_UPLOAD_SCOPE;
|
|
3185
|
-
exports.MiniProgramProjectBindingError = MiniProgramProjectBindingError;
|
|
3186
2963
|
exports.PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH = PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH;
|
|
2964
|
+
exports.RELEASE_USER_MINIPROGRAM_VERSION_API_PATH = RELEASE_USER_MINIPROGRAM_VERSION_API_PATH;
|
|
2965
|
+
exports.REOPEN_USER_MINIPROGRAM_API_PATH = REOPEN_USER_MINIPROGRAM_API_PATH;
|
|
3187
2966
|
exports.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH = SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH;
|
|
3188
|
-
exports.
|
|
3189
|
-
exports.
|
|
2967
|
+
exports.TAKE_DOWN_USER_MINIPROGRAM_API_PATH = TAKE_DOWN_USER_MINIPROGRAM_API_PATH;
|
|
2968
|
+
exports.UPDATE_SQUARE_DISPLAY_API_PATH = UPDATE_SQUARE_DISPLAY_API_PATH;
|
|
2969
|
+
exports.UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH = UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH;
|
|
2970
|
+
exports.USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = USER_MINIPROGRAM_ACCESS_STATUS_API_PATH;
|
|
2971
|
+
exports.USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH = USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH;
|
|
2972
|
+
exports.USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH = USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH;
|
|
2973
|
+
exports.WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH = WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH;
|
|
2974
|
+
exports.createMiniappPlatformCspEnv = createMiniappPlatformCspEnv;
|
|
3190
2975
|
exports.getMiniappUploadKey = getMiniappUploadKey;
|
|
3191
2976
|
exports.normalizeRelativePath = normalizeRelativePath;
|
|
3192
|
-
exports.readBoundMiniProgramId = readBoundMiniProgramId;
|
|
3193
|
-
exports.readBoundMiniProgramIdFromPackageJson = readBoundMiniProgramIdFromPackageJson;
|
|
3194
|
-
exports.readMiniProgramProjectPackage = readMiniProgramProjectPackage;
|
|
3195
2977
|
exports.relativePathContainsNodeModulesSegment = relativePathContainsNodeModulesSegment;
|
|
3196
2978
|
exports.requireSemver = requireSemver;
|
|
3197
|
-
exports.resolveRemoteEnvironment = resolveRemoteEnvironment;
|
|
3198
2979
|
exports.semverExports = semverExports;
|
|
2980
|
+
exports.shouldSkipMiniappPlatformCspFromEnv = shouldSkipMiniappPlatformCspFromEnv;
|
|
3199
2981
|
exports.shouldUploadDistFile = shouldUploadDistFile;
|
|
3200
2982
|
exports.validateUploadPaths = validateUploadPaths;
|
|
3201
2983
|
exports.validateUploadTotalSize = validateUploadTotalSize;
|
|
3202
|
-
exports.
|
|
2984
|
+
exports.withMiniappPlatformCspEnv = withMiniappPlatformCspEnv;
|
package/dist/cli.cjs
CHANGED
|
@@ -4245,15 +4245,150 @@ function getPositiveNumber(value, fallback) {
|
|
|
4245
4245
|
return numberValue;
|
|
4246
4246
|
}
|
|
4247
4247
|
|
|
4248
|
+
const MINI_PROGRAM_DEV_SHELL_PROTOCOL = 'heybox-mini-dev:';
|
|
4249
|
+
function isMiniProgramDevShellHref(href) {
|
|
4250
|
+
try {
|
|
4251
|
+
return isMiniProgramDevShellUrl(new URL(href));
|
|
4252
|
+
}
|
|
4253
|
+
catch {
|
|
4254
|
+
return false;
|
|
4255
|
+
}
|
|
4256
|
+
}
|
|
4257
|
+
function isMiniProgramDevShellUrl(url) {
|
|
4258
|
+
return url.protocol === MINI_PROGRAM_DEV_SHELL_PROTOCOL;
|
|
4259
|
+
}
|
|
4260
|
+
|
|
4261
|
+
function readMiniProgramRuntimeSharePostOptions(value, options) {
|
|
4262
|
+
if (value === undefined || value === null) {
|
|
4263
|
+
return {};
|
|
4264
|
+
}
|
|
4265
|
+
if (!isMiniProgramRuntimeRecord(value)) {
|
|
4266
|
+
return invalidSharePostResult(`${options.method} post 必须是对象或 null`);
|
|
4267
|
+
}
|
|
4268
|
+
const topicIds = readTopicIds(value.topicIds);
|
|
4269
|
+
const topics = readTopics(value.topics);
|
|
4270
|
+
const invalidMessages = [...topicIds.invalidMessages, ...topics.invalidMessages];
|
|
4271
|
+
let normalizedTopicIds = topicIds.values;
|
|
4272
|
+
if (options.maxTopicIds !== undefined && normalizedTopicIds.length > options.maxTopicIds) {
|
|
4273
|
+
invalidMessages.push(`${options.method} post.topicIds 最多允许 ${options.maxTopicIds} 项`);
|
|
4274
|
+
normalizedTopicIds = normalizedTopicIds.slice(0, options.maxTopicIds);
|
|
4275
|
+
}
|
|
4276
|
+
const post = createNormalizedPostOptions(normalizedTopicIds, topics.values);
|
|
4277
|
+
if (!post) {
|
|
4278
|
+
invalidMessages.push(`${options.method} post 至少需要一个有效的 topicIds 或 topics`);
|
|
4279
|
+
}
|
|
4280
|
+
return {
|
|
4281
|
+
post,
|
|
4282
|
+
invalidMessage: invalidMessages[0],
|
|
4283
|
+
};
|
|
4284
|
+
}
|
|
4285
|
+
function handleMiniProgramRuntimeSharePostValidation(result, platformAdapter, invoke) {
|
|
4286
|
+
if (!result.invalidMessage) {
|
|
4287
|
+
return invoke(result.post);
|
|
4288
|
+
}
|
|
4289
|
+
const invalidMessage = result.invalidMessage;
|
|
4290
|
+
return isMiniProgramShareDevelopmentRuntime(platformAdapter).then((isDevelopment) => {
|
|
4291
|
+
if (isDevelopment) {
|
|
4292
|
+
throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', invalidMessage);
|
|
4293
|
+
}
|
|
4294
|
+
return invoke(result.post);
|
|
4295
|
+
});
|
|
4296
|
+
}
|
|
4297
|
+
function readTopicIds(value) {
|
|
4298
|
+
if (value === undefined) {
|
|
4299
|
+
return { values: [], invalidMessages: [] };
|
|
4300
|
+
}
|
|
4301
|
+
if (!Array.isArray(value)) {
|
|
4302
|
+
return { values: [], invalidMessages: ['post.topicIds 必须是数组'] };
|
|
4303
|
+
}
|
|
4304
|
+
const values = [];
|
|
4305
|
+
const seen = new Set();
|
|
4306
|
+
const invalidMessages = [];
|
|
4307
|
+
for (const item of value) {
|
|
4308
|
+
const normalized = normalizeTopicId(item);
|
|
4309
|
+
if (!normalized) {
|
|
4310
|
+
invalidMessages.push('post.topicIds 每项必须是正整数或非空字符串');
|
|
4311
|
+
continue;
|
|
4312
|
+
}
|
|
4313
|
+
if (!seen.has(normalized)) {
|
|
4314
|
+
seen.add(normalized);
|
|
4315
|
+
values.push(normalized);
|
|
4316
|
+
}
|
|
4317
|
+
}
|
|
4318
|
+
return { values, invalidMessages };
|
|
4319
|
+
}
|
|
4320
|
+
function readTopics(value) {
|
|
4321
|
+
if (value === undefined) {
|
|
4322
|
+
return { values: [], invalidMessages: [] };
|
|
4323
|
+
}
|
|
4324
|
+
if (!Array.isArray(value)) {
|
|
4325
|
+
return { values: [], invalidMessages: ['post.topics 必须是数组'] };
|
|
4326
|
+
}
|
|
4327
|
+
const values = [];
|
|
4328
|
+
const seen = new Set();
|
|
4329
|
+
const invalidMessages = [];
|
|
4330
|
+
for (const item of value) {
|
|
4331
|
+
const normalized = typeof item === 'string' ? item.trim() : '';
|
|
4332
|
+
if (!normalized || normalized.startsWith('#') || normalized.endsWith('#')) {
|
|
4333
|
+
invalidMessages.push('post.topics 每项必须是不含首尾 # 的非空字符串');
|
|
4334
|
+
continue;
|
|
4335
|
+
}
|
|
4336
|
+
if (!seen.has(normalized)) {
|
|
4337
|
+
seen.add(normalized);
|
|
4338
|
+
values.push(normalized);
|
|
4339
|
+
}
|
|
4340
|
+
}
|
|
4341
|
+
return { values, invalidMessages };
|
|
4342
|
+
}
|
|
4343
|
+
function normalizeTopicId(value) {
|
|
4344
|
+
if (typeof value === 'number') {
|
|
4345
|
+
return Number.isSafeInteger(value) && value > 0 ? String(value) : undefined;
|
|
4346
|
+
}
|
|
4347
|
+
if (typeof value === 'string') {
|
|
4348
|
+
return value.trim() || undefined;
|
|
4349
|
+
}
|
|
4350
|
+
return undefined;
|
|
4351
|
+
}
|
|
4352
|
+
function createNormalizedPostOptions(topicIds, topics) {
|
|
4353
|
+
if (topicIds.length === 0 && topics.length === 0) {
|
|
4354
|
+
return undefined;
|
|
4355
|
+
}
|
|
4356
|
+
return {
|
|
4357
|
+
...(topicIds.length > 0 ? { topicIds } : {}),
|
|
4358
|
+
...(topics.length > 0 ? { topics } : {}),
|
|
4359
|
+
};
|
|
4360
|
+
}
|
|
4361
|
+
function invalidSharePostResult(message) {
|
|
4362
|
+
return { invalidMessage: message };
|
|
4363
|
+
}
|
|
4364
|
+
async function isMiniProgramShareDevelopmentRuntime(platformAdapter) {
|
|
4365
|
+
try {
|
|
4366
|
+
if (isMiniProgramDevShellHref(platformAdapter.app.getCurrentHref())) {
|
|
4367
|
+
return true;
|
|
4368
|
+
}
|
|
4369
|
+
}
|
|
4370
|
+
catch {
|
|
4371
|
+
// 环境读取失败时继续使用宿主的显式开发态判断。
|
|
4372
|
+
}
|
|
4373
|
+
try {
|
|
4374
|
+
return Boolean(await platformAdapter.app.isDevRuntime?.());
|
|
4375
|
+
}
|
|
4376
|
+
catch {
|
|
4377
|
+
return false;
|
|
4378
|
+
}
|
|
4379
|
+
}
|
|
4380
|
+
|
|
4248
4381
|
/** 截图并唤起分享。 */
|
|
4249
4382
|
function shareMiniProgramRuntimeScreenshot(payload, platformAdapter) {
|
|
4250
4383
|
const options = readMiniProgramScreenshotOptions(payload);
|
|
4251
4384
|
const rect = options.rect || getMiniProgramRuntimeViewportRect(platformAdapter);
|
|
4252
|
-
|
|
4385
|
+
const postResult = readMiniProgramRuntimeSharePostOptions(payload && typeof payload === 'object' ? payload.post : undefined, { method: 'share.screenshot' });
|
|
4386
|
+
return handleMiniProgramRuntimeSharePostValidation(postResult, platformAdapter, (post) => platformAdapter.share.shareScreenshot({
|
|
4253
4387
|
rect,
|
|
4254
4388
|
delay: options.delay,
|
|
4255
4389
|
saveToAlbum: options.saveToAlbum,
|
|
4256
|
-
|
|
4390
|
+
post,
|
|
4391
|
+
}));
|
|
4257
4392
|
}
|
|
4258
4393
|
function readMiniProgramScreenshotOptions(payload) {
|
|
4259
4394
|
if (payload === undefined || payload === null) {
|
|
@@ -4288,7 +4423,17 @@ function readScreenshotRect(value) {
|
|
|
4288
4423
|
|
|
4289
4424
|
/** 展示基础分享面板。 */
|
|
4290
4425
|
function showMiniProgramRuntimeShareMenu(payload, platformAdapter, context = {}) {
|
|
4291
|
-
|
|
4426
|
+
const options = readMiniProgramShareMenuOptions(payload, platformAdapter, context);
|
|
4427
|
+
let postResult = readMiniProgramRuntimeSharePostOptions(payload.post, {
|
|
4428
|
+
maxTopicIds: 1,
|
|
4429
|
+
method: 'share.showShareMenu',
|
|
4430
|
+
});
|
|
4431
|
+
if (options.channel && postResult.post) {
|
|
4432
|
+
postResult = {
|
|
4433
|
+
invalidMessage: postResult.invalidMessage || 'share.showShareMenu channel 与 post 不能同时使用',
|
|
4434
|
+
};
|
|
4435
|
+
}
|
|
4436
|
+
return handleMiniProgramRuntimeSharePostValidation(postResult, platformAdapter, (post) => platformAdapter.share.showShareMenu({ ...options, post }));
|
|
4292
4437
|
}
|
|
4293
4438
|
function readMiniProgramShareMenuOptions(payload, platformAdapter, context) {
|
|
4294
4439
|
assertMiniProgramRuntimeRecord(payload, 'share.showShareMenu 参数必须是对象');
|
|
@@ -5201,6 +5346,7 @@ function createBrowserMockRuntimePlatformAdapter(options) {
|
|
|
5201
5346
|
return {
|
|
5202
5347
|
app: {
|
|
5203
5348
|
getCurrentHref: options.getCurrentHref,
|
|
5349
|
+
isDevRuntime: () => true,
|
|
5204
5350
|
},
|
|
5205
5351
|
launch: {
|
|
5206
5352
|
async getMiniProgramInfo() {
|
package/dist/index.cjs.js
CHANGED
package/dist/index.esm.js
CHANGED
|
@@ -20,8 +20,8 @@ npm run deploy
|
|
|
20
20
|
## 开发模式
|
|
21
21
|
|
|
22
22
|
- `npm run dev`:打开本地调试页,可以使用浏览器 Mock,也可以在 Mac 版 APP 或手机小黑盒 APP 中验收。手机和电脑需要处于同一局域网。
|
|
23
|
-
- `npm run build`:先执行 TypeScript
|
|
24
|
-
- `npm run deploy -- --release-note "..."
|
|
23
|
+
- `npm run build`:先执行 TypeScript 检查,再通过 `hb-sdk build` 构建生产产物。
|
|
24
|
+
- `npm run deploy -- --release-note "..."`:检查、执行项目的 `scripts.build`、上传并提交审核。首次提交前先运行 `npx hb-sdk login`,再用 `npx hb-sdk remote create` 创建小程序,或用 `npx hb-sdk remote bind <mini-program-id>` 绑定已有小程序。审核通过后,用 `hb-sdk remote release <version>` 发布。
|
|
25
25
|
|
|
26
26
|
## 更多能力
|
|
27
27
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"hb-sdk": "hb-sdk",
|
|
11
11
|
"dev": "hb-sdk dev",
|
|
12
12
|
"deploy": "hb-sdk remote deploy",
|
|
13
|
-
"build": "vue-tsc --noEmit &&
|
|
13
|
+
"build": "vue-tsc --noEmit && hb-sdk build",
|
|
14
14
|
"preview": "vite preview",
|
|
15
15
|
"typecheck": "vue-tsc --noEmit",
|
|
16
16
|
"test:unit": "vitest run",
|