umami-compass 0.2.0 → 0.3.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,eAAO,MAAM,UAAU,wDAIE,CAAC;AAC1B,eAAO,MAAM,UAAU,iDAEsD,CAAC;AAC9E,eAAO,MAAM,cAAc,2BAYV,CAAC;AAClB,eAAO,MAAM,UAAU;;;;;;GAAgE,CAAC;AACxF,eAAO,MAAM,UAAU,2BAAiD,CAAC;AACzE,eAAO,MAAM,cAAc,2BAA+C,CAAC;AAE3E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4Bf,CAAC;AAEZ,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1F,KAAK,CAUP;AAED,QAAA,MAAM,iBAAiB;aACrB,MAAM,EAAE,KAAM;aACd,IAAI,EAAE,OAAS;aACf,GAAG,EAAE,QAAU;aACf,KAAK,EAAE,UAAa;aACpB,IAAI,EAAE,WAAc;CACZ,CAAC;AAEX,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,OAAO,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,KAAK,CAeP;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,WAAW,SAAI,GACd,MAAM,OAAO,iBAAiB,CAUhC;AAUD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;iBAcb,CAAC;AAEjB,eAAO,MAAM,sBAAsB;IACjC,IAAI;;;;;;;;;;;;;;;CACL,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;CAGxB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;CAG9B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAG7B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;iBAKhB,CAAC;AAEjB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;CAGjC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;iBAOnB,CAAC;AAEjB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;CAGpC,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAMvF"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"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"}
@@ -26,38 +26,222 @@ export const timezoneSchema = z
26
26
  export const unitSchema = z.enum(["minute", "hour", "day", "month", "year"]).optional();
27
27
  export const pageSchema = z.number().int().min(1).max(10_000).default(1);
28
28
  export const pageSizeSchema = z.number().int().min(1).max(100).default(20);
