telemetry.js
1.09 KB
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<string, unknown>,
* 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(),
})