113 lines
3.1 KiB
TypeScript
113 lines
3.1 KiB
TypeScript
import {
|
|
GATEWAY_CLIENT_MODES,
|
|
GATEWAY_CLIENT_NAMES,
|
|
type GatewayClientMode,
|
|
type GatewayClientName,
|
|
normalizeGatewayClientMode,
|
|
normalizeGatewayClientName,
|
|
} from "../gateway/protocol/client-info.js";
|
|
import {
|
|
listChatProviderAliases,
|
|
normalizeChatProviderId,
|
|
PROVIDER_IDS,
|
|
} from "../providers/registry.js";
|
|
|
|
export const INTERNAL_MESSAGE_PROVIDER = "webchat" as const;
|
|
export type InternalMessageProvider = typeof INTERNAL_MESSAGE_PROVIDER;
|
|
|
|
export { GATEWAY_CLIENT_NAMES, GATEWAY_CLIENT_MODES };
|
|
export type { GatewayClientName, GatewayClientMode };
|
|
export { normalizeGatewayClientName, normalizeGatewayClientMode };
|
|
|
|
type GatewayClientInfoLike = {
|
|
mode?: string | null;
|
|
id?: string | null;
|
|
};
|
|
|
|
export function isGatewayCliClient(
|
|
client?: GatewayClientInfoLike | null,
|
|
): boolean {
|
|
return normalizeGatewayClientMode(client?.mode) === GATEWAY_CLIENT_MODES.CLI;
|
|
}
|
|
|
|
export function isInternalMessageProvider(
|
|
raw?: string | null,
|
|
): raw is InternalMessageProvider {
|
|
return normalizeMessageProvider(raw) === INTERNAL_MESSAGE_PROVIDER;
|
|
}
|
|
|
|
export function isWebchatClient(
|
|
client?: GatewayClientInfoLike | null,
|
|
): boolean {
|
|
const mode = normalizeGatewayClientMode(client?.mode);
|
|
if (mode === GATEWAY_CLIENT_MODES.WEBCHAT) return true;
|
|
return (
|
|
normalizeGatewayClientName(client?.id) === GATEWAY_CLIENT_NAMES.WEBCHAT_UI
|
|
);
|
|
}
|
|
|
|
export function normalizeMessageProvider(
|
|
raw?: string | null,
|
|
): string | undefined {
|
|
const normalized = raw?.trim().toLowerCase();
|
|
if (!normalized) return undefined;
|
|
if (normalized === INTERNAL_MESSAGE_PROVIDER)
|
|
return INTERNAL_MESSAGE_PROVIDER;
|
|
return normalizeChatProviderId(normalized) ?? normalized;
|
|
}
|
|
|
|
export const DELIVERABLE_MESSAGE_PROVIDERS = PROVIDER_IDS;
|
|
|
|
export type DeliverableMessageProvider =
|
|
(typeof DELIVERABLE_MESSAGE_PROVIDERS)[number];
|
|
|
|
export type GatewayMessageProvider =
|
|
| DeliverableMessageProvider
|
|
| InternalMessageProvider;
|
|
|
|
export const GATEWAY_MESSAGE_PROVIDERS = [
|
|
...DELIVERABLE_MESSAGE_PROVIDERS,
|
|
INTERNAL_MESSAGE_PROVIDER,
|
|
] as const;
|
|
|
|
export const GATEWAY_AGENT_PROVIDER_ALIASES = listChatProviderAliases();
|
|
|
|
export type GatewayAgentProviderHint = GatewayMessageProvider | "last";
|
|
|
|
export const GATEWAY_AGENT_PROVIDER_VALUES = Array.from(
|
|
new Set([
|
|
...GATEWAY_MESSAGE_PROVIDERS,
|
|
"last",
|
|
...GATEWAY_AGENT_PROVIDER_ALIASES,
|
|
]),
|
|
);
|
|
|
|
export function isGatewayMessageProvider(
|
|
value: string,
|
|
): value is GatewayMessageProvider {
|
|
return (GATEWAY_MESSAGE_PROVIDERS as readonly string[]).includes(value);
|
|
}
|
|
|
|
export function isDeliverableMessageProvider(
|
|
value: string,
|
|
): value is DeliverableMessageProvider {
|
|
return (DELIVERABLE_MESSAGE_PROVIDERS as readonly string[]).includes(value);
|
|
}
|
|
|
|
export function resolveGatewayMessageProvider(
|
|
raw?: string | null,
|
|
): GatewayMessageProvider | undefined {
|
|
const normalized = normalizeMessageProvider(raw);
|
|
if (!normalized) return undefined;
|
|
return isGatewayMessageProvider(normalized) ? normalized : undefined;
|
|
}
|
|
|
|
export function resolveMessageProvider(
|
|
primary?: string | null,
|
|
fallback?: string | null,
|
|
): string | undefined {
|
|
return (
|
|
normalizeMessageProvider(primary) ?? normalizeMessageProvider(fallback)
|
|
);
|
|
}
|