| export const GATEWAY_CLIENT_IDS = { |
| WEBCHAT_UI: "webchat-ui", |
| CONTROL_UI: "openclaw-control-ui", |
| WEBCHAT: "webchat", |
| CLI: "cli", |
| GATEWAY_CLIENT: "gateway-client", |
| MACOS_APP: "openclaw-macos", |
| IOS_APP: "openclaw-ios", |
| ANDROID_APP: "openclaw-android", |
| NODE_HOST: "node-host", |
| TEST: "test", |
| FINGERPRINT: "fingerprint", |
| PROBE: "openclaw-probe", |
| } as const; |
|
|
| export type GatewayClientId = (typeof GATEWAY_CLIENT_IDS)[keyof typeof GATEWAY_CLIENT_IDS]; |
|
|
| |
| export const GATEWAY_CLIENT_NAMES = GATEWAY_CLIENT_IDS; |
| export type GatewayClientName = GatewayClientId; |
|
|
| export const GATEWAY_CLIENT_MODES = { |
| WEBCHAT: "webchat", |
| CLI: "cli", |
| UI: "ui", |
| BACKEND: "backend", |
| NODE: "node", |
| PROBE: "probe", |
| TEST: "test", |
| } as const; |
|
|
| export type GatewayClientMode = (typeof GATEWAY_CLIENT_MODES)[keyof typeof GATEWAY_CLIENT_MODES]; |
|
|
| export type GatewayClientInfo = { |
| id: GatewayClientId; |
| displayName?: string; |
| version: string; |
| platform: string; |
| deviceFamily?: string; |
| modelIdentifier?: string; |
| mode: GatewayClientMode; |
| instanceId?: string; |
| }; |
|
|
| export const GATEWAY_CLIENT_CAPS = { |
| TOOL_EVENTS: "tool-events", |
| } as const; |
|
|
| export type GatewayClientCap = (typeof GATEWAY_CLIENT_CAPS)[keyof typeof GATEWAY_CLIENT_CAPS]; |
|
|
| const GATEWAY_CLIENT_ID_SET = new Set<GatewayClientId>(Object.values(GATEWAY_CLIENT_IDS)); |
| const GATEWAY_CLIENT_MODE_SET = new Set<GatewayClientMode>(Object.values(GATEWAY_CLIENT_MODES)); |
|
|
| export function normalizeGatewayClientId(raw?: string | null): GatewayClientId | undefined { |
| const normalized = raw?.trim().toLowerCase(); |
| if (!normalized) { |
| return undefined; |
| } |
| return GATEWAY_CLIENT_ID_SET.has(normalized as GatewayClientId) |
| ? (normalized as GatewayClientId) |
| : undefined; |
| } |
|
|
| export function normalizeGatewayClientName(raw?: string | null): GatewayClientName | undefined { |
| return normalizeGatewayClientId(raw); |
| } |
|
|
| export function normalizeGatewayClientMode(raw?: string | null): GatewayClientMode | undefined { |
| const normalized = raw?.trim().toLowerCase(); |
| if (!normalized) { |
| return undefined; |
| } |
| return GATEWAY_CLIENT_MODE_SET.has(normalized as GatewayClientMode) |
| ? (normalized as GatewayClientMode) |
| : undefined; |
| } |
|
|
| export function hasGatewayClientCap( |
| caps: string[] | null | undefined, |
| cap: GatewayClientCap, |
| ): boolean { |
| if (!Array.isArray(caps)) { |
| return false; |
| } |
| return caps.includes(cap); |
| } |
|
|