@iann29/rastro 0.1.0-alpha.1 → 0.1.0-alpha.11
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/README.md +693 -69
- package/agent/integration.md +801 -0
- package/agent/manifest.json +205 -0
- package/agent/manifest.schema.json +444 -0
- package/dist/client/federation.d.ts +381 -0
- package/dist/client/federation.d.ts.map +1 -0
- package/dist/client/federation.js +274 -0
- package/dist/client/federation.js.map +1 -0
- package/dist/client/index.d.ts +2673 -15
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +565 -33
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +22 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +315 -4
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/_generated/server.d.ts +4 -0
- package/dist/component/_generated/server.d.ts.map +1 -1
- package/dist/component/_generated/server.js.map +1 -1
- package/dist/component/affiliates.d.ts.map +1 -1
- package/dist/component/affiliates.js +6 -2
- package/dist/component/affiliates.js.map +1 -1
- package/dist/component/cardinality.d.ts +12 -0
- package/dist/component/cardinality.d.ts.map +1 -0
- package/dist/component/cardinality.js +94 -0
- package/dist/component/cardinality.js.map +1 -0
- package/dist/component/constants.d.ts +28 -1
- package/dist/component/constants.d.ts.map +1 -1
- package/dist/component/constants.js +44 -1
- package/dist/component/constants.js.map +1 -1
- package/dist/component/convex.config.d.ts +6 -1
- package/dist/component/convex.config.js +9 -1
- package/dist/component/convex.config.js.map +1 -1
- package/dist/component/coverage.d.ts +27 -0
- package/dist/component/coverage.d.ts.map +1 -0
- package/dist/component/coverage.js +56 -0
- package/dist/component/coverage.js.map +1 -0
- package/dist/component/diagnostics.d.ts +9 -0
- package/dist/component/diagnostics.d.ts.map +1 -0
- package/dist/component/diagnostics.js +47 -0
- package/dist/component/diagnostics.js.map +1 -0
- package/dist/component/errors.d.ts +1 -1
- package/dist/component/errors.d.ts.map +1 -1
- package/dist/component/errors.js.map +1 -1
- package/dist/component/eventStore.d.ts +21 -9
- package/dist/component/eventStore.d.ts.map +1 -1
- package/dist/component/eventStore.js +142 -152
- package/dist/component/eventStore.js.map +1 -1
- package/dist/component/funnels.d.ts.map +1 -1
- package/dist/component/funnels.js +5 -3
- package/dist/component/funnels.js.map +1 -1
- package/dist/component/geo.d.ts +73 -0
- package/dist/component/geo.d.ts.map +1 -0
- package/dist/component/geo.js +648 -0
- package/dist/component/geo.js.map +1 -0
- package/dist/component/goals.d.ts.map +1 -1
- package/dist/component/goals.js +8 -5
- package/dist/component/goals.js.map +1 -1
- package/dist/component/guards.d.ts.map +1 -1
- package/dist/component/guards.js.map +1 -1
- package/dist/component/http.d.ts.map +1 -1
- package/dist/component/http.js +281 -62
- package/dist/component/http.js.map +1 -1
- package/dist/component/identity.d.ts +13 -0
- package/dist/component/identity.d.ts.map +1 -0
- package/dist/component/identity.js +58 -0
- package/dist/component/identity.js.map +1 -0
- package/dist/component/ingest.d.ts +3 -1
- package/dist/component/ingest.d.ts.map +1 -1
- package/dist/component/ingest.js +498 -95
- package/dist/component/ingest.js.map +1 -1
- package/dist/component/live.d.ts.map +1 -1
- package/dist/component/live.js +7 -6
- package/dist/component/live.js.map +1 -1
- package/dist/component/localTime.d.ts +25 -0
- package/dist/component/localTime.d.ts.map +1 -0
- package/dist/component/localTime.js +126 -0
- package/dist/component/localTime.js.map +1 -0
- package/dist/component/reports.d.ts +266 -10
- package/dist/component/reports.d.ts.map +1 -1
- package/dist/component/reports.js +1243 -137
- package/dist/component/reports.js.map +1 -1
- package/dist/component/retention.d.ts +75 -1
- package/dist/component/retention.d.ts.map +1 -1
- package/dist/component/retention.js +561 -38
- package/dist/component/retention.js.map +1 -1
- package/dist/component/rollupStore.d.ts +320 -0
- package/dist/component/rollupStore.d.ts.map +1 -0
- package/dist/component/rollupStore.js +596 -0
- package/dist/component/rollupStore.js.map +1 -0
- package/dist/component/rollups.d.ts +20 -0
- package/dist/component/rollups.d.ts.map +1 -0
- package/dist/component/rollups.js +73 -0
- package/dist/component/rollups.js.map +1 -0
- package/dist/component/sanitize.d.ts +24 -1
- package/dist/component/sanitize.d.ts.map +1 -1
- package/dist/component/sanitize.js +96 -16
- package/dist/component/sanitize.js.map +1 -1
- package/dist/component/schema.d.ts +687 -65
- package/dist/component/schema.js +187 -20
- package/dist/component/schema.js.map +1 -1
- package/dist/component/sites.d.ts +12 -0
- package/dist/component/sites.d.ts.map +1 -1
- package/dist/component/sites.js +41 -7
- package/dist/component/sites.js.map +1 -1
- package/dist/component/useragent.d.ts +9 -0
- package/dist/component/useragent.d.ts.map +1 -0
- package/dist/component/useragent.js +152 -0
- package/dist/component/useragent.js.map +1 -0
- package/dist/component/validators.d.ts +124 -69
- package/dist/component/validators.d.ts.map +1 -1
- package/dist/component/validators.js +35 -14
- package/dist/component/validators.js.map +1 -1
- package/dist/component/visitors.d.ts +19 -0
- package/dist/component/visitors.d.ts.map +1 -0
- package/dist/component/visitors.js +86 -0
- package/dist/component/visitors.js.map +1 -0
- package/dist/component/vitals.d.ts +41 -0
- package/dist/component/vitals.d.ts.map +1 -0
- package/dist/component/vitals.js +115 -0
- package/dist/component/vitals.js.map +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/tracker/generated.d.ts +11 -4
- package/dist/tracker/generated.d.ts.map +1 -1
- package/dist/tracker/generated.js +11 -4
- package/dist/tracker/generated.js.map +1 -1
- package/dist/tracker/tracker.d.ts +1 -1
- package/dist/tracker/tracker.d.ts.map +1 -1
- package/dist/tracker/tracker.js +57 -20
- package/dist/tracker/tracker.js.map +1 -1
- package/dist/tracker/vitals.d.ts +10 -0
- package/dist/tracker/vitals.d.ts.map +1 -0
- package/dist/tracker/vitals.js +140 -0
- package/dist/tracker/vitals.js.map +1 -0
- package/dist/tracker.min.js +1 -1
- package/dist/vitals.min.js +1 -0
- package/docs/benchmarks/2026-08-20-realistic.md +76 -76
- package/docs/benchmarks/2026-08-21-formal-certification.md +353 -0
- package/docs/benchmarks/2026-08-30-alpha6-recertification.md +206 -0
- package/docs/federation-setup.md +464 -0
- package/docs/federation.md +352 -0
- package/docs/upgrading.md +344 -0
- package/llms.txt +72 -0
- package/package.json +55 -11
- package/scripts/benchmark-ingest.mjs +175 -73
- package/scripts/generate-federation-keys.mjs +20 -0
- package/src/component/_generated/api.ts +22 -0
- package/src/component/_generated/component.ts +381 -4
- package/src/component/_generated/server.ts +4 -0
- package/src/component/affiliates.ts +20 -5
- package/src/component/cardinality.ts +117 -0
- package/src/component/constants.ts +44 -1
- package/src/component/convex.config.ts +11 -1
- package/src/component/coverage.ts +71 -0
- package/src/component/diagnostics.ts +65 -0
- package/src/component/errors.ts +2 -1
- package/src/component/eventStore.ts +217 -193
- package/src/component/funnels.ts +19 -16
- package/src/component/geo.ts +835 -0
- package/src/component/goals.ts +29 -21
- package/src/component/guards.ts +3 -1
- package/src/component/http.ts +404 -70
- package/src/component/identity.ts +74 -0
- package/src/component/ingest.ts +894 -188
- package/src/component/live.ts +13 -7
- package/src/component/localTime.ts +167 -0
- package/src/component/reports.ts +1872 -197
- package/src/component/retention.ts +788 -96
- package/src/component/rollupStore.ts +799 -0
- package/src/component/rollups.ts +82 -0
- package/src/component/sanitize.ts +144 -29
- package/src/component/schema.ts +217 -21
- package/src/component/sites.ts +59 -12
- package/src/component/useragent.ts +171 -0
- package/src/component/validators.ts +49 -14
- package/src/component/visitors.ts +116 -0
- package/src/component/vitals.ts +146 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const SKETCH_VERSION = 1;
|
|
2
|
+
const DEFAULT_PRECISION = 6;
|
|
3
|
+
export function createVisitorSketch(precision = DEFAULT_PRECISION) {
|
|
4
|
+
if (!Number.isSafeInteger(precision) || precision < 4 || precision > 10) {
|
|
5
|
+
throw new Error("visitor sketch precision must be between 4 and 10");
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
version: SKETCH_VERSION,
|
|
9
|
+
precision,
|
|
10
|
+
registers: new Uint8Array(1 << precision).buffer,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function addVisitor(sketch, visitorId) {
|
|
14
|
+
const registers = checkedRegisters(sketch).slice();
|
|
15
|
+
const hash = fnv1a64(visitorId);
|
|
16
|
+
const remainingBits = 64 - sketch.precision;
|
|
17
|
+
const index = Number(hash >> BigInt(remainingBits));
|
|
18
|
+
const remaining = hash & ((1n << BigInt(remainingBits)) - 1n);
|
|
19
|
+
const rank = leadingZeroRank(remaining, remainingBits);
|
|
20
|
+
registers[index] = Math.max(registers[index] ?? 0, rank);
|
|
21
|
+
return { ...sketch, registers: registers.buffer };
|
|
22
|
+
}
|
|
23
|
+
export function unionVisitorSketches(left, right) {
|
|
24
|
+
const leftRegisters = checkedRegisters(left);
|
|
25
|
+
const rightRegisters = checkedRegisters(right);
|
|
26
|
+
if (left.version !== right.version ||
|
|
27
|
+
left.precision !== right.precision ||
|
|
28
|
+
leftRegisters.length !== rightRegisters.length) {
|
|
29
|
+
throw new Error("visitor sketches are incompatible");
|
|
30
|
+
}
|
|
31
|
+
const registers = leftRegisters.slice();
|
|
32
|
+
for (let index = 0; index < registers.length; index += 1) {
|
|
33
|
+
registers[index] = Math.max(registers[index] ?? 0, rightRegisters[index] ?? 0);
|
|
34
|
+
}
|
|
35
|
+
return { ...left, registers: registers.buffer };
|
|
36
|
+
}
|
|
37
|
+
export function estimateVisitors(sketch) {
|
|
38
|
+
const registers = checkedRegisters(sketch);
|
|
39
|
+
const count = registers.length;
|
|
40
|
+
const alpha = count === 16
|
|
41
|
+
? 0.673
|
|
42
|
+
: count === 32
|
|
43
|
+
? 0.697
|
|
44
|
+
: count === 64
|
|
45
|
+
? 0.709
|
|
46
|
+
: 0.7213 / (1 + 1.079 / count);
|
|
47
|
+
let denominator = 0;
|
|
48
|
+
let empty = 0;
|
|
49
|
+
for (const register of registers) {
|
|
50
|
+
denominator += 2 ** -register;
|
|
51
|
+
if (register === 0)
|
|
52
|
+
empty += 1;
|
|
53
|
+
}
|
|
54
|
+
let estimate = (alpha * count * count) / denominator;
|
|
55
|
+
if (estimate <= 2.5 * count && empty > 0) {
|
|
56
|
+
estimate = count * Math.log(count / empty);
|
|
57
|
+
}
|
|
58
|
+
return Math.max(0, Math.round(estimate));
|
|
59
|
+
}
|
|
60
|
+
function checkedRegisters(sketch) {
|
|
61
|
+
if (sketch.version !== SKETCH_VERSION) {
|
|
62
|
+
throw new Error("unsupported visitor sketch version");
|
|
63
|
+
}
|
|
64
|
+
const registers = new Uint8Array(sketch.registers);
|
|
65
|
+
if (registers.length !== 1 << sketch.precision) {
|
|
66
|
+
throw new Error("visitor sketch has invalid register storage");
|
|
67
|
+
}
|
|
68
|
+
return registers;
|
|
69
|
+
}
|
|
70
|
+
function leadingZeroRank(value, bits) {
|
|
71
|
+
if (value === 0n)
|
|
72
|
+
return bits + 1;
|
|
73
|
+
let rank = 1;
|
|
74
|
+
for (let bit = bits - 1; bit >= 0; bit -= 1) {
|
|
75
|
+
if ((value & (1n << BigInt(bit))) !== 0n)
|
|
76
|
+
break;
|
|
77
|
+
rank += 1;
|
|
78
|
+
}
|
|
79
|
+
return rank;
|
|
80
|
+
}
|
|
81
|
+
function fnv1a64(value) {
|
|
82
|
+
let hash = 0xcbf29ce484222325n;
|
|
83
|
+
for (const byte of new TextEncoder().encode(value)) {
|
|
84
|
+
hash ^= BigInt(byte);
|
|
85
|
+
hash = BigInt.asUintN(64, hash * 0x100000001b3n);
|
|
86
|
+
}
|
|
87
|
+
hash ^= hash >> 33n;
|
|
88
|
+
hash = BigInt.asUintN(64, hash * 0xff51afd7ed558ccdn);
|
|
89
|
+
hash ^= hash >> 33n;
|
|
90
|
+
hash = BigInt.asUintN(64, hash * 0xc4ceb9fe1a85ec53n);
|
|
91
|
+
hash ^= hash >> 33n;
|
|
92
|
+
return hash;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=cardinality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardinality.js","sourceRoot":"","sources":["../../src/component/cardinality.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,10 @@ export declare const MAX_BYTES_PER_SESSION_WINDOW: number;
|
|
|
7
7
|
export declare const SITE_INGEST_SHARDS = 4096;
|
|
8
8
|
export declare const MAX_SITE_EVENTS_PER_SHARD_WINDOW = 300;
|
|
9
9
|
export declare const MAX_SITE_BYTES_PER_SHARD_WINDOW: number;
|
|
10
|
-
export declare const LIVE_SESSION_TTL_MS =
|
|
10
|
+
export declare const LIVE_SESSION_TTL_MS = 90000;
|
|
11
|
+
export declare const LIVE_LEAVE_GRACE_MS = 10000;
|
|
11
12
|
export declare const LIVE_SWEEP_INTERVAL_MS = 5000;
|
|
13
|
+
export declare const CLOCK_SKEW_TOLERANCE_MS = 30000;
|
|
12
14
|
export declare const AGGREGATE_SHARDS = 128;
|
|
13
15
|
export declare const HOURLY_AGGREGATE_SHARDS = 256;
|
|
14
16
|
export declare const SECONDARY_AGGREGATE_SHARDS = 16;
|
|
@@ -24,8 +26,33 @@ export declare const MAX_REPORT_SITES = 10;
|
|
|
24
26
|
export declare const MAX_REPORT_RANGE_DAYS = 366;
|
|
25
27
|
export declare const MAX_LIVE_VISITORS = 500;
|
|
26
28
|
export declare const MAX_JOURNEY_EVENTS = 500;
|
|
29
|
+
export declare const JOURNEY_READ_BYTE_RESERVE: number;
|
|
30
|
+
export declare const JOURNEY_READ_DOCUMENT_RESERVE = 1000;
|
|
27
31
|
export declare const MAX_RETENTION_BATCH = 500;
|
|
28
32
|
export declare const MAX_OVERVIEW_AGGREGATE_ROWS = 13000;
|
|
33
|
+
export declare const MAX_REPORT_BUCKETS = 5000;
|
|
34
|
+
export declare const MAX_FEATURE_ROLLUP_DAYS = 90;
|
|
35
|
+
export declare const MAX_FEATURE_ROLLUP_ROWS = 5000;
|
|
36
|
+
export declare const FEATURE_REPORT_BYTE_RESERVE: number;
|
|
37
|
+
export declare const FEATURE_REPORT_DOCUMENT_RESERVE = 500;
|
|
38
|
+
export declare const REPORT_ROLLUP_SHARDS = 2;
|
|
39
|
+
export declare const ROLLUP_SAFETY_DELAY_MS: number;
|
|
40
|
+
export declare const RETENTION_LEASE_MS = 60000;
|
|
41
|
+
export declare const ROLLUP_FOLD_BATCH_DOCS = 200;
|
|
42
|
+
export declare const ROLLUP_FOLD_MAX_ROWS = 1500;
|
|
43
|
+
export declare const ROLLUP_FOLD_LEASE_MS = 60000;
|
|
44
|
+
export declare const VITAL_HISTOGRAM_EDGES: number[];
|
|
45
|
+
export declare const MAX_VITAL_VALUE = 600000;
|
|
46
|
+
export declare const VITAL_PAGE_SLOTS = 48;
|
|
47
|
+
export declare const MAX_VITALS_REPORT_ROWS = 5000;
|
|
48
|
+
export declare const VITALS_REPORT_PAGE_LIMIT = 12;
|
|
29
49
|
export declare const DAY_MS = 86400000;
|
|
30
50
|
export declare const HOUR_MS = 3600000;
|
|
51
|
+
export declare const MINUTE_MS = 60000;
|
|
52
|
+
export declare const RETENTION_POLICY_INTERVAL_MS = 86400000;
|
|
53
|
+
export declare const MAX_VISITOR_ALIASES = 10;
|
|
54
|
+
export declare const MAX_SITE_MAP_ROUTES_PER_DAY = 200;
|
|
55
|
+
export declare const ROUTE_TRANSITION_SLOTS = 24;
|
|
56
|
+
export declare const MAX_SITE_MAP_ROWS = 8000;
|
|
57
|
+
export declare const SITE_MAP_OTHER_ROUTE = "(other)";
|
|
31
58
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/component/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,eAAe,QAAY,CAAC;AACzC,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,4BAA4B,QAAa,CAAC;AACvD,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,+BAA+B,QAAa,CAAC;AAC1D,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,sBAAsB,OAAQ,CAAC;AAC5C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,2BAA2B,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/component/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,eAAe,QAAY,CAAC;AACzC,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,4BAA4B,QAAa,CAAC;AACvD,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,+BAA+B,QAAa,CAAC;AAC1D,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,sBAAsB,OAAQ,CAAC;AAC5C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AACzD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AACnD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,2BAA2B,QAAkB,CAAC;AAC3D,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAIzC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAC1C,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAI3C,eAAO,MAAM,qBAAqB,UAGjC,CAAC;AACF,eAAO,MAAM,eAAe,SAAU,CAAC;AACvC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,sBAAsB,OAAQ,CAAC;AAC5C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,eAAO,MAAM,MAAM,WAAa,CAAC;AACjC,eAAO,MAAM,OAAO,UAAY,CAAC;AACjC,eAAO,MAAM,SAAS,QAAS,CAAC;AAChC,eAAO,MAAM,4BAA4B,WAAS,CAAC;AACnD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAQtC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,eAAO,MAAM,oBAAoB,YAAY,CAAC"}
|
|
@@ -7,8 +7,10 @@ export const MAX_BYTES_PER_SESSION_WINDOW = 256 * 1024;
|
|
|
7
7
|
export const SITE_INGEST_SHARDS = 4_096;
|
|
8
8
|
export const MAX_SITE_EVENTS_PER_SHARD_WINDOW = 300;
|
|
9
9
|
export const MAX_SITE_BYTES_PER_SHARD_WINDOW = 512 * 1024;
|
|
10
|
-
export const LIVE_SESSION_TTL_MS =
|
|
10
|
+
export const LIVE_SESSION_TTL_MS = 90_000;
|
|
11
|
+
export const LIVE_LEAVE_GRACE_MS = 10_000;
|
|
11
12
|
export const LIVE_SWEEP_INTERVAL_MS = 5_000;
|
|
13
|
+
export const CLOCK_SKEW_TOLERANCE_MS = 30_000;
|
|
12
14
|
export const AGGREGATE_SHARDS = 128;
|
|
13
15
|
export const HOURLY_AGGREGATE_SHARDS = 256;
|
|
14
16
|
export const SECONDARY_AGGREGATE_SHARDS = 16;
|
|
@@ -24,8 +26,49 @@ export const MAX_REPORT_SITES = 10;
|
|
|
24
26
|
export const MAX_REPORT_RANGE_DAYS = 366;
|
|
25
27
|
export const MAX_LIVE_VISITORS = 500;
|
|
26
28
|
export const MAX_JOURNEY_EVENTS = 500;
|
|
29
|
+
export const JOURNEY_READ_BYTE_RESERVE = 4 * 1024 * 1024;
|
|
30
|
+
export const JOURNEY_READ_DOCUMENT_RESERVE = 1_000;
|
|
27
31
|
export const MAX_RETENTION_BATCH = 500;
|
|
28
32
|
export const MAX_OVERVIEW_AGGREGATE_ROWS = 13_000;
|
|
33
|
+
export const MAX_REPORT_BUCKETS = 5_000;
|
|
34
|
+
export const MAX_FEATURE_ROLLUP_DAYS = 90;
|
|
35
|
+
export const MAX_FEATURE_ROLLUP_ROWS = 5_000;
|
|
36
|
+
export const FEATURE_REPORT_BYTE_RESERVE = 2 * 1024 * 1024;
|
|
37
|
+
export const FEATURE_REPORT_DOCUMENT_RESERVE = 500;
|
|
38
|
+
export const REPORT_ROLLUP_SHARDS = 2;
|
|
39
|
+
export const ROLLUP_SAFETY_DELAY_MS = 5 * 60_000;
|
|
40
|
+
export const RETENTION_LEASE_MS = 60_000;
|
|
41
|
+
// Report rollups are folded by one leased job per site (see rollupStore.ts).
|
|
42
|
+
// A run takes at most this many queued batches, stops early once the merged
|
|
43
|
+
// deltas would touch this many rows, and holds its lease for this long.
|
|
44
|
+
export const ROLLUP_FOLD_BATCH_DOCS = 200;
|
|
45
|
+
export const ROLLUP_FOLD_MAX_ROWS = 1_500;
|
|
46
|
+
export const ROLLUP_FOLD_LEASE_MS = 60_000;
|
|
47
|
+
// Shared Web Vitals histogram edges. Every Google rating threshold (LCP
|
|
48
|
+
// 2500/4000, CLS×1000 100/250, INP 200/500, FCP 1800/3000, TTFB 800/1800) is
|
|
49
|
+
// an edge, so rating counts stay exact while one layout serves all metrics.
|
|
50
|
+
export const VITAL_HISTOGRAM_EDGES = [
|
|
51
|
+
100, 200, 250, 300, 500, 800, 1_000, 1_200, 1_800, 2_500, 3_000, 4_000, 5_000,
|
|
52
|
+
7_500, 10_000,
|
|
53
|
+
];
|
|
54
|
+
export const MAX_VITAL_VALUE = 600_000;
|
|
55
|
+
export const VITAL_PAGE_SLOTS = 48;
|
|
56
|
+
export const MAX_VITALS_REPORT_ROWS = 5_000;
|
|
57
|
+
export const VITALS_REPORT_PAGE_LIMIT = 12;
|
|
29
58
|
export const DAY_MS = 86_400_000;
|
|
30
59
|
export const HOUR_MS = 3_600_000;
|
|
60
|
+
export const MINUTE_MS = 60_000;
|
|
61
|
+
export const RETENTION_POLICY_INTERVAL_MS = DAY_MS;
|
|
62
|
+
export const MAX_VISITOR_ALIASES = 10;
|
|
63
|
+
// Site map rollups: one row per (site, route, UTC day, shard). A day keeps at
|
|
64
|
+
// most this many route rows per shard before new routes fold into "(other)";
|
|
65
|
+
// each row keeps this many outgoing targets before they fold the same way. A
|
|
66
|
+
// report reads at most MAX_SITE_MAP_ROWS rows, newest day first — about
|
|
67
|
+
// 5 MiB of rows, under the 8 MiB a function may read once the feature-report
|
|
68
|
+
// byte reserve is kept — and declares the older days it could not read as
|
|
69
|
+
// partial coverage: 20 days at the daily cap, 40 for a 100-route site.
|
|
70
|
+
export const MAX_SITE_MAP_ROUTES_PER_DAY = 200;
|
|
71
|
+
export const ROUTE_TRANSITION_SLOTS = 24;
|
|
72
|
+
export const MAX_SITE_MAP_ROWS = 8_000;
|
|
73
|
+
export const SITE_MAP_OTHER_ROUTE = "(other)";
|
|
31
74
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/component/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AACpD,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,GAAG,IAAI,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/component/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
declare const _default: import("convex/server").ComponentDefinition<any, {
|
|
1
|
+
declare const _default: import("convex/server").ComponentDefinition<any, {
|
|
2
|
+
readonly RASTRO_GEOIP_PROVIDER: import("convex/values").VUnion<"ipinfo" | "ipwhois" | undefined, [import("convex/values").VLiteral<"ipinfo", "required">, import("convex/values").VLiteral<"ipwhois", "required">], "optional", never>;
|
|
3
|
+
readonly RASTRO_GEOIP_TOKEN: import("convex/values").VString<string | undefined, "optional">;
|
|
4
|
+
readonly RASTRO_GEOIP_DAILY_LIMIT: import("convex/values").VString<string | undefined, "optional">;
|
|
5
|
+
readonly RASTRO_TRUST_PROXY: import("convex/values").VLiteral<"true" | undefined, "optional">;
|
|
6
|
+
}>;
|
|
2
7
|
export default _default;
|
|
3
8
|
//# sourceMappingURL=convex.config.d.ts.map
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import { defineComponent } from "convex/server";
|
|
2
|
-
|
|
2
|
+
import { v } from "convex/values";
|
|
3
|
+
export default defineComponent("rastroAnalytics", {
|
|
4
|
+
env: {
|
|
5
|
+
RASTRO_GEOIP_PROVIDER: v.optional(v.union(v.literal("ipinfo"), v.literal("ipwhois"))),
|
|
6
|
+
RASTRO_GEOIP_TOKEN: v.optional(v.string()),
|
|
7
|
+
RASTRO_GEOIP_DAILY_LIMIT: v.optional(v.string()),
|
|
8
|
+
RASTRO_TRUST_PROXY: v.optional(v.literal("true")),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
3
11
|
//# sourceMappingURL=convex.config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,eAAe,eAAe,CAAC,iBAAiB,EAAE;IAChD,GAAG,EAAE;QACH,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnD;QACD,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChD,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAClD;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Id } from "./_generated/dataModel.js";
|
|
2
|
+
import type { MutationCtx } from "./_generated/server.js";
|
|
3
|
+
export declare function ensureAnalyticsControl(ctx: MutationCtx, siteId: Id<"sites">, now: number, retained?: Array<{
|
|
4
|
+
dataset: string;
|
|
5
|
+
before: number;
|
|
6
|
+
}>): Promise<{
|
|
7
|
+
_creationTime: number;
|
|
8
|
+
_id: import("convex/values").GenericId<"analyticsCoverage">;
|
|
9
|
+
countersSince?: number | undefined;
|
|
10
|
+
generation: 1;
|
|
11
|
+
localDaySince?: number | undefined;
|
|
12
|
+
retained: {
|
|
13
|
+
before: number;
|
|
14
|
+
dataset: string;
|
|
15
|
+
}[];
|
|
16
|
+
rollupCompleteFrom: number;
|
|
17
|
+
siteId: import("convex/values").GenericId<"sites">;
|
|
18
|
+
siteMapSince?: number | undefined;
|
|
19
|
+
updatedAt: number;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* A site's local-day buckets are computed in its timezone at ingest, so a
|
|
23
|
+
* changed timezone restarts their coverage: rows before the change belong to
|
|
24
|
+
* the old zone's days and must not answer for the new one.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resetLocalDayCoverage(ctx: MutationCtx, siteId: Id<"sites">, now: number): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/component/coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAM;;;;;;;;;;;;;;GA6C1D;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EACnB,GAAG,EAAE,MAAM,iBAOZ"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ROLLUP_SAFETY_DELAY_MS } from "./constants.js";
|
|
2
|
+
export async function ensureAnalyticsControl(ctx, siteId, now, retained = []) {
|
|
3
|
+
const existing = await ctx.db
|
|
4
|
+
.query("analyticsCoverage")
|
|
5
|
+
.withIndex("by_siteId", (range) => range.eq("siteId", siteId))
|
|
6
|
+
.unique();
|
|
7
|
+
if (existing) {
|
|
8
|
+
// A site that predates a feature starts that feature's coverage at the
|
|
9
|
+
// first ingest after the upgrade, with the same safety delay as rollups:
|
|
10
|
+
// the site map rows, and the alpha.11 counters (pageviews and sessions
|
|
11
|
+
// per dimension slot; duration, continued sessions and new visitors per
|
|
12
|
+
// bucket).
|
|
13
|
+
const stamps = {};
|
|
14
|
+
if (existing.siteMapSince === undefined) {
|
|
15
|
+
stamps.siteMapSince = now + ROLLUP_SAFETY_DELAY_MS;
|
|
16
|
+
}
|
|
17
|
+
if (existing.countersSince === undefined) {
|
|
18
|
+
stamps.countersSince = now + ROLLUP_SAFETY_DELAY_MS;
|
|
19
|
+
}
|
|
20
|
+
if (existing.localDaySince === undefined) {
|
|
21
|
+
stamps.localDaySince = now + ROLLUP_SAFETY_DELAY_MS;
|
|
22
|
+
}
|
|
23
|
+
if (Object.keys(stamps).length === 0)
|
|
24
|
+
return existing;
|
|
25
|
+
await ctx.db.patch("analyticsCoverage", existing._id, {
|
|
26
|
+
...stamps,
|
|
27
|
+
updatedAt: now,
|
|
28
|
+
});
|
|
29
|
+
return { ...existing, ...stamps, updatedAt: now };
|
|
30
|
+
}
|
|
31
|
+
const fields = {
|
|
32
|
+
siteId,
|
|
33
|
+
generation: 1,
|
|
34
|
+
rollupCompleteFrom: now + ROLLUP_SAFETY_DELAY_MS,
|
|
35
|
+
siteMapSince: now + ROLLUP_SAFETY_DELAY_MS,
|
|
36
|
+
countersSince: now + ROLLUP_SAFETY_DELAY_MS,
|
|
37
|
+
localDaySince: now + ROLLUP_SAFETY_DELAY_MS,
|
|
38
|
+
retained,
|
|
39
|
+
updatedAt: now,
|
|
40
|
+
};
|
|
41
|
+
const _id = await ctx.db.insert("analyticsCoverage", fields);
|
|
42
|
+
return { ...fields, _id, _creationTime: now };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A site's local-day buckets are computed in its timezone at ingest, so a
|
|
46
|
+
* changed timezone restarts their coverage: rows before the change belong to
|
|
47
|
+
* the old zone's days and must not answer for the new one.
|
|
48
|
+
*/
|
|
49
|
+
export async function resetLocalDayCoverage(ctx, siteId, now) {
|
|
50
|
+
const control = await ensureAnalyticsControl(ctx, siteId, now);
|
|
51
|
+
await ctx.db.patch("analyticsCoverage", control._id, {
|
|
52
|
+
localDaySince: now + ROLLUP_SAFETY_DELAY_MS,
|
|
53
|
+
updatedAt: now,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/component/coverage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAgB,EAChB,MAAmB,EACnB,GAAW,EACX,QAAQ,GAA+C,EAAE;IAEzD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;SAC1B,KAAK,CAAC,mBAAmB,CAAC;SAC1B,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC7D,MAAM,EAAE,CAAC;IACZ,IAAI,QAAQ,EAAE,CAAC;QACb,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,WAAW;QACX,MAAM,MAAM,GAIR,EAAE,CAAC;QACP,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,sBAAsB,CAAC;QACrD,CAAC;QACD,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,aAAa,GAAG,GAAG,GAAG,sBAAsB,CAAC;QACtD,CAAC;QACD,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,aAAa,GAAG,GAAG,GAAG,sBAAsB,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACtD,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAAG,EAAE;YACpD,GAAG,MAAM;YACT,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG;QACb,MAAM;QACN,UAAU,EAAE,CAAU;QACtB,kBAAkB,EAAE,GAAG,GAAG,sBAAsB;QAChD,YAAY,EAAE,GAAG,GAAG,sBAAsB;QAC1C,aAAa,EAAE,GAAG,GAAG,sBAAsB;QAC3C,aAAa,EAAE,GAAG,GAAG,sBAAsB;QAC3C,QAAQ;QACR,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAgB,EAChB,MAAmB,EACnB,GAAW;IAEX,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE;QACnD,aAAa,EAAE,GAAG,GAAG,sBAAsB;QAC3C,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const sessionEventTotals: import("convex/server").RegisteredQuery<"public", {
|
|
2
|
+
sessionIds: string[];
|
|
3
|
+
siteId: import("convex/values").GenericId<"sites">;
|
|
4
|
+
}, Promise<{
|
|
5
|
+
requestedSessions: number;
|
|
6
|
+
foundSessions: number;
|
|
7
|
+
storedEvents: number;
|
|
8
|
+
}>>;
|
|
9
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/component/diagnostics.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB;;;;;;;GAyD7B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { v } from "convex/values";
|
|
2
|
+
import { query } from "./_generated/server.js";
|
|
3
|
+
import { fail } from "./errors.js";
|
|
4
|
+
import { sanitizeOpaqueId } from "./sanitize.js";
|
|
5
|
+
const MAX_SESSION_TOTAL_IDS = 100;
|
|
6
|
+
export const sessionEventTotals = query({
|
|
7
|
+
args: {
|
|
8
|
+
siteId: v.id("sites"),
|
|
9
|
+
sessionIds: v.array(v.string()),
|
|
10
|
+
},
|
|
11
|
+
returns: v.object({
|
|
12
|
+
requestedSessions: v.number(),
|
|
13
|
+
foundSessions: v.number(),
|
|
14
|
+
storedEvents: v.number(),
|
|
15
|
+
}),
|
|
16
|
+
handler: async (ctx, args) => {
|
|
17
|
+
if (args.sessionIds.length < 1 ||
|
|
18
|
+
args.sessionIds.length > MAX_SESSION_TOTAL_IDS) {
|
|
19
|
+
fail("INVALID_ARGUMENT", `sessionIds must contain between 1 and ${MAX_SESSION_TOTAL_IDS} IDs`);
|
|
20
|
+
}
|
|
21
|
+
let sessionIds;
|
|
22
|
+
try {
|
|
23
|
+
sessionIds = args.sessionIds.map((sessionId) => {
|
|
24
|
+
const sanitized = sanitizeOpaqueId(sessionId, "sessionId");
|
|
25
|
+
if (sanitized !== sessionId)
|
|
26
|
+
throw new Error("sessionId is not canonical");
|
|
27
|
+
return sanitized;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
fail("INVALID_ARGUMENT", error instanceof Error ? error.message : "invalid sessionId");
|
|
32
|
+
}
|
|
33
|
+
if (new Set(sessionIds).size !== sessionIds.length) {
|
|
34
|
+
fail("INVALID_ARGUMENT", "sessionIds must be unique");
|
|
35
|
+
}
|
|
36
|
+
const sessions = await Promise.all(sessionIds.map((sessionId) => ctx.db
|
|
37
|
+
.query("sessions")
|
|
38
|
+
.withIndex("by_siteId_and_sessionId", (range) => range.eq("siteId", args.siteId).eq("sessionId", sessionId))
|
|
39
|
+
.unique()));
|
|
40
|
+
return {
|
|
41
|
+
requestedSessions: sessionIds.length,
|
|
42
|
+
foundSessions: sessions.filter((session) => session !== null).length,
|
|
43
|
+
storedEvents: sessions.reduce((total, session) => total + (session?.eventCount ?? 0), 0),
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/component/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAChC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;KACzB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IACE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,qBAAqB,EAC9C,CAAC;YACD,IAAI,CACF,kBAAkB,EAClB,yCAAyC,qBAAqB,MAAM,CACrE,CAAC;QACJ,CAAC;QACD,IAAI,UAAoB,CAAC;QACzB,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC7C,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC3D,IAAI,SAAS,KAAK,SAAS;oBACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CACF,kBAAkB,EAClB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC3B,GAAG,CAAC,EAAE;aACH,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAC3D;aACA,MAAM,EAAE,CACZ,CACF,CAAC;QACF,OAAO;YACL,iBAAiB,EAAE,UAAU,CAAC,MAAM;YACpC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,MAAM;YACpE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,EACtD,CAAC,CACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type RastroErrorCode = "NOT_FOUND" | "INVALID_ARGUMENT" | "INVALID_SITE" | "ORIGIN_NOT_ALLOWED" | "BATCH_TOO_LARGE" | "LIMIT_EXCEEDED" | "CONFLICT" | "CURRENCY_MISMATCH" | "RATE_LIMITED";
|
|
1
|
+
export type RastroErrorCode = "NOT_FOUND" | "INVALID_ARGUMENT" | "INVALID_SITE" | "ORIGIN_NOT_ALLOWED" | "BATCH_TOO_LARGE" | "LIMIT_EXCEEDED" | "CONFLICT" | "CURRENCY_MISMATCH" | "RATE_LIMITED" | "REPORT_INCOMPLETE";
|
|
2
2
|
export declare function fail(code: RastroErrorCode, message: string, details?: Record<string, string | number | boolean | null>): never;
|
|
3
3
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/component/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,mBAAmB,GACnB,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/component/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,mBAAmB,GACnB,cAAc,GACd,mBAAmB,CAAC;AAExB,wBAAgB,IAAI,CAClB,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GACzD,KAAK,CAEP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/component/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/component/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAc5C,MAAM,UAAU,IAAI,CAClB,IAAqB,EACrB,OAAe,EACf,OAA0D;IAE1D,MAAM,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -25,8 +25,12 @@ export type JourneyCursor = {
|
|
|
25
25
|
creationTime: number;
|
|
26
26
|
id: string;
|
|
27
27
|
};
|
|
28
|
-
export type RawJourneyEvent = Omit<Doc<"events"
|
|
28
|
+
export type RawJourneyEvent = Omit<Doc<"eventBatches">["events"][number], "aggregateCountry"> & {
|
|
29
29
|
_id: string;
|
|
30
|
+
_creationTime: number;
|
|
31
|
+
siteId: Id<"sites">;
|
|
32
|
+
sessionId: string;
|
|
33
|
+
visitorId: string;
|
|
30
34
|
};
|
|
31
35
|
export declare function eventBucketStart(timestamp: number): number;
|
|
32
36
|
export declare function eventBatchKey(sessionId: string, bucketStart: number): string;
|
|
@@ -34,7 +38,6 @@ export declare function inspectTelemetryMinute(ctx: MutationCtx, input: {
|
|
|
34
38
|
siteId: Id<"sites">;
|
|
35
39
|
sessionId: string;
|
|
36
40
|
bucketStart: number;
|
|
37
|
-
candidateEventIds: Set<string>;
|
|
38
41
|
}): Promise<{
|
|
39
42
|
eventIds: Set<string>;
|
|
40
43
|
persistedCount: number;
|
|
@@ -43,8 +46,8 @@ export declare function findTelemetry(ctx: MutationCtx, siteId: Id<"sites">, eve
|
|
|
43
46
|
match: TelemetryMatch | null;
|
|
44
47
|
saturated: boolean;
|
|
45
48
|
}>;
|
|
46
|
-
export declare function bufferEventBatch(siteId: Id<"sites">, event: TrackerEvent, buffer: EventBatchBuffer): void;
|
|
47
|
-
export declare function insertEventBatch(ctx: MutationCtx, siteId: Id<"sites">, event: TrackerEvent): Promise<void>;
|
|
49
|
+
export declare function bufferEventBatch(siteId: Id<"sites">, event: TrackerEvent, buffer: EventBatchBuffer, country: string): void;
|
|
50
|
+
export declare function insertEventBatch(ctx: MutationCtx, siteId: Id<"sites">, event: TrackerEvent, country: string): Promise<void>;
|
|
48
51
|
export declare function flushEventBatches(ctx: MutationCtx, buffer: EventBatchBuffer): Promise<void>;
|
|
49
52
|
export declare function loadSessionJourneyEvents(ctx: QueryCtx, input: {
|
|
50
53
|
siteId: Id<"sites">;
|
|
@@ -54,10 +57,20 @@ export declare function loadSessionJourneyEvents(ctx: QueryCtx, input: {
|
|
|
54
57
|
cursor: JourneyCursor | null;
|
|
55
58
|
resultLimit: number;
|
|
56
59
|
}): Promise<RawJourneyEvent[]>;
|
|
60
|
+
export declare function loadVisitorJourneyEvents(ctx: QueryCtx, input: {
|
|
61
|
+
siteId: Id<"sites">;
|
|
62
|
+
visitorId: string;
|
|
63
|
+
from: number;
|
|
64
|
+
to: number;
|
|
65
|
+
resultLimit: number;
|
|
66
|
+
}): Promise<RawJourneyEvent[]>;
|
|
57
67
|
export declare function compareJourneyEvents(left: Pick<RawJourneyEvent, "timestamp" | "_creationTime" | "_id">, right: Pick<RawJourneyEvent, "timestamp" | "_creationTime" | "_id">): number;
|
|
58
68
|
export declare function hydrateEventContexts(ctx: QueryCtx, rows: RawJourneyEvent[]): Promise<{
|
|
59
|
-
_creationTime: number;
|
|
60
69
|
_id: string;
|
|
70
|
+
_creationTime: number;
|
|
71
|
+
siteId: Id<"sites">;
|
|
72
|
+
sessionId: string;
|
|
73
|
+
visitorId: string;
|
|
61
74
|
country?: string | undefined;
|
|
62
75
|
city?: string | undefined;
|
|
63
76
|
latitude?: number | undefined;
|
|
@@ -75,12 +88,11 @@ export declare function hydrateEventContexts(ctx: QueryCtx, rows: RawJourneyEven
|
|
|
75
88
|
referrer?: string | undefined;
|
|
76
89
|
revenueCents?: number | undefined;
|
|
77
90
|
sequence: number;
|
|
78
|
-
sessionId: string;
|
|
79
|
-
siteId: import("convex/values").GenericId<"sites">;
|
|
80
91
|
target?: string | undefined;
|
|
81
92
|
timestamp: number;
|
|
82
|
-
type: "click" | "conversion" | "custom" | "heartbeat" | "outbound" | "pageview";
|
|
83
|
-
|
|
93
|
+
type: "click" | "conversion" | "custom" | "heartbeat" | "leave" | "outbound" | "pageview" | "vital";
|
|
94
|
+
value?: number | undefined;
|
|
95
|
+
visitorKey?: string | undefined;
|
|
84
96
|
}[]>;
|
|
85
97
|
export declare function deleteTelemetryBefore(ctx: MutationCtx, input: {
|
|
86
98
|
siteId: Id<"sites">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventStore.d.ts","sourceRoot":"","sources":["../../src/component/eventStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"eventStore.d.ts","sourceRoot":"","sources":["../../src/component/eventStore.ts"],"names":[],"mappings":"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"}
|