合并客户端真机预览链路

需求:将待审 Release 扫码验收与项目级真机入口并入登录、发布集成候选。

实现:合并 Main-owned 精确预览与提交映射能力,保留现有登录和一键发布边界。
This commit is contained in:
2026-08-08 17:59:42 +08:00
20 changed files with 1890 additions and 12 deletions

View File

@@ -47,6 +47,14 @@ type DeploymentPatch = {
error?: string | null;
};
type SubmittedDeploymentInput = {
appId: string;
versionId: string;
versionName: string;
reviewStatus: string;
zipSha256?: string;
};
function normalizeApiBaseUrl(value: string): string {
const baseUrl = value.trim().replace(/\/+$/, '');
if (!/^https?:\/\//i.test(baseUrl)) {
@@ -253,6 +261,30 @@ export function createWorksCloudDeployment(
return record;
}
async function recordSubmitted(
projectId: string,
input: SubmittedDeploymentInput,
): Promise<WorksCloudDeploymentRecord> {
const project = (await projectStore.listProjects()).find((item) => item.id === projectId);
if (!project) throw new Error('Project not found');
const state = getOrCreateState(project, await readDeploymentRecord(project.path));
closeState(state);
const now = new Date().toISOString();
return await persist(state, {
schema_version: WORKS_CLOUD_DEPLOYMENT_SCHEMA_VERSION,
project_id: project.id,
status: 'submitted',
requested_at: now,
updated_at: now,
app_id: input.appId,
version_id: input.versionId,
version_name: input.versionName,
review_status: input.reviewStatus,
...(input.zipSha256 ? { zip_sha256: input.zipSha256 } : {}),
});
}
async function ensureRemoteProject(accessToken: string, publish: WorksPublishData): Promise<void> {
const headers = {
Authorization: `Bearer ${accessToken}`,
@@ -440,6 +472,7 @@ export function createWorksCloudDeployment(
return {
arm,
recordSubmitted,
get,
start,
stop,