55 lines
2.1 KiB
TypeScript
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;
|
|
}
|