61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import { resolveThemeFromQuery } from "@/core/auth/external-login";
|
||
import type { ThemeType } from "@/contexts/ThemeContext";
|
||
|
||
const DEFAULT_USERNAME = "guest";
|
||
|
||
export type EmbedChatParams = {
|
||
/** Parent correlation id — required for status polling without thread_id. */
|
||
sessionId: string;
|
||
message: string;
|
||
username: string;
|
||
theme: string;
|
||
};
|
||
|
||
/**
|
||
* Resolve iframe embed params from URL query only (plain iframe, not wujie).
|
||
*
|
||
* Parent must generate ``sessionId`` and pass it on the iframe URL so it can
|
||
* poll ``GET /api/public/embed/sessions/{sessionId}/status`` without reading
|
||
* the child frame.
|
||
*/
|
||
export function resolveEmbedChatParams(search: string): EmbedChatParams {
|
||
const params = new URLSearchParams(search.startsWith("?") ? search : `?${search}`);
|
||
|
||
const sessionId =
|
||
params.get("sessionId")?.trim() ||
|
||
params.get("session_id")?.trim() ||
|
||
"";
|
||
|
||
const message =
|
||
params.get("message")?.trim() ||
|
||
params.get("question")?.trim() ||
|
||
params.get("text")?.trim() ||
|
||
"";
|
||
|
||
const username =
|
||
params.get("username")?.trim() ||
|
||
params.get("userName")?.trim() ||
|
||
DEFAULT_USERNAME;
|
||
|
||
const theme = params.get("theme")?.trim() || "";
|
||
|
||
return { sessionId, message, username, theme };
|
||
}
|
||
|
||
export function resolveEmbedTheme(themeParam: string): ThemeType {
|
||
return resolveThemeFromQuery(themeParam || null);
|
||
}
|
||
|
||
/**
|
||
* 把宿主传入的主题标识映射成 light/dark。**默认深蓝(dark)**:
|
||
* 只有明确传 light/红白 才走浅色,其余(dark / dark-blue / 深蓝 / 空)一律深蓝。
|
||
* 不复用 `resolveEmbedTheme`(它只认严格的 "dark-blue",传 "dark" 会被判成浅色)。
|
||
*/
|
||
export function resolveEmbedRoundtableTheme(raw: string): ThemeType {
|
||
const v = raw.trim().toLowerCase();
|
||
if (v === "light" || v === "red" || v === "红白") return "light";
|
||
if (v === "blue" || v === "lightblue" || v === "light-blue" || v === "浅蓝") return "lightblue";
|
||
if (v === "green" || v === "lightgreen" || v === "light-green" || v === "绿色") return "lightgreen";
|
||
return "dark";
|
||
}
|