import type { AdminTrackingEventKeyPayload, TrackingScopeKind, } from '../api/adminApiTypes'; export interface AdminTrackingEventDefinition { key: string; title: string; scopeKind: TrackingScopeKind; remark: string; taskConfigEligible?: boolean; } export interface AdminTrackingEventKeyOption { key: string; title: string; scopeKind: TrackingScopeKind | string; scopeKinds: string[]; remark: string; } export const adminTrackingEventDefinitions: AdminTrackingEventDefinition[] = [ { key: 'auth_login_options_view', title: '登录方式查看', scopeKind: 'site', remark: '读取当前可用登录方式时记录,用于观察登录入口曝光。', }, { key: 'auth_phone_code_send', title: '发送手机验证码', scopeKind: 'site', remark: '提交手机验证码发送请求成功后记录。', }, { key: 'daily_login', title: '每日登录', scopeKind: 'user', remark: '认证成功或 refresh 续期后由后端幂等记录,用于每日登录任务进度校验。', taskConfigEligible: true, }, { key: 'auth_phone_login_success', title: '手机号登录成功', scopeKind: 'user', remark: '手机号验证码登录成功后记录。', }, { key: 'auth_me_view', title: '当前账号查看', scopeKind: 'user', remark: '读取当前登录账号信息成功后记录。', }, { key: 'auth_sessions_view', title: '登录会话查看', scopeKind: 'user', remark: '读取当前账号登录会话列表成功后记录。', }, { key: 'auth_refresh_success', title: '登录续期成功', scopeKind: 'site', remark: 'refresh cookie 续期成功后记录。', }, { key: 'auth_logout', title: '退出登录', scopeKind: 'user', remark: '退出当前登录会话成功后记录。', }, { key: 'auth_logout_all', title: '退出全部会话', scopeKind: 'user', remark: '退出全部登录会话成功后记录。', }, { key: 'auth_wechat_bind_phone_success', title: '微信绑定手机成功', scopeKind: 'user', remark: '微信账号绑定手机号成功后记录。', }, { key: 'profile_identity_update', title: '资料更新', scopeKind: 'user', remark: '用户资料更新成功后记录。', }, { key: 'profile_dashboard_view', title: '个人看板查看', scopeKind: 'user', remark: '读取个人看板成功后记录。', }, { key: 'wallet_ledger_view', title: '钱包流水查看', scopeKind: 'user', remark: '读取泥点钱包流水成功后记录。', }, { key: 'recharge_center_view', title: '充值中心查看', scopeKind: 'user', remark: '读取充值中心信息成功后记录。', }, { key: 'recharge_order_create', title: '充值订单创建', scopeKind: 'user', remark: '创建充值订单成功后记录。', }, { key: 'feedback_submit', title: '反馈提交', scopeKind: 'user', remark: '资料页反馈提交成功后记录。', }, { key: 'invite_center_view', title: '邀请中心查看', scopeKind: 'user', remark: '读取邀请中心成功后记录。', }, { key: 'referral_invite_code_redeem', title: '邀请码绑定', scopeKind: 'user', remark: '绑定推荐邀请码成功后记录。', }, { key: 'redeem_code_submit', title: '兑换码提交', scopeKind: 'user', remark: '提交运营兑换码成功后记录。', }, { key: 'task_center_view', title: '任务中心查看', scopeKind: 'user', remark: '读取个人任务中心成功后记录。', }, { key: 'task_reward_claim', title: '任务奖励领取', scopeKind: 'user', remark: '领取个人任务奖励成功后记录。', }, { key: 'profile_analytics_metric_view', title: '个人指标查看', scopeKind: 'user', remark: '读取个人埋点指标成功后记录。', }, { key: 'ai_task_create', title: 'AI 任务创建', scopeKind: 'user', remark: '创建 AI 任务成功后记录。', }, { key: 'ai_task_start', title: 'AI 任务启动', scopeKind: 'user', remark: '启动 AI 任务成功后记录。', }, { key: 'ai_task_stage_start', title: 'AI 阶段启动', scopeKind: 'user', remark: '启动 AI 任务阶段成功后记录。', }, { key: 'ai_task_chunk_append', title: 'AI 分片追加', scopeKind: 'user', remark: '追加 AI 文本分片成功后记录。', }, { key: 'ai_task_stage_complete', title: 'AI 阶段完成', scopeKind: 'user', remark: '完成 AI 任务阶段成功后记录。', }, { key: 'ai_task_reference_attach', title: 'AI 结果引用绑定', scopeKind: 'user', remark: '绑定 AI 结果引用成功后记录。', }, { key: 'ai_task_complete', title: 'AI 任务完成', scopeKind: 'user', remark: '完成 AI 任务成功后记录。', }, { key: 'ai_task_fail', title: 'AI 任务失败标记', scopeKind: 'user', remark: '标记 AI 任务失败成功后记录。', }, { key: 'ai_task_cancel', title: 'AI 任务取消', scopeKind: 'user', remark: '取消 AI 任务成功后记录。', }, { key: 'asset_upload_ticket_create', title: '资产上传票据创建', scopeKind: 'user', remark: '创建直传票据成功后记录,metadata 包含低敏资产定位字段。', }, { key: 'asset_sts_credentials_create', title: '资产 STS 凭证创建', scopeKind: 'user', remark: '创建临时上传凭证成功后记录。', }, { key: 'asset_upload_confirm', title: '资产上传确认', scopeKind: 'user', remark: '确认 OSS 对象为平台资产成功后记录。', }, { key: 'asset_bind', title: '资产绑定', scopeKind: 'user', remark: '把平台资产绑定到业务实体成功后记录。', }, { key: 'asset_character_visual_generate', title: '角色形象生成', scopeKind: 'user', remark: '角色主图生成请求成功后记录。', }, { key: 'asset_character_visual_publish', title: '角色形象发布', scopeKind: 'user', remark: '角色主图发布成功后记录。', }, { key: 'asset_character_animation_generate', title: '角色动画生成', scopeKind: 'user', remark: '角色动画生成请求成功后记录。', }, { key: 'asset_character_animation_publish', title: '角色动画发布', scopeKind: 'user', remark: '角色动画发布成功后记录。', }, { key: 'asset_character_animation_import', title: '角色动画视频导入', scopeKind: 'user', remark: '角色动画导入视频成功后记录。', }, { key: 'asset_character_workflow_cache_save', title: '角色工作流缓存保存', scopeKind: 'user', remark: '保存角色工作流缓存成功后记录。', }, { key: 'asset_history_view', title: '资产历史查看', scopeKind: 'user', remark: '读取资产历史成功后记录。', }, { key: 'llm_request', title: 'LLM 请求', scopeKind: 'user', remark: '调用后端 LLM 门面成功后记录。', }, { key: 'speech_config_view', title: '语音配置查看', scopeKind: 'user', remark: '读取语音配置成功后记录。', }, { key: 'asr_stream_start', title: 'ASR 流启动', scopeKind: 'user', remark: '启动语音识别流成功后记录。', }, { key: 'tts_bidirection_start', title: 'TTS 双向流启动', scopeKind: 'user', remark: '启动双向语音合成流成功后记录。', }, { key: 'tts_sse_start', title: 'TTS SSE 启动', scopeKind: 'user', remark: '启动 SSE 语音合成成功后记录。', }, { key: 'runtime_settings_view', title: '运行设置查看', scopeKind: 'user', remark: '读取运行设置成功后记录。', }, { key: 'runtime_settings_update', title: '运行设置更新', scopeKind: 'user', remark: '更新运行设置成功后记录。', }, ]; export const adminProfileTaskTrackingEventDefinitions = adminTrackingEventDefinitions.filter( (definition) => definition.taskConfigEligible, ); export function findAdminTrackingEventDefinition(eventKey: string) { const normalizedEventKey = eventKey.trim(); return ( adminTrackingEventDefinitions.find( (definition) => definition.key === normalizedEventKey, ) ?? null ); } export function filterAdminTrackingEventDefinitions(query: string) { return filterTrackingEventDefinitions(adminTrackingEventDefinitions, query); } export function buildAdminTrackingEventKeyOptions( eventKeys: AdminTrackingEventKeyPayload[], ): AdminTrackingEventKeyOption[] { const options = new Map(); for (const payload of eventKeys) { const key = payload.eventKey.trim(); if (!key || options.has(key)) { continue; } const definition = findAdminTrackingEventDefinition(key); const scopeKinds = payload.scopeKinds.length ? payload.scopeKinds : definition ? [definition.scopeKind] : []; options.set(key, { key, title: definition?.title ?? (payload.eventTitle || key), scopeKind: definition?.scopeKind ?? scopeKinds[0] ?? '', scopeKinds, remark: definition?.remark ?? '真实埋点库中已出现的 event key。', }); } return [...options.values()].sort((left, right) => left.key.localeCompare(right.key), ); } export function filterAdminTrackingEventKeyOptions( options: AdminTrackingEventKeyOption[], query: string, ) { return filterTrackingEventDefinitions(options, query); } export function filterAdminProfileTaskTrackingEventDefinitions(query: string) { return filterTrackingEventDefinitions( adminProfileTaskTrackingEventDefinitions, query, ); } function filterTrackingEventDefinitions( definitions: Array< AdminTrackingEventDefinition | AdminTrackingEventKeyOption >, query: string, ) { const normalizedQuery = query.trim().toLowerCase(); if (!normalizedQuery) { return definitions; } return definitions.filter((definition) => { const haystack = [ definition.key, definition.title, definition.scopeKind, definition.remark, ] .join(' ') .toLowerCase(); return haystack.includes(normalizedQuery); }); }