29
- export const filtersSchema = z
29
+ export const filterOperatorSchema = z.enum([
30
+ "equals",
31
+ "not_equals",
32
+ "contains",
33
+ "not_contains",
34
+ "regex",
35
+ "not_regex",
36
+ "is_empty",
37
+ "is_not_empty",
38
+ ]);
39
+ const MAX_FILTER_CONDITIONS_PER_FIELD = 10;
40
+ const MAX_FILTER_VALUES_PER_CONDITION = 20;
41
+ const MAX_TOTAL_FILTER_CONDITIONS = 30;
42
+ const MAX_TOTAL_FILTER_VALUES = 100;
43
+ const MAX_SERIALIZED_FILTER_BYTES = 16_384;
44
+ const filterConditionSchema = (maximum) => z
30
45
  .object({
31
- browser: z.string().max(200).optional(),
32
- city: z.string().max(200).optional(),
46
+ operator: filterOperatorSchema,
47
+ value: z
48
+ .union([
49
+ z.string().max(maximum),
50
+ z.array(z.string().max(maximum)).min(1).max(MAX_FILTER_VALUES_PER_CONDITION),
51
+ ])
52
+ .optional(),
53
+ })
54
+ .strict()
55
+ .superRefine(({ operator, value }, context) => {
56
+ const emptyOperator = operator === "is_empty" || operator === "is_not_empty";
57
+ if (emptyOperator && value !== undefined) {
58
+ context.addIssue({
59
+ code: "custom",
60
+ message: `${operator} does not accept a value`,
61
+ path: ["value"],
62
+ });
63
+ }
64
+ else if (!emptyOperator && value === undefined) {
65
+ context.addIssue({
66
+ code: "custom",
67
+ message: `${operator} requires a value`,
68
+ path: ["value"],
69
+ });
70
+ }
71
+ if (Array.isArray(value) && !["equals", "not_equals"].includes(operator)) {
72
+ context.addIssue({
73
+ code: "custom",
74
+ message: `${operator} accepts one string value`,
75
+ path: ["value"],
76
+ });
77
+ }
78
+ if ((operator === "equals" || operator === "not_equals") &&
79
+ (Array.isArray(value) ? value : value === undefined ? [] : [value]).some((item) => item.includes(","))) {
80
+ context.addIssue({
81
+ code: "custom",
82
+ message: "equals values cannot contain commas; pass separate values in the array",
83
+ path: ["value"],
84
+ });
85
+ }
86
+ });
87
+ const textFilterSchema = (maximum) => z.union([
88
+ z.string().max(maximum),
89
+ filterConditionSchema(maximum),
90
+ z.array(filterConditionSchema(maximum)).min(1).max(MAX_FILTER_CONDITIONS_PER_FIELD),
91
+ ]);
92
+ const filterFields = {
93
+ browser: textFilterSchema(200).optional(),
94
+ city: textFilterSchema(200).optional(),
33
95
  cohort: uuidSchema.optional(),
34
- country: z.string().max(10).optional(),
35
- device: z.string().max(200).optional(),
36
- distinctId: z.string().max(500).optional(),
96
+ country: textFilterSchema(10).optional(),
97
+ device: textFilterSchema(200).optional(),
98
+ distinctId: textFilterSchema(500).optional(),
37
99
  eventType: z.number().int().positive().optional(),
38
- event: z.string().max(500).optional(),
100
+ event: textFilterSchema(500).optional(),
39
101
  excludeBounce: z.boolean().optional(),
40
- hostname: z.string().max(500).optional(),
41
- language: z.string().max(100).optional(),
42
- os: z.string().max(200).optional(),
102
+ hostname: textFilterSchema(500).optional(),
103
+ language: textFilterSchema(100).optional(),
104
+ os: textFilterSchema(200).optional(),
43
105
  match: z.enum(["all", "any"]).optional(),
44
- path: z.string().max(2_000).optional(),
45
- query: z.string().max(2_000).optional(),
46
- referrer: z.string().max(2_000).optional(),
47
- region: z.string().max(200).optional(),
106
+ path: textFilterSchema(2_000).optional(),
107
+ query: textFilterSchema(2_000).optional(),
108
+ referrer: textFilterSchema(2_000).optional(),
109
+ region: textFilterSchema(200).optional(),
48
110
  segment: uuidSchema.optional(),
49
- tag: z.string().max(500).optional(),
50
- title: z.string().max(1_000).optional(),
51
- utmCampaign: z.string().max(500).optional(),
52
- utmContent: z.string().max(500).optional(),
53
- utmMedium: z.string().max(500).optional(),
54
- utmSource: z.string().max(500).optional(),
55
- utmTerm: z.string().max(500).optional(),
56
- })
57
- .strict();
111
+ tag: textFilterSchema(500).optional(),
112
+ title: textFilterSchema(1_000).optional(),
113
+ utmCampaign: textFilterSchema(500).optional(),
114
+ utmContent: textFilterSchema(500).optional(),
115
+ utmMedium: textFilterSchema(500).optional(),
116
+ utmSource: textFilterSchema(500).optional(),
117
+ utmTerm: textFilterSchema(500).optional(),
118
+ };
119
+ function validateFilterBudget(filters, context) {
120
+ let conditionCount = 0;
121
+ let valueCount = 0;
122
+ for (const value of Object.values(filters)) {
123
+ const conditions = Array.isArray(value) ? value : [value];
124
+ for (const condition of conditions) {
125
+ if (!isFilterCondition(condition))
126
+ continue;
127
+ conditionCount += 1;
128
+ valueCount += Array.isArray(condition.value) ? condition.value.length : 1;
129
+ }
130
+ }
131
+ if (conditionCount > MAX_TOTAL_FILTER_CONDITIONS) {
132
+ context.addIssue({
133
+ code: "custom",
134
+ message: `filters cannot contain more than ${MAX_TOTAL_FILTER_CONDITIONS} structured conditions`,
135
+ });
136
+ }
137
+ if (valueCount > MAX_TOTAL_FILTER_VALUES) {
138
+ context.addIssue({
139
+ code: "custom",
140
+ message: `filters cannot contain more than ${MAX_TOTAL_FILTER_VALUES} structured values`,
141
+ });
142
+ }
143
+ const params = new URLSearchParams();
144
+ for (const [name, value] of Object.entries(serializeFilters(filters))) {
145
+ if (value !== undefined)
146
+ params.append(name, String(value));
147
+ }
148
+ if (new TextEncoder().encode(params.toString()).length > MAX_SERIALIZED_FILTER_BYTES) {
149
+ context.addIssue({
150
+ code: "custom",
151
+ message: `serialized filters cannot exceed ${MAX_SERIALIZED_FILTER_BYTES} bytes`,
152
+ });
153
+ }
154
+ }
155
+ export const filtersSchema = z.object(filterFields).strict().superRefine(validateFilterBudget);
156
+ export const TRAFFIC_CHANNELS = [
157
+ "direct",
158
+ "paidAds",
159
+ "referral",
160
+ "affiliate",
161
+ "sms",
162
+ "llm",
163
+ "organicSearch",
164
+ "paidSearch",
165
+ "organicSocial",
166
+ "paidSocial",
167
+ "email",
168
+ "organicShopping",
169
+ "paidShopping",
170
+ "organicVideo",
171
+ "paidVideo",
172
+ ];
173
+ export const trafficChannelSchema = z.enum(TRAFFIC_CHANNELS);
174
+ export const segmentedFiltersSchema = z
175
+ .object({ ...filterFields, channel: trafficChannelSchema.optional() })
176
+ .strict()
177
+ .superRefine(validateFilterBudget);
178
+ export const trafficSegmentSchema = z.enum(["all", "human"]).default("all");
179
+ const UPSTREAM_OPERATORS = {
180
+ equals: "eq",
181
+ not_equals: "neq",
182
+ contains: "c",
183
+ not_contains: "dnc",
184
+ regex: "re",
185
+ not_regex: "nre",
186
+ is_empty: "eq",
187
+ is_not_empty: "neq",
188
+ };
189
+ function isFilterCondition(value) {
190
+ return (typeof value === "object" && value !== null && !Array.isArray(value) && "operator" in value);
191
+ }
192
+ function encodeFilterCondition(condition) {
193
+ const value = condition.operator === "is_empty" || condition.operator === "is_not_empty"
194
+ ? ""
195
+ : Array.isArray(condition.value)
196
+ ? condition.value.join(",")
197
+ : condition.value;
198
+ return `${UPSTREAM_OPERATORS[condition.operator]}.${value ?? ""}`;
199
+ }
200
+ export function serializeFilters(filters) {
201
+ const serialized = {};
202
+ for (const [name, value] of Object.entries(filters ?? {})) {
203
+ if (value === undefined)
204
+ continue;
205
+ const conditions = isFilterCondition(value)
206
+ ? [value]
207
+ : Array.isArray(value) && value.every(isFilterCondition)
208
+ ? value
209
+ : undefined;
210
+ if (!conditions) {
211
+ if (name === "referrer" && value === "") {
212
+ serialized.domain1 = "eq.";
213
+ continue;
214
+ }
215
+ serialized[name] = value;
216
+ continue;
217
+ }
218
+ // Umami's public `referrer` filter always removes internal/direct rows. Its
219
+ // equivalent `domain` column has neutral equality semantics, and a numeric
220
+ // suffix makes it survive the upstream route's dynamic-filter parser.
221
+ const upstreamName = name === "referrer" ? "domain" : name;
222
+ conditions.forEach((condition, index) => {
223
+ const suffix = name === "referrer" ? index + 1 : index;
224
+ const key = suffix === 0 ? upstreamName : `${upstreamName}${suffix}`;
225
+ serialized[key] = encodeFilterCondition(condition);
226
+ });
227
+ }
228
+ return serialized;
229
+ }
230
+ export function appendReferrerExclusions(filters, domains) {
231
+ const values = [...new Set(domains.map((domain) => domain.trim()).filter(Boolean))].filter((domain) => !domain.includes(","));
232
+ if (values.length === 0)
233
+ return filters;
234
+ if (filters.match === "any") {
235
+ throw new UmamiError("VALIDATION_ERROR", 'trafficSegment="human" cannot be combined with filters.match="any" because Umami cannot apply mandatory spam exclusions outside that OR group.');
236
+ }
237
+ let suffix = 1;
238
+ while (`domain${suffix}` in filters)
239
+ suffix += 1;
240
+ return { ...filters, [`domain${suffix}`]: `neq.${values.join(",")}` };
241
+ }
58
242
  export function rangeQuery(start, end, maxRangeDays, options = {}) {
59
243
  const range = parseTimeRange(start, end, maxRangeDays);
60
- const { excludeBounce, ...filters } = options.filters ?? {};
244
+ const { excludeBounce, ...filters } = options.serializedFilters ?? serializeFilters(options.filters);
61
245
  return {
62
246
  ...range,
63
247
  ...filters,
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { UmamiClient } from "../api/client.js";
2
+ import type { BreakdownField, Query } from "../api/types.js";
3
+ import { type TRAFFIC_CHANNELS } from "./schemas.js";
4
+ export type TrafficChannel = (typeof TRAFFIC_CHANNELS)[number];
5
+ export interface TrafficPeriod {
6
+ endAt: number;
7
+ startAt: number;
8
+ }
9
+ export interface ExpandedMetricRow {
10
+ bounces: number;
11
+ name: string;
12
+ pageviews: number;
13
+ totaltime: number;
14
+ visitors: number;
15
+ visits: number;
16
+ }
17
+ export declare function parseExpandedMetricRows(value: unknown): ExpandedMetricRow[];
18
+ export declare function fetchExpandedMetricRows(client: UmamiClient, input: {
19
+ excludedReferrers?: readonly string[];
20
+ filters?: Query;
21
+ maxRangeDays: number;
22
+ period: TrafficPeriod;
23
+ signal?: AbortSignal;
24
+ type: string;
25
+ websiteId: string;
26
+ }): Promise<ExpandedMetricRow[]>;
27
+ export interface SuspiciousReferrer extends ExpandedMetricRow {
28
+ averageVisitDurationSeconds: number;
29
+ bounceRatePercent: number;
30
+ confidence: "high" | "medium";
31
+ reasons: string[];
32
+ }
33
+ export declare function assessReferralSpam(client: UmamiClient, input: {
34
+ filters?: Query;
35
+ maxRangeDays: number;
36
+ period: TrafficPeriod;
37
+ signal?: AbortSignal;
38
+ websiteId: string;
39
+ }): Promise<{
40
+ suspiciousReferrers: SuspiciousReferrer[];
41
+ excludedReferrers: string[];
42
+ dataQuality: {
43
+ sourceRows: number;
44
+ sourceRowsTruncated: boolean;
45
+ heuristic: boolean;
46
+ thresholds: {
47
+ minimumVisits: number;
48
+ minimumBounceRatePercent: number;
49
+ maximumAverageVisitDurationSeconds: number;
50
+ };
51
+ };
52
+ }>;
53
+ export declare function selectChannelTotals(rows: readonly ExpandedMetricRow[], channel: TrafficChannel): ExpandedMetricRow;
54
+ export declare function appendDimensionEquality(filters: Query, field: string, value: string): Query | undefined;
55
+ export declare function runDerivedChannelBreakdown(client: UmamiClient, input: {
56
+ channel?: TrafficChannel;
57
+ excludedReferrers?: readonly string[];
58
+ fields: readonly (BreakdownField | "channel")[];
59
+ filters: Query;
60
+ limit: number;
61
+ maxRangeDays: number;
62
+ period: TrafficPeriod;
63
+ signal?: AbortSignal;
64
+ websiteId: string;
65
+ }): Promise<{
66
+ rows: {
67
+ bounces: number;
68
+ pageviews: number;
69
+ totaltime: number;
70
+ visitors: number;
71
+ visits: number;
72
+ channel?: string | undefined;
73
+ }[];
74
+ dataQuality: {
75
+ derivedChannelBreakdown: boolean;
76
+ upstreamCandidateRows: number;
77
+ sourceRowsTruncated: boolean;
78
+ omittedUnsupportedRows: number;
79
+ fanoutRequests: number;
80
+ };
81
+ }>;
82
+ //# sourceMappingURL=traffic-segmentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traffic-segmentation.d.ts","sourceRoot":"","sources":["../../src/mcp/traffic-segmentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAA0B,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAwC,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAwB3E;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;IACL,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmB9B;AAiDD,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,2BAA2B,EAAE,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;IACL,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;;;;;;;;;;;;;GAmDF;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAClC,OAAO,EAAE,cAAc,GACtB,iBAAiB,CAWnB;AASD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,KAAK,GAAG,SAAS,CASnB;AAaD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;IACL,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,MAAM,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,CAAC;IAChD,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;;iBArRQ,MAAM;mBAEJ,MAAM;mBACN,MAAM;kBACP,MAAM;gBACR,MAAM;;;;;;;;;;GAiWf"}
@@ -0,0 +1,264 @@
1
+ import { UmamiError } from "../api/errors.js";
2
+ import { appendReferrerExclusions, rangeQuery } from "./schemas.js";
3
+ const MAX_EXPANDED_ROWS = 100;
4
+ const MAX_CHANNEL_CANDIDATES = 50;
5
+ const MIN_SUSPICIOUS_VISITS = 3;
6
+ const MIN_SUSPICIOUS_BOUNCE_RATE = 0.9;
7
+ const MAX_SUSPICIOUS_AVERAGE_DURATION_SECONDS = 2;
8
+ async function mapConcurrent(values, concurrency, operation) {
9
+ const results = new Array(values.length);
10
+ let nextIndex = 0;
11
+ const workers = Array.from({ length: Math.min(concurrency, values.length) }, async () => {
12
+ while (nextIndex < values.length) {
13
+ const index = nextIndex;
14
+ nextIndex += 1;
15
+ results[index] = await operation(values[index]);
16
+ }
17
+ });
18
+ await Promise.all(workers);
19
+ return results;
20
+ }
21
+ function isRecord(value) {
22
+ return typeof value === "object" && value !== null && !Array.isArray(value);
23
+ }
24
+ function finiteNumber(value) {
25
+ if (typeof value === "number" && Number.isFinite(value))
26
+ return value;
27
+ if (typeof value !== "string" || value.trim() === "")
28
+ return undefined;
29
+ const parsed = Number(value);
30
+ return Number.isFinite(parsed) ? parsed : undefined;
31
+ }
32
+ export function parseExpandedMetricRows(value) {
33
+ if (!Array.isArray(value)) {
34
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid expanded metric data.");
35
+ }
36
+ return value.map((item) => {
37
+ if (!isRecord(item) || typeof item.name !== "string") {
38
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid expanded metric data.");
39
+ }
40
+ const pageviews = finiteNumber(item.pageviews);
41
+ const visitors = finiteNumber(item.visitors);
42
+ const visits = finiteNumber(item.visits);
43
+ const bounces = finiteNumber(item.bounces);
44
+ const totaltime = finiteNumber(item.totaltime);
45
+ if (pageviews === undefined ||
46
+ visitors === undefined ||
47
+ visits === undefined ||
48
+ bounces === undefined ||
49
+ totaltime === undefined) {
50
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid expanded metric data.");
51
+ }
52
+ return { name: item.name, pageviews, visitors, visits, bounces, totaltime };
53
+ });
54
+ }
55
+ export async function fetchExpandedMetricRows(client, input) {
56
+ const serializedFilters = appendReferrerExclusions(input.filters ?? {}, input.excludedReferrers ?? []);
57
+ return parseExpandedMetricRows(await client.get(`websites/${encodeURIComponent(input.websiteId)}/metrics/expanded`, {
58
+ ...rangeQuery(input.period.startAt, input.period.endAt, input.maxRangeDays, {
59
+ serializedFilters,
60
+ }),
61
+ type: input.type,
62
+ limit: MAX_EXPANDED_ROWS,
63
+ offset: 0,
64
+ }, input.signal));
65
+ }
66
+ function longestConsonantRun(value) {
67
+ let longest = 0;
68
+ let current = 0;
69
+ for (const character of value) {
70
+ if (/[a-z]/.test(character) && !/[aeiouy]/.test(character)) {
71
+ current += 1;
72
+ longest = Math.max(longest, current);
73
+ }
74
+ else {
75
+ current = 0;
76
+ }
77
+ }
78
+ return longest;
79
+ }
80
+ function shannonEntropy(value) {
81
+ const counts = new Map();
82
+ for (const character of value)
83
+ counts.set(character, (counts.get(character) ?? 0) + 1);
84
+ let entropy = 0;
85
+ for (const count of counts.values()) {
86
+ const probability = count / value.length;
87
+ entropy -= probability * Math.log2(probability);
88
+ }
89
+ return entropy;
90
+ }
91
+ function looksGeneratedDomain(domain) {
92
+ const hostname = domain
93
+ .trim()
94
+ .toLowerCase()
95
+ .replace(/^https?:\/\//, "")
96
+ .split(/[/?#]/, 1)[0]
97
+ ?.replace(/^www\./, "")
98
+ .replace(/:\d+$/, "");
99
+ const labels = hostname?.split(".").filter(Boolean) ?? [];
100
+ const label = (labels.length > 1 ? labels.slice(0, -1) : labels).sort((left, right) => right.length - left.length)[0];
101
+ if (!label)
102
+ return false;
103
+ const letters = label.replace(/[^a-z]/g, "");
104
+ if (letters.length < 12)
105
+ return false;
106
+ const vowels = [...letters].filter((character) => /[aeiouy]/.test(character)).length;
107
+ return (shannonEntropy(letters) >= 3.1 &&
108
+ (vowels / letters.length < 0.24 || longestConsonantRun(letters) >= 6));
109
+ }
110
+ export async function assessReferralSpam(client, input) {
111
+ const rows = await fetchExpandedMetricRows(client, {
112
+ ...input,
113
+ type: "referrer",
114
+ });
115
+ const suspiciousReferrers = rows.flatMap((row) => {
116
+ const bounceRate = row.visits === 0 ? 0 : row.bounces / row.visits;
117
+ const averageVisitDurationSeconds = row.visits === 0 ? 0 : row.totaltime / row.visits;
118
+ const generatedDomain = looksGeneratedDomain(row.name);
119
+ if (!generatedDomain ||
120
+ row.visits < MIN_SUSPICIOUS_VISITS ||
121
+ bounceRate < MIN_SUSPICIOUS_BOUNCE_RATE ||
122
+ averageVisitDurationSeconds > MAX_SUSPICIOUS_AVERAGE_DURATION_SECONDS) {
123
+ return [];
124
+ }
125
+ const reasons = [
126
+ "generated_domain_pattern",
127
+ "very_high_bounce_rate",
128
+ "near_zero_visit_duration",
129
+ ];
130
+ return [
131
+ {
132
+ ...row,
133
+ bounceRatePercent: Math.round(bounceRate * 10_000) / 100,
134
+ averageVisitDurationSeconds: Math.round(averageVisitDurationSeconds * 100) / 100,
135
+ confidence: row.visits >= 20 && bounceRate >= 0.95 && averageVisitDurationSeconds <= 1
136
+ ? "high"
137
+ : "medium",
138
+ reasons,
139
+ },
140
+ ];
141
+ });
142
+ return {
143
+ suspiciousReferrers,
144
+ excludedReferrers: suspiciousReferrers.map(({ name }) => name),
145
+ dataQuality: {
146
+ sourceRows: rows.length,
147
+ sourceRowsTruncated: rows.length >= MAX_EXPANDED_ROWS,
148
+ heuristic: true,
149
+ thresholds: {
150
+ minimumVisits: MIN_SUSPICIOUS_VISITS,
151
+ minimumBounceRatePercent: MIN_SUSPICIOUS_BOUNCE_RATE * 100,
152
+ maximumAverageVisitDurationSeconds: MAX_SUSPICIOUS_AVERAGE_DURATION_SECONDS,
153
+ },
154
+ },
155
+ };
156
+ }
157
+ export function selectChannelTotals(rows, channel) {
158
+ return (rows.find(({ name }) => name === channel) ?? {
159
+ name: channel,
160
+ pageviews: 0,
161
+ visitors: 0,
162
+ visits: 0,
163
+ bounces: 0,
164
+ totaltime: 0,
165
+ });
166
+ }
167
+ function nextFilterKey(filters, field) {
168
+ const upstreamField = field === "referrer" ? "domain" : field;
169
+ let suffix = field === "referrer" ? 1 : 0;
170
+ while ((suffix === 0 ? upstreamField : `${upstreamField}${suffix}`) in filters)
171
+ suffix += 1;
172
+ return suffix === 0 ? upstreamField : `${upstreamField}${suffix}`;
173
+ }
174
+ export function appendDimensionEquality(filters, field, value) {
175
+ if (value.includes(","))
176
+ return undefined;
177
+ if (filters.match === "any") {
178
+ throw new UmamiError("VALIDATION_ERROR", 'Derived channel cross-tabs cannot be combined with filters.match="any" because Umami cannot require candidate predicates outside that OR group.');
179
+ }
180
+ return { ...filters, [nextFilterKey(filters, field)]: `eq.${value}` };
181
+ }
182
+ function requireRowFields(row, fields) {
183
+ const result = {};
184
+ for (const field of fields) {
185
+ if (typeof row[field] !== "string") {
186
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid breakdown candidate data.");
187
+ }
188
+ result[field] = row[field];
189
+ }
190
+ return result;
191
+ }
192
+ export async function runDerivedChannelBreakdown(client, input) {
193
+ const dimensions = input.fields.filter((field) => field !== "channel");
194
+ const baseFilters = appendReferrerExclusions(input.filters, input.excludedReferrers ?? []);
195
+ let candidates = [{ values: {} }];
196
+ let sourceRowsTruncated = false;
197
+ let omittedUnsupportedRows = 0;
198
+ if (dimensions.length > 0) {
199
+ const request = {
200
+ websiteId: input.websiteId,
201
+ type: "breakdown",
202
+ parameters: {
203
+ startDate: new Date(input.period.startAt).toISOString(),
204
+ endDate: new Date(input.period.endAt).toISOString(),
205
+ fields: dimensions,
206
+ },
207
+ filters: baseFilters,
208
+ };
209
+ const result = await client.runReport(request, input.signal);
210
+ if (!Array.isArray(result)) {
211
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid breakdown candidate data.");
212
+ }
213
+ const candidateLimit = Math.min(MAX_CHANNEL_CANDIDATES, Math.max(input.limit * 3, 20));
214
+ sourceRowsTruncated = result.length > candidateLimit || result.length >= 500;
215
+ candidates = result.slice(0, candidateLimit).map((candidate) => {
216
+ if (!isRecord(candidate)) {
217
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned invalid breakdown candidate data.");
218
+ }
219
+ return { values: requireRowFields(candidate, dimensions) };
220
+ });
221
+ }
222
+ const derived = await mapConcurrent(candidates, 4, async (candidate) => {
223
+ let filters = baseFilters;
224
+ const { values } = candidate;
225
+ for (const [field, value] of Object.entries(values)) {
226
+ filters = appendDimensionEquality(filters, field, value);
227
+ if (!filters) {
228
+ omittedUnsupportedRows += 1;
229
+ return [];
230
+ }
231
+ }
232
+ const channels = await fetchExpandedMetricRows(client, {
233
+ filters,
234
+ maxRangeDays: input.maxRangeDays,
235
+ period: input.period,
236
+ signal: input.signal,
237
+ type: "channel",
238
+ websiteId: input.websiteId,
239
+ });
240
+ return channels
241
+ .filter(({ name }) => input.channel === undefined || name === input.channel)
242
+ .map(({ name, ...metrics }) => ({
243
+ ...values,
244
+ ...(input.fields.includes("channel") ? { channel: name } : {}),
245
+ ...metrics,
246
+ }));
247
+ });
248
+ const rows = derived
249
+ .flat()
250
+ .sort((left, right) => right.visitors - left.visitors ||
251
+ right.pageviews - left.pageviews ||
252
+ JSON.stringify(left).localeCompare(JSON.stringify(right)));
253
+ return {
254
+ rows,
255
+ dataQuality: {
256
+ derivedChannelBreakdown: true,
257
+ upstreamCandidateRows: candidates.length,
258
+ sourceRowsTruncated,
259
+ omittedUnsupportedRows,
260
+ fanoutRequests: candidates.length,
261
+ },
262
+ };
263
+ }
264
+ //# sourceMappingURL=traffic-segmentation.js.map