import * as v from 'valibot' /** * 埋点事件信封 —— 前端 `@drama/telemetry` SDK 上报的原始事件形态, * 也是后端 `@drama/telemetry-ingest` 校验落库的单一事实来源。 * * 字段与前端 `EventEnvelope`(`@drama/telemetry` 的 `envelope.js`)逐项对齐: * 同一份契约前端产、后端校验,避免前后端事件形态漂移。`props` 用 `record` 以 * 容纳任意业务属性(一期不约束业务字段,只保证信封骨架完整)。 * * `ts` 是客户端事件发生时刻的 epoch 毫秒数(number),非 DB DATETIME 字段,保持 number。 * * @typedef {{ * name: string, * props: Record, * ts: number, * device_id: string, * anon_id: string | null, * locale: string, * session_id: string, * sdk_version: string * }} TelemetryEventT */ export const TelemetryEvent = v.object({ name: v.string(), props: v.record(v.string(), v.unknown()), ts: v.number(), device_id: v.string(), anon_id: v.nullable(v.string()), locale: v.string(), session_id: v.string(), sdk_version: v.string(), })