实现项目真机预览与待审版本扫码验收

需求:接管客户端未提交 WIP,保留真机预览,移除旧登录原型并维持 2.0.0。

实现:由 Main 核对项目与精确 Release,签发短时 Owner preview;补充一键提交映射能力及 Windows ZIP 预检兼容。
This commit is contained in:
2026-08-08 17:57:36 +08:00
parent 7b23cce67a
commit 1a19ad9808
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,