Files
NianToB/electron/yinian/control-plane.ts

55 lines
2.1 KiB
TypeScript

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;
}