@reachy/audience-module 1.0.17 → 1.0.19
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/CLAUDE.md +134 -0
- package/dist/AudienceModule.d.ts.map +1 -1
- package/dist/AudienceModule.js +1 -0
- package/dist/AudienceModule.js.map +1 -1
- package/dist/builders/RfmSegmentBuilder.d.ts +44 -0
- package/dist/builders/RfmSegmentBuilder.d.ts.map +1 -0
- package/dist/builders/RfmSegmentBuilder.js +232 -0
- package/dist/builders/RfmSegmentBuilder.js.map +1 -0
- package/dist/engine/RfmEngine.d.ts +67 -0
- package/dist/engine/RfmEngine.d.ts.map +1 -0
- package/dist/engine/RfmEngine.js +335 -0
- package/dist/engine/RfmEngine.js.map +1 -0
- package/dist/engine/V2AudienceEngine.d.ts +5 -0
- package/dist/engine/V2AudienceEngine.d.ts.map +1 -1
- package/dist/engine/V2AudienceEngine.js +210 -72
- package/dist/engine/V2AudienceEngine.js.map +1 -1
- package/dist/executors/ClickHouseEventQueryExecutor.d.ts +23 -0
- package/dist/executors/ClickHouseEventQueryExecutor.d.ts.map +1 -0
- package/dist/executors/ClickHouseEventQueryExecutor.js +803 -0
- package/dist/executors/ClickHouseEventQueryExecutor.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/repositories/SupabaseContactRepository.d.ts +1 -0
- package/dist/repositories/SupabaseContactRepository.d.ts.map +1 -1
- package/dist/repositories/SupabaseContactRepository.js +1 -0
- package/dist/repositories/SupabaseContactRepository.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/AudienceModule.ts +1 -0
- package/src/builders/RfmSegmentBuilder.ts +279 -0
- package/src/engine/RfmEngine.ts +418 -0
- package/src/engine/V2AudienceEngine.ts +240 -85
- package/src/executors/ClickHouseEventQueryExecutor.ts +853 -0
- package/src/index.ts +2 -0
- package/src/repositories/SupabaseContactRepository.ts +2 -1
- package/src/types/index.ts +6 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Build & Development
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm run build # Compile TypeScript → dist/
|
|
9
|
+
npm run watch # Compile with --watch for dev
|
|
10
|
+
npm run clean # Remove dist/
|
|
11
|
+
npx tsc --noEmit # Type-check without emitting
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
No test framework or linter is configured. CI is GitLab (`.gitlab-ci.yml`): lint_and_test → build → tag → publish_npm (manual).
|
|
15
|
+
|
|
16
|
+
Published as `@reachy/audience-module` on npm (v1.0.19). Peer dependency: `@supabase/supabase-js ^2.x`.
|
|
17
|
+
|
|
18
|
+
## Architecture
|
|
19
|
+
|
|
20
|
+
Standalone npm package that evaluates audience segmentation criteria against contacts and events. Consumed by `reachy-api` and other Reachy services.
|
|
21
|
+
|
|
22
|
+
### Execution flow
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
AudienceModule (facade)
|
|
26
|
+
→ CriteriaParser.parse() — normalizes V1/V2/conditions into groups format
|
|
27
|
+
→ CriteriaParser.getAudienceType() — 'static' or 'live'
|
|
28
|
+
│
|
|
29
|
+
├─ Static: StaticAudienceExecutor → SupabaseContactRepository → V2AudienceEngine
|
|
30
|
+
└─ Live: MemberRepository.listMembers() (injected)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**V2AudienceEngine** (~2200 lines) is the core. It evaluates groups of rules:
|
|
34
|
+
- **Property rules** (`kind='property'`) — query `contacts` table via Supabase
|
|
35
|
+
- **Event rules** (`kind='event'`) — routed to `ClickHouseEventQueryExecutor` when available, falls back to paginated Supabase + JS aggregation
|
|
36
|
+
|
|
37
|
+
### Criteria formats
|
|
38
|
+
|
|
39
|
+
Three formats supported (CriteriaParser normalizes all to V2 groups via `coerceCriteriaToGroups`):
|
|
40
|
+
- `groups[]` — V2 preferred. Rules have `kind`, `eventName`, `field`, `op`, `frequency`, `attributes`, `time`, `negate`, `interest`, `filters[]`
|
|
41
|
+
- `filters[]` — V1 legacy. Special: `field='event'` becomes event rule; `field='custom_field'` uses `customFieldKey`
|
|
42
|
+
- `conditions[]` — normalized legacy
|
|
43
|
+
|
|
44
|
+
Live audience types: `live-actions`, `live-page-visit`, `live-referrer`, `live-page-count`. Everything else is `static`.
|
|
45
|
+
|
|
46
|
+
### Database backends
|
|
47
|
+
|
|
48
|
+
- **Supabase (PostgreSQL)**: contacts, properties (JSONB), project settings. Always required.
|
|
49
|
+
- **ClickHouse** (optional): event queries. Replaces N paginated Supabase queries with single aggregation queries. Enabled via `clickhouseClient` in `AudienceBuilderConfig`.
|
|
50
|
+
|
|
51
|
+
### Key tables
|
|
52
|
+
|
|
53
|
+
- `contacts` — `id`, `reachy_id`, `email`, `properties` (JSONB for custom fields), `is_subscribed`, `created_at`, `updated_at`
|
|
54
|
+
- `contact_events` — `contact_id`, `reachy_id`, `event_name`, `event_data` (JSON), `event_timestamp`, keyed by `organization_id + project_id + event_name`. Also has denormalized columns: `current_url`, `domain`, `path`, `referrer`, `page_title`, `utm_*`, `session_id`, `session_is_new`
|
|
55
|
+
- `projects` — `settings.timezone` (IANA timezone string)
|
|
56
|
+
|
|
57
|
+
## V2AudienceEngine internals
|
|
58
|
+
|
|
59
|
+
### Identity resolution (3-tier fallback)
|
|
60
|
+
|
|
61
|
+
Event rows are resolved to contact UUIDs in this order:
|
|
62
|
+
1. `row.reachy_id` → lookup in `reachyIdToContactId` map
|
|
63
|
+
2. `row.contact_id` → validate against `allContactIds` set
|
|
64
|
+
3. Email from `event_data` (checks: `email`, `user_email`, `userEmail`, `contact_email`, `contactEmail`) → lookup in `emailToContactId`
|
|
65
|
+
|
|
66
|
+
Identity maps are lazy-loaded: only when criteria has event rules or negate rules.
|
|
67
|
+
|
|
68
|
+
### Property rules — JSONB patterns
|
|
69
|
+
|
|
70
|
+
Known columns (`email`, `first_name`, `last_name`, `phone`, `is_subscribed`, `created_at`, `updated_at`, `name`) query directly. Unknown fields use `properties->>{field}`.
|
|
71
|
+
|
|
72
|
+
Three special handling paths for JSONB fields:
|
|
73
|
+
- **Numeric JSONB** (`shouldNumericJsonb`): When operator is `>`, `>=`, `<`, `<=`, `between` — fetches `id, properties`, then compares in JS (Supabase JSONB numeric comparison is unreliable)
|
|
74
|
+
- **Negation JSONB** (`shouldManualJsonbNegation`): `not_equals`/`not_contains` on JSONB — fetches all, filters in JS (handles null semantics correctly)
|
|
75
|
+
- **is_not_empty on JSONB**: Uses `filter(propertyObj, 'cs', '{"keyName":')` to check key existence in JSON object
|
|
76
|
+
|
|
77
|
+
### Event rules — evaluation paths
|
|
78
|
+
|
|
79
|
+
ClickHouse executor has 4 optimized paths:
|
|
80
|
+
1. **First Time**: `GROUP BY contact_id HAVING min(event_timestamp) >= window_start`
|
|
81
|
+
2. **Last Time**: `GROUP BY contact_id HAVING max(event_timestamp) <= window_end`
|
|
82
|
+
3. **Pure Frequency**: `GROUP BY contact_id` with `count()`/`sum()`/`avg()` + `HAVING`
|
|
83
|
+
4. **Fetch & Process**: Fetch rows, apply in-memory filters (time_of_day, day_of_week, day_of_month, event_property, interest)
|
|
84
|
+
|
|
85
|
+
Supabase fallback: paginated `fetchAll()` + JS aggregation. First/last time uses chunked N+1 pattern (500 IDs per chunk, separate queries for `contact_id` and `reachy_id`).
|
|
86
|
+
|
|
87
|
+
### Live presets
|
|
88
|
+
|
|
89
|
+
- `live-page-visit`: Filters on `path`/`current_url` ILIKE + `domain` ILIKE
|
|
90
|
+
- `live-referrer`: `session_is_new=true` + referrer/UTM ILIKE
|
|
91
|
+
- `live-page-count`: In-memory count threshold
|
|
92
|
+
|
|
93
|
+
### Interest feature
|
|
94
|
+
|
|
95
|
+
- **predominantly**: Contact included if matching value count >= any other single value count
|
|
96
|
+
- **at_least X%**: Contact included if matching_count / total >= threshold
|
|
97
|
+
|
|
98
|
+
### Group evaluation strategy
|
|
99
|
+
|
|
100
|
+
- **OR groups**: All rules run in parallel (`Promise.all`), results unioned
|
|
101
|
+
- **AND/NOT groups**: Sequential with early exit on empty set
|
|
102
|
+
- **Between groups**: If all combine with OR, run in parallel; otherwise sequential with early exit
|
|
103
|
+
- Single-contact evaluation (`matchesContact`) also has early exits: AND+false→false, OR+true→true
|
|
104
|
+
|
|
105
|
+
## Performance safeguards
|
|
106
|
+
|
|
107
|
+
| Context | Max rows | Location |
|
|
108
|
+
|---------|----------|----------|
|
|
109
|
+
| Supabase contacts fetch | 500,000 | V2AudienceEngine `fetchAll` default |
|
|
110
|
+
| Supabase event queries | 200,000 | V2AudienceEngine `MAX_EVENT_ROWS` |
|
|
111
|
+
| ClickHouse fetch queries | 200,000 | ClickHouseEventQueryExecutor `MAX_FETCH_ROWS` |
|
|
112
|
+
| first/last_time boundary | 50,000 per chunk | V2AudienceEngine offset guard |
|
|
113
|
+
|
|
114
|
+
- **Timezone cache**: Static `_tzCache` with 5-min TTL, keyed by `orgId:projectId`
|
|
115
|
+
- **Lazy contact loading**: Identity maps only loaded when needed (event rules or negate)
|
|
116
|
+
- **Minimal SELECT**: Event queries select only needed fields (`contact_id, reachy_id` base; add `event_data`/`event_timestamp` only when required)
|
|
117
|
+
- **Set operations optimized**: `intersect` iterates smaller set; no intermediate array allocations
|
|
118
|
+
|
|
119
|
+
## Security
|
|
120
|
+
|
|
121
|
+
- **ClickHouse**: All user values via `query_params` (`{param:Type}` syntax). Field expressions validated with `^[a-zA-Z0-9_]+$` allowlist.
|
|
122
|
+
- **Supabase**: Uses PostgREST query builder (parameterized by default).
|
|
123
|
+
|
|
124
|
+
## RFM Engine
|
|
125
|
+
|
|
126
|
+
`RfmEngine` computes Recency-Frequency scores (1-5 each) using percentile cuts (20th/40th/60th/80th). 10 segments: Champions, Loyal Users, Potential Loyalists, New Users, Promising, Needing Attention, About to Sleep, Cannot Lose Them, At Risk, Hibernating.
|
|
127
|
+
|
|
128
|
+
`RfmSegmentBuilder` converts RFM thresholds into executable audience criteria (groups format with event rules + frequency filters).
|
|
129
|
+
|
|
130
|
+
## Field mapping reference
|
|
131
|
+
|
|
132
|
+
`mapAudienceFieldToContactField`: `name`→`first_name`. All other known fields map to themselves. Unknown fields fall through to `properties->>{field}`.
|
|
133
|
+
|
|
134
|
+
Date normalization (`normalizeDateBoundary`): Accepts `YYYY-MM-DD`, `DD/MM/YYYY`, ISO timestamps. Start boundary → `00:00:00Z`. End boundary → start of next day (exclusive `.lt()`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceModule.d.ts","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAuBhB,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAwB;gBAElC,MAAM,GAAE,qBAA0B;
|
|
1
|
+
{"version":3,"file":"AudienceModule.d.ts","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAuBhB,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAwB;gBAElC,MAAM,GAAE,qBAA0B;IA4B9C,eAAe,CAAC,YAAY,EAAE;QAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAA;QACvB,kBAAkB,CAAC,EAAE,GAAG,CAAA;QACxB,gBAAgB,CAAC,EAAE,GAAG,CAAA;KACvB;IAoBK,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IAc7B,eAAe,CACnB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC;IAQZ,aAAa,CACjB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAiBjB,cAAc,CAClB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAgCb,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;IA8BvC,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM;;;;IAmCb,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAUrE,cAAc,CAAC,EAAE,EAAE,MAAM;IAc/B,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAiCjD,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,UAAU,GAAG,UAAuB;IAkBxC,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAqBhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;;;;IAQpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,QAAQ,GAAG,MAAM;YAYzD,gBAAgB;CA6B/B"}
|
package/dist/AudienceModule.js
CHANGED
|
@@ -10,6 +10,7 @@ class AudienceModule {
|
|
|
10
10
|
if (config.supabaseClient) {
|
|
11
11
|
const repo = new SupabaseContactRepository_1.SupabaseContactRepository({
|
|
12
12
|
supabaseClient: config.supabaseClient,
|
|
13
|
+
clickhouseClient: config.clickhouseClient,
|
|
13
14
|
debug: !!config.enableDebugLogs,
|
|
14
15
|
logger: console
|
|
15
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceModule.js","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AudienceModule.js","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type RfmThresholdRowLike = {
|
|
2
|
+
kind: 'r' | 'f' | string;
|
|
3
|
+
score: number;
|
|
4
|
+
min_value: number;
|
|
5
|
+
max_value: number;
|
|
6
|
+
};
|
|
7
|
+
export type RfmRecencyDefinition = {
|
|
8
|
+
within_days: number;
|
|
9
|
+
exclude_within_days?: number | null;
|
|
10
|
+
};
|
|
11
|
+
export type RfmFrequencyDefinition = {
|
|
12
|
+
op: string;
|
|
13
|
+
value: number;
|
|
14
|
+
value2?: number | null;
|
|
15
|
+
};
|
|
16
|
+
export type RfmSegmentDefinition = {
|
|
17
|
+
segment_key: string;
|
|
18
|
+
segment_name: string;
|
|
19
|
+
window_days: number;
|
|
20
|
+
recency: RfmRecencyDefinition;
|
|
21
|
+
frequency: RfmFrequencyDefinition;
|
|
22
|
+
criteria: any;
|
|
23
|
+
};
|
|
24
|
+
type ScoreRange = {
|
|
25
|
+
minScore: number;
|
|
26
|
+
maxScore: number;
|
|
27
|
+
};
|
|
28
|
+
export declare class RfmSegmentBuilder {
|
|
29
|
+
static getSegmentScoreRanges(segmentKey: string): {
|
|
30
|
+
r: ScoreRange;
|
|
31
|
+
f: ScoreRange;
|
|
32
|
+
} | null;
|
|
33
|
+
static getSegmentName(segmentKey: string): string;
|
|
34
|
+
static clampInt(n: number, min: number, max: number): number;
|
|
35
|
+
static buildDefinition(params: {
|
|
36
|
+
rfEventName: string;
|
|
37
|
+
windowDays: number;
|
|
38
|
+
segmentKey: string;
|
|
39
|
+
thresholds: RfmThresholdRowLike[];
|
|
40
|
+
filterCriteria?: any | null;
|
|
41
|
+
}): RfmSegmentDefinition;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=RfmSegmentBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RfmSegmentBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/RfmSegmentBuilder.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,oBAAoB,CAAA;IAC7B,SAAS,EAAE,sBAAsB,CAAA;IACjC,QAAQ,EAAE,GAAG,CAAA;CACd,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAExD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,UAAU,CAAC;QAAC,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IA4BzF,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAgBjD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAK5D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,mBAAmB,EAAE,CAAA;QACjC,cAAc,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;KAC5B,GAAG,oBAAoB;CAgMzB"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RfmSegmentBuilder = void 0;
|
|
4
|
+
class RfmSegmentBuilder {
|
|
5
|
+
static getSegmentScoreRanges(segmentKey) {
|
|
6
|
+
const k = String(segmentKey || '').trim();
|
|
7
|
+
switch (k) {
|
|
8
|
+
case 'champions':
|
|
9
|
+
return { r: { minScore: 4, maxScore: 5 }, f: { minScore: 4, maxScore: 5 } };
|
|
10
|
+
case 'loyal_users':
|
|
11
|
+
return { r: { minScore: 3, maxScore: 3 }, f: { minScore: 4, maxScore: 5 } };
|
|
12
|
+
case 'potential_loyalists':
|
|
13
|
+
return { r: { minScore: 4, maxScore: 5 }, f: { minScore: 2, maxScore: 3 } };
|
|
14
|
+
case 'new_users':
|
|
15
|
+
return { r: { minScore: 5, maxScore: 5 }, f: { minScore: 1, maxScore: 1 } };
|
|
16
|
+
case 'promising':
|
|
17
|
+
return { r: { minScore: 4, maxScore: 4 }, f: { minScore: 1, maxScore: 1 } };
|
|
18
|
+
case 'needing_attention':
|
|
19
|
+
return { r: { minScore: 3, maxScore: 3 }, f: { minScore: 3, maxScore: 3 } };
|
|
20
|
+
case 'about_to_sleep':
|
|
21
|
+
return { r: { minScore: 3, maxScore: 3 }, f: { minScore: 1, maxScore: 2 } };
|
|
22
|
+
case 'cannot_lose_them':
|
|
23
|
+
return { r: { minScore: 1, maxScore: 2 }, f: { minScore: 5, maxScore: 5 } };
|
|
24
|
+
case 'at_risk':
|
|
25
|
+
return { r: { minScore: 1, maxScore: 2 }, f: { minScore: 3, maxScore: 4 } };
|
|
26
|
+
case 'hibernating':
|
|
27
|
+
return { r: { minScore: 1, maxScore: 2 }, f: { minScore: 1, maxScore: 2 } };
|
|
28
|
+
default:
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
static getSegmentName(segmentKey) {
|
|
33
|
+
const map = {
|
|
34
|
+
champions: 'Champions',
|
|
35
|
+
loyal_users: 'Loyal Users',
|
|
36
|
+
potential_loyalists: 'Potential Loyalists',
|
|
37
|
+
new_users: 'New Users',
|
|
38
|
+
promising: 'Promising',
|
|
39
|
+
needing_attention: 'Needing Attention',
|
|
40
|
+
about_to_sleep: 'About to Sleep',
|
|
41
|
+
at_risk: 'At Risk',
|
|
42
|
+
cannot_lose_them: 'Cannot Lose Them',
|
|
43
|
+
hibernating: 'Hibernating',
|
|
44
|
+
};
|
|
45
|
+
return map[String(segmentKey || '').trim()] || String(segmentKey || '').trim() || 'Segment';
|
|
46
|
+
}
|
|
47
|
+
static clampInt(n, min, max) {
|
|
48
|
+
const x = Number.isFinite(n) ? Math.trunc(n) : min;
|
|
49
|
+
return Math.max(min, Math.min(max, x));
|
|
50
|
+
}
|
|
51
|
+
static buildDefinition(params) {
|
|
52
|
+
const { rfEventName, windowDays, segmentKey, thresholds, filterCriteria } = params;
|
|
53
|
+
const ranges = this.getSegmentScoreRanges(segmentKey);
|
|
54
|
+
if (!ranges)
|
|
55
|
+
throw new Error('segment_key inválido');
|
|
56
|
+
const rMaxDays = new Map();
|
|
57
|
+
const fMinCount = new Map();
|
|
58
|
+
const fMaxCount = new Map();
|
|
59
|
+
for (const row of thresholds || []) {
|
|
60
|
+
const score = Number(row.score);
|
|
61
|
+
if (!Number.isFinite(score))
|
|
62
|
+
continue;
|
|
63
|
+
if (row.kind === 'r') {
|
|
64
|
+
const maxV = Number(row.max_value);
|
|
65
|
+
if (Number.isFinite(maxV))
|
|
66
|
+
rMaxDays.set(score, Math.max(0, Math.trunc(maxV)));
|
|
67
|
+
}
|
|
68
|
+
else if (row.kind === 'f') {
|
|
69
|
+
const minV = Number(row.min_value);
|
|
70
|
+
const maxV = Number(row.max_value);
|
|
71
|
+
if (Number.isFinite(minV))
|
|
72
|
+
fMinCount.set(score, Math.max(0, Math.trunc(minV)));
|
|
73
|
+
if (Number.isFinite(maxV))
|
|
74
|
+
fMaxCount.set(score, Math.max(0, Math.trunc(maxV)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const rMin = ranges.r.minScore;
|
|
78
|
+
const rMax = ranges.r.maxScore;
|
|
79
|
+
const recencyUpperRaw = (() => {
|
|
80
|
+
if (rMin <= 1)
|
|
81
|
+
return windowDays;
|
|
82
|
+
for (let s = rMin; s <= rMax; s++) {
|
|
83
|
+
const v = rMaxDays.get(s);
|
|
84
|
+
if (v != null)
|
|
85
|
+
return v;
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`Sem thresholds para recency score ${rMin}..${rMax}`);
|
|
88
|
+
})();
|
|
89
|
+
const recencyUpper = this.clampInt(recencyUpperRaw, 1, Math.max(1, windowDays));
|
|
90
|
+
const recencyLowerRaw = (() => {
|
|
91
|
+
if (rMax >= 5)
|
|
92
|
+
return null;
|
|
93
|
+
for (let s = rMax + 1; s <= 5; s++) {
|
|
94
|
+
const v = rMaxDays.get(s);
|
|
95
|
+
if (v != null)
|
|
96
|
+
return v;
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
})();
|
|
100
|
+
const recencyLower = recencyLowerRaw == null ? null : this.clampInt(recencyLowerRaw, 1, Math.max(1, windowDays));
|
|
101
|
+
const fMin = ranges.f.minScore;
|
|
102
|
+
const fMax = ranges.f.maxScore;
|
|
103
|
+
let hasAnyFreqThreshold = false;
|
|
104
|
+
for (let s = fMin; s <= fMax; s++) {
|
|
105
|
+
if (fMinCount.has(s) || fMaxCount.has(s)) {
|
|
106
|
+
hasAnyFreqThreshold = true;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!hasAnyFreqThreshold) {
|
|
111
|
+
throw new Error(`Sem thresholds para frequency score ${fMin}..${fMax}`);
|
|
112
|
+
}
|
|
113
|
+
const collectMin = () => {
|
|
114
|
+
let min = Number.POSITIVE_INFINITY;
|
|
115
|
+
for (let s = fMin; s <= fMax; s++) {
|
|
116
|
+
const v = fMinCount.get(s) ?? fMaxCount.get(s);
|
|
117
|
+
if (v == null)
|
|
118
|
+
continue;
|
|
119
|
+
if (v < min)
|
|
120
|
+
min = v;
|
|
121
|
+
}
|
|
122
|
+
if (!Number.isFinite(min)) {
|
|
123
|
+
throw new Error(`Sem thresholds mínimos para frequency score ${fMin}..${fMax}`);
|
|
124
|
+
}
|
|
125
|
+
return min;
|
|
126
|
+
};
|
|
127
|
+
const collectMax = () => {
|
|
128
|
+
let max = 0;
|
|
129
|
+
for (let s = fMin; s <= fMax; s++) {
|
|
130
|
+
const v = fMaxCount.get(s) ?? fMinCount.get(s);
|
|
131
|
+
if (v == null)
|
|
132
|
+
continue;
|
|
133
|
+
if (v > max)
|
|
134
|
+
max = v;
|
|
135
|
+
}
|
|
136
|
+
if (!(max > 0)) {
|
|
137
|
+
throw new Error(`Sem thresholds máximos para frequency score ${fMin}..${fMax}`);
|
|
138
|
+
}
|
|
139
|
+
return max;
|
|
140
|
+
};
|
|
141
|
+
const minCount = Math.max(1, Math.trunc(collectMin()));
|
|
142
|
+
const maxCount = Math.max(minCount, Math.trunc(collectMax()));
|
|
143
|
+
const frequency = (() => {
|
|
144
|
+
if (fMax === 5 && fMin >= 4)
|
|
145
|
+
return { op: '>=', value: minCount, value2: null };
|
|
146
|
+
if (fMin === 5 && fMax === 5)
|
|
147
|
+
return { op: '>=', value: minCount, value2: null };
|
|
148
|
+
if (fMin === 1 && fMax <= 2)
|
|
149
|
+
return { op: '<=', value: maxCount, value2: null };
|
|
150
|
+
if (fMin === 1 && fMax === 1)
|
|
151
|
+
return { op: '<=', value: maxCount, value2: null };
|
|
152
|
+
return { op: 'between', value: minCount, value2: maxCount };
|
|
153
|
+
})();
|
|
154
|
+
const rfmGroup = {
|
|
155
|
+
operator: 'AND',
|
|
156
|
+
rules: [
|
|
157
|
+
{
|
|
158
|
+
kind: 'event',
|
|
159
|
+
eventName: rfEventName,
|
|
160
|
+
time: { unit: 'days', value: windowDays },
|
|
161
|
+
frequency: {
|
|
162
|
+
type: 'count',
|
|
163
|
+
op: frequency.op,
|
|
164
|
+
value: frequency.value,
|
|
165
|
+
...(frequency.op === 'between' ? { value2: frequency.value2 } : {}),
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
kind: 'event',
|
|
170
|
+
eventName: rfEventName,
|
|
171
|
+
time: { unit: 'days', value: recencyUpper },
|
|
172
|
+
},
|
|
173
|
+
...(recencyLower
|
|
174
|
+
? [
|
|
175
|
+
{
|
|
176
|
+
kind: 'event',
|
|
177
|
+
eventName: rfEventName,
|
|
178
|
+
time: { unit: 'days', value: recencyLower },
|
|
179
|
+
negate: true,
|
|
180
|
+
},
|
|
181
|
+
]
|
|
182
|
+
: []),
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
const filterGroupsRaw = filterCriteria &&
|
|
186
|
+
typeof filterCriteria === 'object' &&
|
|
187
|
+
Array.isArray(filterCriteria.groups)
|
|
188
|
+
? filterCriteria.groups
|
|
189
|
+
: [];
|
|
190
|
+
const mergedGroups = (() => {
|
|
191
|
+
const base = Array.isArray(filterGroupsRaw) ? [...filterGroupsRaw] : [];
|
|
192
|
+
if (base.length === 0)
|
|
193
|
+
return [rfmGroup];
|
|
194
|
+
return [...base, { ...rfmGroup, combineOperator: 'AND' }];
|
|
195
|
+
})();
|
|
196
|
+
const baseConfig = filterCriteria &&
|
|
197
|
+
typeof filterCriteria === 'object' &&
|
|
198
|
+
filterCriteria.config &&
|
|
199
|
+
typeof filterCriteria.config === 'object'
|
|
200
|
+
? filterCriteria.config
|
|
201
|
+
: {};
|
|
202
|
+
const criteria = {
|
|
203
|
+
type: 'past-behavior',
|
|
204
|
+
groups: mergedGroups,
|
|
205
|
+
config: {
|
|
206
|
+
...baseConfig,
|
|
207
|
+
rfm: {
|
|
208
|
+
segment_key: segmentKey,
|
|
209
|
+
rf_event_name: rfEventName,
|
|
210
|
+
window_days: windowDays,
|
|
211
|
+
recency: { within_days: recencyUpper, exclude_within_days: recencyLower },
|
|
212
|
+
frequency: { ...frequency },
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
...(filterCriteria &&
|
|
216
|
+
typeof filterCriteria === 'object' &&
|
|
217
|
+
filterCriteria.live_options
|
|
218
|
+
? { live_options: filterCriteria.live_options }
|
|
219
|
+
: {}),
|
|
220
|
+
};
|
|
221
|
+
return {
|
|
222
|
+
segment_key: segmentKey,
|
|
223
|
+
segment_name: this.getSegmentName(segmentKey),
|
|
224
|
+
window_days: windowDays,
|
|
225
|
+
recency: { within_days: recencyUpper, exclude_within_days: recencyLower },
|
|
226
|
+
frequency: { op: frequency.op, value: frequency.value, value2: frequency.value2 ?? null },
|
|
227
|
+
criteria,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.RfmSegmentBuilder = RfmSegmentBuilder;
|
|
232
|
+
//# sourceMappingURL=RfmSegmentBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RfmSegmentBuilder.js","sourceRoot":"","sources":["../../src/builders/RfmSegmentBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type RfmEventRow = {
|
|
2
|
+
contact_id?: string | null;
|
|
3
|
+
reachy_id?: string | null;
|
|
4
|
+
event_name?: string | null;
|
|
5
|
+
event_timestamp: string | Date;
|
|
6
|
+
event_data?: any;
|
|
7
|
+
};
|
|
8
|
+
export type RfmContactRow = {
|
|
9
|
+
id: string;
|
|
10
|
+
reachy_id?: string | null;
|
|
11
|
+
email?: string | null;
|
|
12
|
+
phone?: string | null;
|
|
13
|
+
is_subscribed?: boolean | null;
|
|
14
|
+
communication_preferences?: any;
|
|
15
|
+
};
|
|
16
|
+
export type RfmAggregateRow = {
|
|
17
|
+
contact_id: string;
|
|
18
|
+
last_ts: Date;
|
|
19
|
+
event_count: number;
|
|
20
|
+
};
|
|
21
|
+
export type RfmScoredContact = RfmAggregateRow & {
|
|
22
|
+
recency_days: number;
|
|
23
|
+
r_score: 1 | 2 | 3 | 4 | 5;
|
|
24
|
+
f_score: 1 | 2 | 3 | 4 | 5;
|
|
25
|
+
segment_key: string;
|
|
26
|
+
email_ok: 0 | 1;
|
|
27
|
+
sms_ok: 0 | 1;
|
|
28
|
+
};
|
|
29
|
+
export type RfmPreviewSegment = {
|
|
30
|
+
segment_key: string;
|
|
31
|
+
segment_name: string;
|
|
32
|
+
users: number;
|
|
33
|
+
percent: number;
|
|
34
|
+
avm: number;
|
|
35
|
+
email_reachability: number;
|
|
36
|
+
sms_reachability: number;
|
|
37
|
+
};
|
|
38
|
+
export type RfmThresholdRow = {
|
|
39
|
+
kind: 'r' | 'f';
|
|
40
|
+
score: 1 | 2 | 3 | 4 | 5;
|
|
41
|
+
min_value: number;
|
|
42
|
+
max_value: number;
|
|
43
|
+
};
|
|
44
|
+
export type RfmComputeOptions = {
|
|
45
|
+
from: string | Date;
|
|
46
|
+
to: string | Date;
|
|
47
|
+
rfEventName: string;
|
|
48
|
+
filterContactIds?: Set<string> | string[] | null;
|
|
49
|
+
};
|
|
50
|
+
type PercentileCuts = [number, number, number, number];
|
|
51
|
+
export declare class RfmEngine {
|
|
52
|
+
static aggregateFromEvents(contacts: RfmContactRow[], events: RfmEventRow[], opts: RfmComputeOptions): RfmAggregateRow[];
|
|
53
|
+
static scoreAggregates(contacts: RfmContactRow[], aggregates: RfmAggregateRow[], opts: Pick<RfmComputeOptions, 'to'>): {
|
|
54
|
+
scored: RfmScoredContact[];
|
|
55
|
+
r_days_cuts: PercentileCuts;
|
|
56
|
+
f_count_cuts: PercentileCuts;
|
|
57
|
+
};
|
|
58
|
+
static thresholdsFromScored(scored: RfmScoredContact[]): RfmThresholdRow[];
|
|
59
|
+
static previewFromScored(scored: RfmScoredContact[]): RfmPreviewSegment[];
|
|
60
|
+
static computeFromEvents(contacts: RfmContactRow[], events: RfmEventRow[], opts: RfmComputeOptions): {
|
|
61
|
+
segments: RfmPreviewSegment[];
|
|
62
|
+
thresholds: RfmThresholdRow[];
|
|
63
|
+
scored: RfmScoredContact[];
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=RfmEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RfmEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RfmEngine.ts"],"names":[],"mappings":"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"}
|