feat(server): 业务事件契约——白名单+6事件与枚举校验

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-18 22:10:20 +08:00
parent 4a54087070
commit 3b9d8ecee0
3 changed files with 76 additions and 1 deletions
+10 -1
View File
@@ -1,6 +1,8 @@
import re
EVENT_NAMES = {"page_view", "page_stay", "sdk_loaded", "session_resume"}
BIZ_EVENT_NAMES = {"contact_click", "form_start", "form_error", "form_submit",
"form_submit_result", "product_view"} # 阶段B业务事件(spec §1)
EVENT_NAMES = {"page_view", "page_stay", "sdk_loaded", "session_resume"} | BIZ_EVENT_NAMES
SCHEMA_VERSION = 2 # 批级信缺省 = v1(旧SDK)
MAX_EVENTS_PER_BATCH = 50
MAX_PROP_KEYS = 32
@@ -25,6 +27,13 @@ EVENT_PROP_WHITELIST = { # spec §9.1:未知字段拒绝。免费文
"page_stay": {"active_ms", "path", "active_from", "active_to", "flush_reason", "measurement_version"},
"sdk_loaded": {"sdk_version", "build_id", "schema_version", "config_version"},
"session_resume": {"prev_session_id", "reason"},
# 业务事件属性键白名单(spec §2)——值级枚举/格式校验在 validation._biz_props_ok
"contact_click": {"channel"},
"form_start": {"form_id"},
"form_submit": {"form_id", "submission_id"},
"form_error": {"form_id", "submission_id", "error_code", "field_count"},
"form_submit_result": {"form_id", "submission_id", "result_code"},
"product_view": {"product_id", "inferred", "rule_version"},
}
MAX_PROP_DEPTH = 2
MAX_PROP_JSON_BYTES = 4096