@geoly-ai/social-hub-core 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity.d.ts +138 -0
- package/dist/activity.d.ts.map +1 -0
- package/dist/activity.js +577 -0
- package/dist/activity.js.map +1 -0
- package/dist/activity.test.d.ts +2 -0
- package/dist/activity.test.d.ts.map +1 -0
- package/dist/activity.test.js +430 -0
- package/dist/activity.test.js.map +1 -0
- package/dist/client-delivery-config.d.ts +26 -0
- package/dist/client-delivery-config.d.ts.map +1 -0
- package/dist/client-delivery-config.js +40 -0
- package/dist/client-delivery-config.js.map +1 -0
- package/dist/client-delivery-config.test.d.ts +2 -0
- package/dist/client-delivery-config.test.d.ts.map +1 -0
- package/dist/client-delivery-config.test.js +36 -0
- package/dist/client-delivery-config.test.js.map +1 -0
- package/dist/content-review-scoring.d.ts +67 -0
- package/dist/content-review-scoring.d.ts.map +1 -0
- package/dist/content-review-scoring.js +128 -0
- package/dist/content-review-scoring.js.map +1 -0
- package/dist/content-review-scoring.test.d.ts +2 -0
- package/dist/content-review-scoring.test.d.ts.map +1 -0
- package/dist/content-review-scoring.test.js +109 -0
- package/dist/content-review-scoring.test.js.map +1 -0
- package/dist/errors.d.ts +3 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/notification-sources/field-paths.d.ts +93 -0
- package/dist/notification-sources/field-paths.d.ts.map +1 -0
- package/dist/notification-sources/field-paths.js +86 -0
- package/dist/notification-sources/field-paths.js.map +1 -0
- package/dist/notification-sources/field-set.d.ts +46 -0
- package/dist/notification-sources/field-set.d.ts.map +1 -0
- package/dist/notification-sources/field-set.js +178 -0
- package/dist/notification-sources/field-set.js.map +1 -0
- package/dist/notification-sources/index.d.ts +13 -0
- package/dist/notification-sources/index.d.ts.map +1 -0
- package/dist/notification-sources/index.js +13 -0
- package/dist/notification-sources/index.js.map +1 -0
- package/dist/notification-sources/notification-sources.test.d.ts +2 -0
- package/dist/notification-sources/notification-sources.test.d.ts.map +1 -0
- package/dist/notification-sources/notification-sources.test.js +211 -0
- package/dist/notification-sources/notification-sources.test.js.map +1 -0
- package/dist/notification-sources/post-performance-node-runtime.d.ts +155 -0
- package/dist/notification-sources/post-performance-node-runtime.d.ts.map +1 -0
- package/dist/notification-sources/post-performance-node-runtime.js +158 -0
- package/dist/notification-sources/post-performance-node-runtime.js.map +1 -0
- package/dist/notification-sources/post-performance-node-runtime.test.d.ts +2 -0
- package/dist/notification-sources/post-performance-node-runtime.test.d.ts.map +1 -0
- package/dist/notification-sources/post-performance-node-runtime.test.js +182 -0
- package/dist/notification-sources/post-performance-node-runtime.test.js.map +1 -0
- package/dist/notification-sources/post-performance-node.d.ts +34 -0
- package/dist/notification-sources/post-performance-node.d.ts.map +1 -0
- package/dist/notification-sources/post-performance-node.js +437 -0
- package/dist/notification-sources/post-performance-node.js.map +1 -0
- package/dist/notification-sources/registry.d.ts +27 -0
- package/dist/notification-sources/registry.d.ts.map +1 -0
- package/dist/notification-sources/registry.js +222 -0
- package/dist/notification-sources/registry.js.map +1 -0
- package/dist/notification-sources/source-definition.d.ts +97 -0
- package/dist/notification-sources/source-definition.d.ts.map +1 -0
- package/dist/notification-sources/source-definition.js +30 -0
- package/dist/notification-sources/source-definition.js.map +1 -0
- package/dist/openclaw-config.d.ts +9 -0
- package/dist/openclaw-config.d.ts.map +1 -1
- package/dist/openclaw-config.js +17 -0
- package/dist/openclaw-config.js.map +1 -1
- package/dist/openclaw-config.test.d.ts +2 -0
- package/dist/openclaw-config.test.d.ts.map +1 -0
- package/dist/openclaw-config.test.js +49 -0
- package/dist/openclaw-config.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 互动时序去同质化(需求 v5)的 Hub 侧纯函数层:
|
|
3
|
+
* canonical event payload 校验、civil-time 归日、recentActivitySummary 聚合、
|
|
4
|
+
* effectiveTimezone 计算。全部无 IO,便于 §11.4 fixture 逐条验收。
|
|
5
|
+
*
|
|
6
|
+
* 口径来源:openclaw-template docs/reddit-interaction-timing-hub-requirements-2026-07.md
|
|
7
|
+
* §4.3 + 实现方裁决(飞书评论 7662423677899656150):
|
|
8
|
+
* - occurredAt(带 offset 绝对时刻)为权威,eventTimezone 仅用于归日;
|
|
9
|
+
* - 三元组去重=整条 event 去重;
|
|
10
|
+
* - 历史无 eventTimezone 且当前时区 unknown → 不做逐日归属。
|
|
11
|
+
*/
|
|
12
|
+
export declare const CANONICAL_EVENT_SCHEMA_VERSION = 1;
|
|
13
|
+
/** 需求A:canonical v2 —— 允许 eventTimezone null + timezoneKnown。v1 语义不变。 */
|
|
14
|
+
export declare const CANONICAL_EVENT_SCHEMA_VERSION_V2 = 2;
|
|
15
|
+
export declare const SUPPORTED_CANONICAL_VERSIONS: readonly [1, 2];
|
|
16
|
+
/** 需求A:执行/环境行为健康事件类型(interaction_events.type,非普通互动事件)。 */
|
|
17
|
+
export declare const INTERACTION_ACTION_OUTCOME_TYPE = "interaction_action_outcome";
|
|
18
|
+
export declare const CANONICAL_ACTION_KINDS: readonly ["browse", "like", "comment", "reply", "session_start", "planned", "skipped"];
|
|
19
|
+
export type CanonicalActionKind = (typeof CANONICAL_ACTION_KINDS)[number];
|
|
20
|
+
/** 补录延迟上限:occurredAt 不得早于写入时刻 48h(否则 createdAt 索引查询会漏聚合)。 */
|
|
21
|
+
export declare const CANONICAL_MAX_BACKFILL_MS: number;
|
|
22
|
+
/** 允许的时钟漂移:occurredAt 不得晚于写入时刻 15min。 */
|
|
23
|
+
export declare const CANONICAL_MAX_FUTURE_SKEW_MS: number;
|
|
24
|
+
export declare function isValidIanaTimezone(tz: string): boolean;
|
|
25
|
+
export type CanonicalValidationResult = {
|
|
26
|
+
ok: true;
|
|
27
|
+
canonical: boolean;
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
errors: string[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* canonical 全组校验(v5 终审②:禁止半 canonical 事件):
|
|
34
|
+
* - 7 个 canonical 键全缺 → legacy 事件,放行(向后兼容);
|
|
35
|
+
* - 任一出现 → occurredAt/eventTimezone/actionKind/eventSchemaVersion/jobId
|
|
36
|
+
* 必须完整合法;runId/sessionId 可选。
|
|
37
|
+
* API contract 层与 DB service 层(worker/import 直写路径)共用本函数。
|
|
38
|
+
*/
|
|
39
|
+
export declare function validateCanonicalEventPayload(payload: Record<string, unknown> | null | undefined, opts?: {
|
|
40
|
+
now?: Date;
|
|
41
|
+
eventType?: string;
|
|
42
|
+
}): CanonicalValidationResult;
|
|
43
|
+
export declare const OUTCOME_VALUES: readonly ["succeeded", "failed", "stopped", "uncertain"];
|
|
44
|
+
/** 终止类 code(A 组,stop=true/retryable=false;STOP_WRITE_UNCERTAIN 例外→uncertain)。 */
|
|
45
|
+
export declare const OUTCOME_STOP_CODES: readonly ["STOP_CHALLENGE", "STOP_RATE_LIMIT", "STOP_AUTH_REQUIRED", "STOP_HIDDEN", "STOP_PAGE_UNFOCUSED", "STOP_WRITE_UNCERTAIN", "STOP_POST_CLICK_NO_CHANGE", "STOP_FOCUS_NOT_ACQUIRED", "STOP_UPLOAD_FAILED", "STOP_UNEXPECTED_NAVIGATION"];
|
|
46
|
+
/** 可重试类 code(B 组,stop=false/retryable=true/outcome=failed)。 */
|
|
47
|
+
export declare const OUTCOME_RETRYABLE_CODES: readonly ["TARGET_STALE", "TARGET_NOT_FOUND", "TARGET_OBSCURED", "KEYBOARD_INPUT_FAILED", "PAGE_NAVIGATING"];
|
|
48
|
+
export declare const OUTCOME_CODES: readonly ["NONE", "STOP_CHALLENGE", "STOP_RATE_LIMIT", "STOP_AUTH_REQUIRED", "STOP_HIDDEN", "STOP_PAGE_UNFOCUSED", "STOP_WRITE_UNCERTAIN", "STOP_POST_CLICK_NO_CHANGE", "STOP_FOCUS_NOT_ACQUIRED", "STOP_UPLOAD_FAILED", "STOP_UNEXPECTED_NAVIGATION", "TARGET_STALE", "TARGET_NOT_FOUND", "TARGET_OBSCURED", "KEYBOARD_INPUT_FAILED", "PAGE_NAVIGATING"];
|
|
49
|
+
export declare const OUTCOME_PHASES: readonly ["precondition", "target", "focus", "input", "submit", "verify", "upload"];
|
|
50
|
+
export declare const OUTCOME_METHODS: readonly ["coordinate-input", "dom-fallback", "applescript-upload"];
|
|
51
|
+
/**
|
|
52
|
+
* interaction_action_outcome payload 交叉校验(需求A §5.1)。严格枚举 + 交叉关系
|
|
53
|
+
* 完整闭合(非法组合一律拒绝);未知 code 拒绝不静默降级;method=null(JSON null)
|
|
54
|
+
* 仅 precondition/target 未执行输入时允许。纯函数,fixture 可测。
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateInteractionActionOutcomePayload(payload: Record<string, unknown>): {
|
|
57
|
+
ok: boolean;
|
|
58
|
+
errors: string[];
|
|
59
|
+
};
|
|
60
|
+
/** payload 已含 canonical 字段(occurredAt 在即视为 canonical 行,append-only 依据)。 */
|
|
61
|
+
export declare function hasCanonicalEventFields(payload: Record<string, unknown> | null | undefined): boolean;
|
|
62
|
+
export type CivilParts = {
|
|
63
|
+
date: string;
|
|
64
|
+
hour: number;
|
|
65
|
+
minute: number;
|
|
66
|
+
};
|
|
67
|
+
/** 绝对时刻 → 目标时区 civil 日期/时分(tz-db 规则,DST 由 Intl 处理)。 */
|
|
68
|
+
export declare function getCivilInZone(instant: Date, timeZone: string): CivilParts;
|
|
69
|
+
/** 日历日字符串 ±N 天(纯日期运算,与时区无关)。 */
|
|
70
|
+
export declare function shiftCalendarDate(date: string, days: number): string;
|
|
71
|
+
/**
|
|
72
|
+
* activityDate(§4.3③ 固定业务日 cutoff):本地 civil 时刻 00:00–02:00 归前一日。
|
|
73
|
+
* 注意:−2h 是 local civil cutoff,不是 UTC elapsed——按 civil hour 判断后做
|
|
74
|
+
* 日历日减一,不做时间戳减法(DST 日 UTC 减法会错)。
|
|
75
|
+
*/
|
|
76
|
+
export declare function activityDateOf(instant: Date, timeZone: string): string;
|
|
77
|
+
export type TimezoneSource = {
|
|
78
|
+
timezone: string | null;
|
|
79
|
+
timezoneConfigured: boolean;
|
|
80
|
+
};
|
|
81
|
+
export type BrowserEnvTimezoneSource = TimezoneSource & {
|
|
82
|
+
lastHealthAt: Date | null;
|
|
83
|
+
createdAt: Date | null;
|
|
84
|
+
};
|
|
85
|
+
export type EffectiveTimezoneResult = {
|
|
86
|
+
effectiveTimezone: string;
|
|
87
|
+
timezoneKnown: boolean;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* 唯一时区来源:真配置的 risk.timezone → 真配置的 browser env(多 env 取
|
|
91
|
+
* lastHealthAt 最新,无健康记录则 createdAt 最新)→ "unknown"。
|
|
92
|
+
* 默认填充的 UTC(timezoneConfigured=false)不算已知(UTC 毒化修复,§2.5.2②)。
|
|
93
|
+
*/
|
|
94
|
+
export declare function computeEffectiveTimezone(input: {
|
|
95
|
+
risk: TimezoneSource | null;
|
|
96
|
+
browserEnvs: BrowserEnvTimezoneSource[];
|
|
97
|
+
}): EffectiveTimezoneResult;
|
|
98
|
+
export type ActivityEventInput = {
|
|
99
|
+
id: string;
|
|
100
|
+
/** interaction_events.type —— 用于按类型排除非活动事件(需求A)。 */
|
|
101
|
+
type?: string | null;
|
|
102
|
+
externalRef: string | null;
|
|
103
|
+
result: string | null;
|
|
104
|
+
payload: Record<string, unknown> | null;
|
|
105
|
+
createdAt: Date;
|
|
106
|
+
};
|
|
107
|
+
export type ActivityLocalDay = {
|
|
108
|
+
date: string;
|
|
109
|
+
sessions: number;
|
|
110
|
+
comments: number;
|
|
111
|
+
likes: number;
|
|
112
|
+
replies: number;
|
|
113
|
+
};
|
|
114
|
+
export type RecentActivitySummary = {
|
|
115
|
+
windowDays: number;
|
|
116
|
+
localDays: ActivityLocalDay[];
|
|
117
|
+
lastSessionAt: string | null;
|
|
118
|
+
consecutiveSilentDays: number | null;
|
|
119
|
+
activeDaysLast7: number | null;
|
|
120
|
+
activeDaysLast28: number | null;
|
|
121
|
+
timezoneKnown: boolean;
|
|
122
|
+
/** 有事件因缺 eventTimezone 而按当前时区近似归日(§4.3⑤)。 */
|
|
123
|
+
historicalTzApprox: boolean;
|
|
124
|
+
/** 因时区完全未知而无法归日的事件数(裁决④:不猜,只计数)。 */
|
|
125
|
+
unattributedEvents: number;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* 聚合最近 windowDays 个 activityDate 的 session/action(§4.3④ 全口径)。
|
|
129
|
+
* 仅统计 canonical 事件(payload 带合法 actionKind∈browse/like/comment/reply
|
|
130
|
+
* 且 result 非 failed/skipped);legacy 无 actionKind 事件不参与(P1 起新数据)。
|
|
131
|
+
*/
|
|
132
|
+
export declare function computeRecentActivitySummary(events: ActivityEventInput[], opts: {
|
|
133
|
+
now: Date;
|
|
134
|
+
effectiveTimezone: string;
|
|
135
|
+
timezoneKnown: boolean;
|
|
136
|
+
windowDays?: number;
|
|
137
|
+
}): RecentActivitySummary;
|
|
138
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,yEAAyE;AACzE,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,4BAA4B,iBAG/B,CAAC;AAEX,0DAA0D;AAC1D,eAAO,MAAM,+BAA+B,+BAA+B,CAAC;AAE5E,eAAO,MAAM,sBAAsB,wFAQzB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAoB1E,6DAA6D;AAC7D,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAC7D,yCAAyC;AACzC,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAE3D,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQvD;AASD,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACnD,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,yBAAyB,CA4G3B;AAID,eAAO,MAAM,cAAc,0DAKjB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,gPAWrB,CAAC;AAEX,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,8GAM1B,CAAC;AAEX,eAAO,MAAM,aAAa,2VAIhB,CAAC;AAEX,eAAO,MAAM,cAAc,qFAQjB,CAAC;AAEX,eAAO,MAAM,eAAe,qEAIlB,CAAC;AAQX;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA8GnC;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAClD,OAAO,CAET;AAuBD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAQ1E;AAED,gCAAgC;AAChC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtE;AAID,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG;IACtD,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,wBAAwB,EAAE,CAAC;CACzC,GAAG,uBAAuB,CAwB1B;AAID,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAWF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oCAAoC;IACpC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAeF;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kBAAkB,EAAE,EAC5B,IAAI,EAAE;IACJ,GAAG,EAAE,IAAI,CAAC;IACV,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,qBAAqB,CAqMvB"}
|