feat: prepare Zhinian desktop client for pilot release
This commit is contained in:
54
electron/yinian/control-plane.ts
Normal file
54
electron/yinian/control-plane.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import type {
|
||||
YinianAuthSession,
|
||||
YinianConfigSnapshot,
|
||||
YinianImageCaptcha,
|
||||
YinianLoginWithPasswordInput,
|
||||
YinianLoginWithSmsInput,
|
||||
YinianLocalSkill,
|
||||
YinianServerStatus,
|
||||
YinianSessionState,
|
||||
YinianSkillRegistry,
|
||||
YinianSkillSyncResult,
|
||||
} from '../../shared/yinian';
|
||||
import { HttpYinianControlPlane } from './http-control-plane';
|
||||
import { MockYinianControlPlane } from './mock-control-plane';
|
||||
import { getYinianStorage } from './storage';
|
||||
import { UnconfiguredYinianControlPlane } from './unconfigured-control-plane';
|
||||
|
||||
const DEFAULT_YINIAN_API_BASE_URL = 'https://onefeel.brother7.cn/ingress';
|
||||
|
||||
export interface YinianControlPlane {
|
||||
getServerStatus(): Promise<YinianServerStatus>;
|
||||
createImageCaptcha(randomStr?: string): Promise<YinianImageCaptcha>;
|
||||
restoreSession(): Promise<YinianSessionState>;
|
||||
getSessionState(): Promise<YinianSessionState>;
|
||||
loginWithSms(input: YinianLoginWithSmsInput): Promise<YinianAuthSession>;
|
||||
loginWithPassword(input: YinianLoginWithPasswordInput): Promise<YinianAuthSession>;
|
||||
logout(): Promise<YinianSessionState>;
|
||||
switchHotel(hotelId: string): Promise<YinianAuthSession>;
|
||||
getConfigSnapshot(): Promise<YinianConfigSnapshot>;
|
||||
syncSkills(): Promise<YinianSkillSyncResult>;
|
||||
listLocalSkills(): Promise<YinianLocalSkill[]>;
|
||||
getSkillRegistry(hotelId?: string): Promise<YinianSkillRegistry | Record<string, YinianSkillRegistry> | undefined>;
|
||||
}
|
||||
|
||||
let controlPlane: YinianControlPlane | null = null;
|
||||
|
||||
export function getYinianControlPlane(): YinianControlPlane {
|
||||
if (controlPlane) return controlPlane;
|
||||
|
||||
const apiBaseUrl = process.env.YINIAN_API_BASE_URL?.trim() || DEFAULT_YINIAN_API_BASE_URL;
|
||||
const explicitMode = process.env.YINIAN_CONTROL_PLANE_MODE?.trim();
|
||||
const shouldUseMock = explicitMode === 'mock' || process.env.CLAWX_E2E === '1';
|
||||
controlPlane = shouldUseMock
|
||||
? new MockYinianControlPlane({ storage: getYinianStorage() })
|
||||
: apiBaseUrl
|
||||
? new HttpYinianControlPlane({ apiBaseUrl, storage: getYinianStorage() })
|
||||
: new UnconfiguredYinianControlPlane();
|
||||
|
||||
return controlPlane;
|
||||
}
|
||||
|
||||
export function resetYinianControlPlaneForTests(next?: YinianControlPlane): void {
|
||||
controlPlane = next ?? null;
|
||||
}
|
||||
Reference in New Issue
Block a user