@iann29/rastro 0.1.0-alpha.0 → 0.1.0-alpha.10

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.
Files changed (164) hide show
  1. package/README.md +579 -57
  2. package/agent/integration.md +661 -0
  3. package/agent/manifest.json +187 -0
  4. package/agent/manifest.schema.json +411 -0
  5. package/dist/client/federation.d.ts +236 -0
  6. package/dist/client/federation.d.ts.map +1 -0
  7. package/dist/client/federation.js +196 -0
  8. package/dist/client/federation.js.map +1 -0
  9. package/dist/client/index.d.ts +2467 -18
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +461 -32
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/component/_generated/api.d.ts +18 -0
  14. package/dist/component/_generated/api.d.ts.map +1 -1
  15. package/dist/component/_generated/api.js.map +1 -1
  16. package/dist/component/_generated/component.d.ts +302 -4
  17. package/dist/component/_generated/component.d.ts.map +1 -1
  18. package/dist/component/_generated/server.d.ts +4 -0
  19. package/dist/component/_generated/server.d.ts.map +1 -1
  20. package/dist/component/_generated/server.js.map +1 -1
  21. package/dist/component/affiliates.d.ts.map +1 -1
  22. package/dist/component/affiliates.js +6 -2
  23. package/dist/component/affiliates.js.map +1 -1
  24. package/dist/component/cardinality.d.ts +12 -0
  25. package/dist/component/cardinality.d.ts.map +1 -0
  26. package/dist/component/cardinality.js +94 -0
  27. package/dist/component/cardinality.js.map +1 -0
  28. package/dist/component/constants.d.ts +34 -7
  29. package/dist/component/constants.d.ts.map +1 -1
  30. package/dist/component/constants.js +47 -7
  31. package/dist/component/constants.js.map +1 -1
  32. package/dist/component/convex.config.d.ts +6 -1
  33. package/dist/component/convex.config.js +9 -1
  34. package/dist/component/convex.config.js.map +1 -1
  35. package/dist/component/coverage.d.ts +19 -0
  36. package/dist/component/coverage.d.ts.map +1 -0
  37. package/dist/component/coverage.js +30 -0
  38. package/dist/component/coverage.js.map +1 -0
  39. package/dist/component/diagnostics.d.ts +9 -0
  40. package/dist/component/diagnostics.d.ts.map +1 -0
  41. package/dist/component/diagnostics.js +47 -0
  42. package/dist/component/diagnostics.js.map +1 -0
  43. package/dist/component/errors.d.ts +1 -1
  44. package/dist/component/errors.d.ts.map +1 -1
  45. package/dist/component/errors.js.map +1 -1
  46. package/dist/component/eventStore.d.ts +106 -0
  47. package/dist/component/eventStore.d.ts.map +1 -0
  48. package/dist/component/eventStore.js +294 -0
  49. package/dist/component/eventStore.js.map +1 -0
  50. package/dist/component/funnels.d.ts.map +1 -1
  51. package/dist/component/funnels.js +5 -3
  52. package/dist/component/funnels.js.map +1 -1
  53. package/dist/component/geo.d.ts +71 -0
  54. package/dist/component/geo.d.ts.map +1 -0
  55. package/dist/component/geo.js +611 -0
  56. package/dist/component/geo.js.map +1 -0
  57. package/dist/component/goals.d.ts.map +1 -1
  58. package/dist/component/goals.js +25 -9
  59. package/dist/component/goals.js.map +1 -1
  60. package/dist/component/guards.d.ts.map +1 -1
  61. package/dist/component/guards.js.map +1 -1
  62. package/dist/component/http.d.ts.map +1 -1
  63. package/dist/component/http.js +284 -53
  64. package/dist/component/http.js.map +1 -1
  65. package/dist/component/identity.d.ts +13 -0
  66. package/dist/component/identity.d.ts.map +1 -0
  67. package/dist/component/identity.js +58 -0
  68. package/dist/component/identity.js.map +1 -0
  69. package/dist/component/ingest.d.ts +3 -1
  70. package/dist/component/ingest.d.ts.map +1 -1
  71. package/dist/component/ingest.js +1105 -243
  72. package/dist/component/ingest.js.map +1 -1
  73. package/dist/component/live.d.ts +8 -0
  74. package/dist/component/live.d.ts.map +1 -1
  75. package/dist/component/live.js +74 -9
  76. package/dist/component/live.js.map +1 -1
  77. package/dist/component/reports.d.ts +273 -24
  78. package/dist/component/reports.d.ts.map +1 -1
  79. package/dist/component/reports.js +1320 -150
  80. package/dist/component/reports.js.map +1 -1
  81. package/dist/component/retention.d.ts +75 -1
  82. package/dist/component/retention.d.ts.map +1 -1
  83. package/dist/component/retention.js +541 -31
  84. package/dist/component/retention.js.map +1 -1
  85. package/dist/component/sanitize.d.ts +24 -1
  86. package/dist/component/sanitize.d.ts.map +1 -1
  87. package/dist/component/sanitize.js +107 -19
  88. package/dist/component/sanitize.js.map +1 -1
  89. package/dist/component/schema.d.ts +462 -55
  90. package/dist/component/schema.js +195 -15
  91. package/dist/component/schema.js.map +1 -1
  92. package/dist/component/sites.d.ts.map +1 -1
  93. package/dist/component/sites.js +38 -25
  94. package/dist/component/sites.js.map +1 -1
  95. package/dist/component/useragent.d.ts +9 -0
  96. package/dist/component/useragent.d.ts.map +1 -0
  97. package/dist/component/useragent.js +152 -0
  98. package/dist/component/useragent.js.map +1 -0
  99. package/dist/component/validators.d.ts +101 -16
  100. package/dist/component/validators.d.ts.map +1 -1
  101. package/dist/component/validators.js +19 -2
  102. package/dist/component/validators.js.map +1 -1
  103. package/dist/component/visitors.d.ts +19 -0
  104. package/dist/component/visitors.d.ts.map +1 -0
  105. package/dist/component/visitors.js +86 -0
  106. package/dist/component/visitors.js.map +1 -0
  107. package/dist/component/vitals.d.ts +41 -0
  108. package/dist/component/vitals.d.ts.map +1 -0
  109. package/dist/component/vitals.js +115 -0
  110. package/dist/component/vitals.js.map +1 -0
  111. package/dist/react/index.d.ts.map +1 -1
  112. package/dist/react/index.js.map +1 -1
  113. package/dist/tracker/generated.d.ts +8 -4
  114. package/dist/tracker/generated.d.ts.map +1 -1
  115. package/dist/tracker/generated.js +8 -4
  116. package/dist/tracker/generated.js.map +1 -1
  117. package/dist/tracker/tracker.d.ts +1 -1
  118. package/dist/tracker/tracker.d.ts.map +1 -1
  119. package/dist/tracker/tracker.js +81 -33
  120. package/dist/tracker/tracker.js.map +1 -1
  121. package/dist/tracker/vitals.d.ts +10 -0
  122. package/dist/tracker/vitals.d.ts.map +1 -0
  123. package/dist/tracker/vitals.js +140 -0
  124. package/dist/tracker/vitals.js.map +1 -0
  125. package/dist/tracker.min.js +1 -1
  126. package/dist/vitals.min.js +1 -0
  127. package/docs/benchmarks/2026-08-20-realistic.md +171 -0
  128. package/docs/benchmarks/2026-08-21-formal-certification.md +353 -0
  129. package/docs/benchmarks/2026-08-30-alpha6-recertification.md +206 -0
  130. package/docs/federation-setup.md +397 -0
  131. package/docs/federation.md +262 -0
  132. package/docs/upgrading.md +259 -0
  133. package/llms.txt +71 -0
  134. package/package.json +61 -11
  135. package/scripts/benchmark-ingest.mjs +601 -0
  136. package/scripts/generate-federation-keys.mjs +20 -0
  137. package/src/component/_generated/api.ts +18 -0
  138. package/src/component/_generated/component.ts +366 -4
  139. package/src/component/_generated/server.ts +4 -0
  140. package/src/component/affiliates.ts +20 -5
  141. package/src/component/cardinality.ts +117 -0
  142. package/src/component/constants.ts +47 -7
  143. package/src/component/convex.config.ts +11 -1
  144. package/src/component/coverage.ts +36 -0
  145. package/src/component/diagnostics.ts +65 -0
  146. package/src/component/errors.ts +2 -1
  147. package/src/component/eventStore.ts +489 -0
  148. package/src/component/funnels.ts +19 -16
  149. package/src/component/geo.ts +781 -0
  150. package/src/component/goals.ts +45 -16
  151. package/src/component/guards.ts +3 -1
  152. package/src/component/http.ts +403 -60
  153. package/src/component/identity.ts +74 -0
  154. package/src/component/ingest.ts +1652 -291
  155. package/src/component/live.ts +90 -9
  156. package/src/component/reports.ts +1929 -199
  157. package/src/component/retention.ts +774 -97
  158. package/src/component/sanitize.ts +154 -32
  159. package/src/component/schema.ts +219 -15
  160. package/src/component/sites.ts +56 -28
  161. package/src/component/useragent.ts +171 -0
  162. package/src/component/validators.ts +29 -1
  163. package/src/component/visitors.ts +116 -0
  164. package/src/component/vitals.ts +146 -0
@@ -0,0 +1,611 @@
1
+ import { v } from "convex/values";
2
+ import { env, internalAction, internalMutation } from "./_generated/server.js";
3
+ import { AGGREGATE_SHARDS, DAY_MS, DIMENSION_SLOTS, HOURLY_AGGREGATE_SHARDS, HOUR_MS, MAX_BATCH_EVENT_GROUPS, MAX_BATCH_EVENTS, MAX_EVENTS_PER_SESSION_WINDOW, } from "./constants.js";
4
+ import { eventBatchKey, eventBucketStart } from "./eventStore.js";
5
+ import { isPlainRecord } from "./guards.js";
6
+ import { sanitizeContext, stableHash } from "./sanitize.js";
7
+ import { trackerEventValidator } from "./validators.js";
8
+ const GEOIP_TIMEOUT_MS = 1_500;
9
+ const MAX_ENRICHMENT_SESSIONS = 4;
10
+ const DEFAULT_GEOIP_DAILY_LIMIT = 1_000;
11
+ const MAX_GEOIP_DAILY_LIMIT = 1_000_000;
12
+ const geoContextValidator = v.object({
13
+ country: v.optional(v.string()),
14
+ city: v.optional(v.string()),
15
+ latitude: v.optional(v.number()),
16
+ longitude: v.optional(v.number()),
17
+ });
18
+ const geoCandidateEventValidator = trackerEventValidator.pick("eventId", "sessionId", "visitorId", "timestamp", "sequence");
19
+ const geoAggregateEventValidator = v.object({
20
+ sessionId: v.string(),
21
+ timestamp: v.number(),
22
+ priorCountry: v.string(),
23
+ });
24
+ export const probe = internalAction({
25
+ args: { ip: v.optional(v.string()) },
26
+ returns: v.object({
27
+ ipAvailable: v.boolean(),
28
+ requestIpKind: v.union(v.literal("public"), v.literal("private"), v.literal("invalid"), v.literal("unavailable")),
29
+ provider: v.union(v.literal("ipinfo"), v.literal("ipwhois"), v.null()),
30
+ status: v.union(v.literal("disabled"), v.literal("ready"), v.literal("missingToken")),
31
+ location: v.union(geoContextValidator, v.null()),
32
+ }),
33
+ handler: async (ctx, args) => {
34
+ const metadata = await readRequestMetadata(ctx);
35
+ const provider = env.RASTRO_GEOIP_PROVIDER;
36
+ const status = geoIpStatus(provider, env.RASTRO_GEOIP_TOKEN);
37
+ const ip = args.ip && args.ip.length <= 64 ? args.ip : metadata.ip;
38
+ const location = ip && provider && status === "ready"
39
+ ? await resolveGeoIp(ip, provider, env.RASTRO_GEOIP_TOKEN)
40
+ : undefined;
41
+ return {
42
+ ipAvailable: metadata.ip !== null,
43
+ requestIpKind: classifyIp(metadata.ip),
44
+ provider: provider ?? null,
45
+ status,
46
+ location: location ?? null,
47
+ };
48
+ },
49
+ });
50
+ export const claimEnrichment = internalMutation({
51
+ args: {
52
+ siteId: v.id("sites"),
53
+ events: v.array(geoCandidateEventValidator),
54
+ dailyLimit: v.number(),
55
+ },
56
+ returns: v.object({
57
+ sessionIds: v.array(v.string()),
58
+ events: v.array(geoAggregateEventValidator),
59
+ }),
60
+ handler: async (ctx, args) => {
61
+ if (args.events.length === 0 ||
62
+ args.events.length > MAX_BATCH_EVENTS ||
63
+ !Number.isSafeInteger(args.dailyLimit) ||
64
+ args.dailyLimit < 0 ||
65
+ args.dailyLimit > MAX_GEOIP_DAILY_LIMIT) {
66
+ return { sessionIds: [], events: [] };
67
+ }
68
+ const groups = new Map();
69
+ for (const event of args.events) {
70
+ const bucketStart = eventBucketStart(event.timestamp);
71
+ const key = eventBatchKey(event.sessionId, bucketStart);
72
+ const group = groups.get(key) ?? {
73
+ sessionId: event.sessionId,
74
+ bucketStart,
75
+ eventIds: new Set(),
76
+ };
77
+ group.eventIds.add(event.eventId);
78
+ groups.set(key, group);
79
+ }
80
+ if (groups.size > MAX_BATCH_EVENT_GROUPS) {
81
+ return { sessionIds: [], events: [] };
82
+ }
83
+ const persistedEvents = new Map();
84
+ await Promise.all([...groups].map(async ([key, group]) => {
85
+ const batches = await ctx.db
86
+ .query("eventBatches")
87
+ .withIndex("by_siteId_and_sessionId_and_bucketStart", (range) => range
88
+ .eq("siteId", args.siteId)
89
+ .eq("sessionId", group.sessionId)
90
+ .eq("bucketStart", group.bucketStart))
91
+ .take(MAX_EVENTS_PER_SESSION_WINDOW + 1);
92
+ persistedEvents.set(key, new Map(batches.flatMap((batch) => batch.events
93
+ .filter((event) => group.eventIds.has(event.eventId))
94
+ .map((event) => [
95
+ event.eventId,
96
+ event.aggregateCountry ?? event.country,
97
+ ]))));
98
+ }));
99
+ const eligible = [];
100
+ const initialEvents = args.events.filter((event) => event.sequence === 0);
101
+ for (const event of initialEvents) {
102
+ if (eligible.includes(event.sessionId))
103
+ continue;
104
+ const persisted = persistedEvents.get(eventBatchKey(event.sessionId, eventBucketStart(event.timestamp)));
105
+ if (!persisted?.has(event.eventId))
106
+ continue;
107
+ const session = await ctx.db
108
+ .query("sessions")
109
+ .withIndex("by_siteId_and_sessionId", (range) => range.eq("siteId", args.siteId).eq("sessionId", event.sessionId))
110
+ .unique();
111
+ if (!session ||
112
+ session.visitorId !== event.visitorId ||
113
+ session.startedAt !== event.timestamp ||
114
+ session.geoLookupAttemptedAt !== undefined ||
115
+ (session.latitude !== undefined && session.longitude !== undefined)) {
116
+ continue;
117
+ }
118
+ eligible.push(event.sessionId);
119
+ }
120
+ const now = Date.now();
121
+ const dayStart = Math.floor(now / DAY_MS) * DAY_MS;
122
+ const budget = await ctx.db
123
+ .query("geoLookupBudgets")
124
+ .withIndex("by_siteId", (range) => range.eq("siteId", args.siteId))
125
+ .unique();
126
+ const used = budget?.dayStart === dayStart ? budget.count : 0;
127
+ const sessionIds = eligible.slice(0, Math.max(0, Math.min(MAX_ENRICHMENT_SESSIONS, args.dailyLimit - used)));
128
+ for (const sessionId of sessionIds) {
129
+ const session = await ctx.db
130
+ .query("sessions")
131
+ .withIndex("by_siteId_and_sessionId", (range) => range.eq("siteId", args.siteId).eq("sessionId", sessionId))
132
+ .unique();
133
+ if (!session || session.geoLookupAttemptedAt !== undefined)
134
+ continue;
135
+ await ctx.db.patch("sessions", session._id, {
136
+ geoLookupAttemptedAt: now,
137
+ });
138
+ }
139
+ if (sessionIds.length > 0) {
140
+ if (budget) {
141
+ await ctx.db.patch("geoLookupBudgets", budget._id, {
142
+ dayStart,
143
+ count: used + sessionIds.length,
144
+ });
145
+ }
146
+ else {
147
+ await ctx.db.insert("geoLookupBudgets", {
148
+ siteId: args.siteId,
149
+ dayStart,
150
+ count: sessionIds.length,
151
+ });
152
+ }
153
+ }
154
+ const claimed = new Set(sessionIds);
155
+ const seenEvents = new Set();
156
+ const correctionEvents = [];
157
+ for (const event of args.events) {
158
+ const key = `${eventBatchKey(event.sessionId, eventBucketStart(event.timestamp))}:${event.eventId}`;
159
+ if (seenEvents.has(key) ||
160
+ !claimed.has(event.sessionId) ||
161
+ !persistedEvents
162
+ .get(eventBatchKey(event.sessionId, eventBucketStart(event.timestamp)))
163
+ ?.has(event.eventId)) {
164
+ continue;
165
+ }
166
+ seenEvents.add(key);
167
+ const priorCountry = persistedEvents
168
+ .get(eventBatchKey(event.sessionId, eventBucketStart(event.timestamp)))
169
+ ?.get(event.eventId);
170
+ if (priorCountry === undefined)
171
+ continue;
172
+ correctionEvents.push({
173
+ sessionId: event.sessionId,
174
+ timestamp: event.timestamp,
175
+ priorCountry,
176
+ });
177
+ }
178
+ return { sessionIds, events: correctionEvents };
179
+ },
180
+ });
181
+ export const applyEnrichment = internalMutation({
182
+ args: {
183
+ siteId: v.id("sites"),
184
+ sessionIds: v.array(v.string()),
185
+ events: v.array(geoAggregateEventValidator),
186
+ context: geoContextValidator,
187
+ },
188
+ returns: v.number(),
189
+ handler: async (ctx, args) => {
190
+ if (args.sessionIds.length === 0 ||
191
+ args.sessionIds.length > MAX_ENRICHMENT_SESSIONS ||
192
+ args.events.length > MAX_BATCH_EVENTS) {
193
+ return 0;
194
+ }
195
+ const context = sanitizeContext(args.context);
196
+ const sessionCountries = new Map();
197
+ let updated = 0;
198
+ for (const sessionId of new Set(args.sessionIds)) {
199
+ const session = await ctx.db
200
+ .query("sessions")
201
+ .withIndex("by_siteId_and_sessionId", (range) => range.eq("siteId", args.siteId).eq("sessionId", sessionId))
202
+ .unique();
203
+ if (!session || session.geoLookupAttemptedAt === undefined)
204
+ continue;
205
+ const sessionCountry = session.country ?? context.country;
206
+ if (sessionCountry)
207
+ sessionCountries.set(sessionId, sessionCountry);
208
+ const sessionGeo = missingGeo(session, context);
209
+ if (Object.keys(sessionGeo).length > 0) {
210
+ await ctx.db.patch("sessions", session._id, sessionGeo);
211
+ }
212
+ const liveSession = await ctx.db
213
+ .query("liveSessions")
214
+ .withIndex("by_siteId_and_sessionId", (range) => range.eq("siteId", args.siteId).eq("sessionId", sessionId))
215
+ .unique();
216
+ if (liveSession) {
217
+ const liveGeo = missingGeo(liveSession, context);
218
+ if (Object.keys(liveGeo).length > 0) {
219
+ await ctx.db.patch("liveSessions", liveSession._id, liveGeo);
220
+ }
221
+ }
222
+ updated += 1;
223
+ }
224
+ if (sessionCountries.size > 0) {
225
+ await correctCountryAggregates(ctx, args.siteId, args.events, sessionCountries);
226
+ }
227
+ return updated;
228
+ },
229
+ });
230
+ export function geoIpDailyLimit(value) {
231
+ if (value === undefined)
232
+ return DEFAULT_GEOIP_DAILY_LIMIT;
233
+ const parsed = Number(value);
234
+ return Number.isSafeInteger(parsed) &&
235
+ parsed >= 0 &&
236
+ parsed <= MAX_GEOIP_DAILY_LIMIT
237
+ ? parsed
238
+ : DEFAULT_GEOIP_DAILY_LIMIT;
239
+ }
240
+ export function geoIpStatus(provider, token) {
241
+ if (!provider)
242
+ return "disabled";
243
+ if (provider === "ipinfo" && !token)
244
+ return "missingToken";
245
+ return "ready";
246
+ }
247
+ export async function readRequestMetadata(ctx) {
248
+ try {
249
+ const metadata = await ctx.meta.getRequestMetadata();
250
+ return { ip: metadata.ip, userAgent: metadata.userAgent };
251
+ }
252
+ catch {
253
+ // Older self-hosted runtimes and convex-test may not implement this syscall.
254
+ return { ip: null, userAgent: null };
255
+ }
256
+ }
257
+ export async function resolveGeoIp(ip, provider, token, fetcher = fetch) {
258
+ if (geoIpStatus(provider, token) !== "ready" || classifyIp(ip) !== "public") {
259
+ return undefined;
260
+ }
261
+ const controller = new AbortController();
262
+ const timeout = setTimeout(() => controller.abort(), GEOIP_TIMEOUT_MS);
263
+ try {
264
+ const response = await fetcher(geoIpRequest(ip, provider, token), provider === "ipinfo"
265
+ ? {
266
+ headers: { Authorization: `Bearer ${token}` },
267
+ signal: controller.signal,
268
+ }
269
+ : { signal: controller.signal });
270
+ if (!response.ok)
271
+ return undefined;
272
+ const value = await response.json();
273
+ return provider === "ipinfo"
274
+ ? parseIpinfoResponse(value)
275
+ : parseIpwhoisResponse(value);
276
+ }
277
+ catch {
278
+ return undefined;
279
+ }
280
+ finally {
281
+ clearTimeout(timeout);
282
+ }
283
+ }
284
+ export function classifyIp(ip) {
285
+ if (ip === null || ip.trim() === "")
286
+ return "unavailable";
287
+ const normalized = ip.trim().toLowerCase();
288
+ const ipv4 = /^\d+\.\d+\.\d+\.\d+$/.test(normalized) ? normalized : undefined;
289
+ if (ipv4)
290
+ return classifyIpv4(ipv4);
291
+ if (!normalized.includes(":"))
292
+ return "invalid";
293
+ return classifyIpv6(normalized);
294
+ }
295
+ export function resolveClientIp(nativeIp, headers, trustProxy = false) {
296
+ if (classifyIp(nativeIp) === "public") {
297
+ return { ip: nativeIp, source: "native" };
298
+ }
299
+ // Forwarded headers require an explicit operator trust decision and a
300
+ // private immediate peer so direct client requests cannot spoof the IP.
301
+ if (!trustProxy || classifyIp(nativeIp) !== "private") {
302
+ return { ip: null, source: "unavailable" };
303
+ }
304
+ const candidates = [
305
+ ...(headers.get("x-forwarded-for")?.split(",").reverse() ?? []),
306
+ headers.get("x-real-ip"),
307
+ headers.get("cf-connecting-ip"),
308
+ ];
309
+ for (const candidate of candidates) {
310
+ const ip = normalizeForwardedIp(candidate);
311
+ if (ip && classifyIp(ip) === "public") {
312
+ return { ip, source: "forwarded" };
313
+ }
314
+ }
315
+ return { ip: null, source: "unavailable" };
316
+ }
317
+ export function isTrustedProxyRequest(nativeIp, trustProxy) {
318
+ return trustProxy && classifyIp(nativeIp) === "private";
319
+ }
320
+ function classifyIpv4(ip) {
321
+ const octets = ip.split(".").map(Number);
322
+ if (octets.length !== 4 ||
323
+ octets.some((part) => !Number.isInteger(part) || part < 0 || part > 255)) {
324
+ return "invalid";
325
+ }
326
+ const [a, b, c] = octets;
327
+ if (a === 0 ||
328
+ a === 10 ||
329
+ a === 127 ||
330
+ (a === 100 && b >= 64 && b <= 127) ||
331
+ (a === 169 && b === 254) ||
332
+ (a === 172 && b >= 16 && b <= 31) ||
333
+ (a === 192 && b === 0 && c === 0) ||
334
+ (a === 192 && b === 0 && c === 2) ||
335
+ (a === 192 && b === 168) ||
336
+ (a === 198 && (b === 18 || b === 19)) ||
337
+ (a === 198 && b === 51 && c === 100) ||
338
+ (a === 203 && b === 0 && c === 113) ||
339
+ a >= 224) {
340
+ return "private";
341
+ }
342
+ return "public";
343
+ }
344
+ function classifyIpv6(ip) {
345
+ const groups = parseIpv6(ip);
346
+ if (!groups)
347
+ return "invalid";
348
+ if (groups.every((group) => group === 0) ||
349
+ (groups.slice(0, 7).every((group) => group === 0) && groups[7] === 1) ||
350
+ (groups[0] & 0xfe00) === 0xfc00 ||
351
+ (groups[0] & 0xffc0) === 0xfe80 ||
352
+ (groups[0] & 0xffc0) === 0xfec0 ||
353
+ (groups[0] & 0xff00) === 0xff00 ||
354
+ (groups[0] === 0x0100 &&
355
+ groups.slice(1, 4).every((group) => group === 0)) ||
356
+ (groups[0] === 0x0064 && groups[1] === 0xff9b && groups[2] === 1) ||
357
+ (groups[0] === 0x2001 && (groups[1] & 0xfe00) === 0) ||
358
+ (groups[0] === 0x2001 && groups[1] === 0x0db8) ||
359
+ groups[0] === 0x2002 ||
360
+ (groups[0] & 0xfff0) === 0x3ff0) {
361
+ return "private";
362
+ }
363
+ if (groups.slice(0, 6).every((group) => group === 0)) {
364
+ return "private";
365
+ }
366
+ if (groups.slice(0, 5).every((group) => group === 0) &&
367
+ groups[5] === 0xffff) {
368
+ const ipv4 = `${groups[6] >> 8}.${groups[6] & 255}.${groups[7] >> 8}.${groups[7] & 255}`;
369
+ return classifyIpv4(ipv4);
370
+ }
371
+ // Current globally routable unicast allocations are within 2000::/3.
372
+ // Unknown/special space fails closed so it is never sent to a provider.
373
+ return (groups[0] & 0xe000) === 0x2000 ? "public" : "private";
374
+ }
375
+ function parseIpv6(ip) {
376
+ let normalized = ip;
377
+ const dottedTail = normalized.match(/(\d+\.\d+\.\d+\.\d+)$/)?.[1];
378
+ if (dottedTail) {
379
+ if (classifyIpv4(dottedTail) === "invalid")
380
+ return undefined;
381
+ const octets = dottedTail.split(".").map(Number);
382
+ normalized =
383
+ normalized.slice(0, -dottedTail.length) +
384
+ `${((octets[0] << 8) | octets[1]).toString(16)}:${((octets[2] << 8) | octets[3]).toString(16)}`;
385
+ }
386
+ const halves = normalized.split("::");
387
+ if (halves.length > 2)
388
+ return undefined;
389
+ const left = halves[0] ? halves[0].split(":") : [];
390
+ const right = halves[1] ? halves[1].split(":") : [];
391
+ if ([...left, ...right].some((group) => !/^[0-9a-f]{1,4}$/.test(group)) ||
392
+ (halves.length === 1 && left.length !== 8) ||
393
+ (halves.length === 2 && left.length + right.length >= 8)) {
394
+ return undefined;
395
+ }
396
+ const fill = halves.length === 2
397
+ ? Array(8 - left.length - right.length).fill(0)
398
+ : [];
399
+ return [...left.map(hexGroup), ...fill, ...right.map(hexGroup)];
400
+ }
401
+ function hexGroup(value) {
402
+ return Number.parseInt(value, 16);
403
+ }
404
+ function normalizeForwardedIp(value) {
405
+ if (!value)
406
+ return undefined;
407
+ let normalized = value.trim().replace(/^"|"$/g, "");
408
+ if (normalized.startsWith("[")) {
409
+ const end = normalized.indexOf("]");
410
+ return end > 0 ? normalized.slice(1, end) : undefined;
411
+ }
412
+ if (/^\d+\.\d+\.\d+\.\d+:\d+$/.test(normalized)) {
413
+ normalized = normalized.slice(0, normalized.lastIndexOf(":"));
414
+ }
415
+ return normalized || undefined;
416
+ }
417
+ async function correctCountryAggregates(ctx, siteId, events, sessionCountries) {
418
+ const corrections = new Map();
419
+ for (const event of events) {
420
+ const country = sessionCountries.get(event.sessionId);
421
+ if (!country || country === event.priorCountry)
422
+ continue;
423
+ for (const granularity of ["hour", "day"]) {
424
+ const interval = granularity === "hour" ? HOUR_MS : DAY_MS;
425
+ const bucketStart = Math.floor(event.timestamp / interval) * interval;
426
+ const shard = stableHash(event.sessionId) %
427
+ (granularity === "hour" ? HOURLY_AGGREGATE_SHARDS : AGGREGATE_SHARDS);
428
+ const key = `${granularity}:${bucketStart}:${shard}`;
429
+ const correction = corrections.get(key) ?? {
430
+ granularity,
431
+ bucketStart,
432
+ shard,
433
+ moves: new Map(),
434
+ };
435
+ const moveKey = `${event.priorCountry}:${country}`;
436
+ const move = correction.moves.get(moveKey) ?? {
437
+ from: event.priorCountry,
438
+ to: country,
439
+ count: 0,
440
+ };
441
+ move.count += 1;
442
+ correction.moves.set(moveKey, move);
443
+ corrections.set(key, correction);
444
+ }
445
+ }
446
+ for (const correction of corrections.values()) {
447
+ const bucket = await ctx.db
448
+ .query("aggregateBuckets")
449
+ .withIndex("by_siteId_and_granularity_and_bucketStart_and_shard", (range) => range
450
+ .eq("siteId", siteId)
451
+ .eq("granularity", correction.granularity)
452
+ .eq("bucketStart", correction.bucketStart)
453
+ .eq("shard", correction.shard))
454
+ .unique();
455
+ if (!bucket)
456
+ continue;
457
+ let dimensions = bucket.dimensions;
458
+ let changed = false;
459
+ for (const move of correction.moves.values()) {
460
+ const corrected = moveCountryCount(dimensions, move.from, move.to, move.count);
461
+ if (corrected) {
462
+ dimensions = corrected;
463
+ changed = true;
464
+ }
465
+ }
466
+ if (changed) {
467
+ await ctx.db.patch("aggregateBuckets", bucket._id, { dimensions });
468
+ }
469
+ }
470
+ }
471
+ function moveCountryCount(current, from, to, requested) {
472
+ const dimensions = current.map((slot) => ({ ...slot }));
473
+ let sourceIndex = dimensions.findIndex((slot) => slot.type === "country" && slot.value === from);
474
+ if (sourceIndex < 0) {
475
+ sourceIndex = dimensions.findIndex((slot) => slot.type === "country" && slot.value === "(other)");
476
+ }
477
+ if (sourceIndex < 0)
478
+ return undefined;
479
+ const source = dimensions[sourceIndex];
480
+ const moved = Math.min(source.count, requested);
481
+ if (moved <= 0)
482
+ return undefined;
483
+ source.count -= moved;
484
+ if (source.count === 0 && source.revenueCents === 0) {
485
+ dimensions.splice(sourceIndex, 1);
486
+ }
487
+ const target = dimensions.find((slot) => slot.type === "country" && slot.value === to);
488
+ if (target) {
489
+ target.count += moved;
490
+ return dimensions;
491
+ }
492
+ const countrySlots = dimensions.filter((slot) => slot.type === "country");
493
+ if (countrySlots.length < DIMENSION_SLOTS - 1) {
494
+ const occupied = new Set(countrySlots.map((slot) => slot.slot));
495
+ let slot = stableHash(to) % DIMENSION_SLOTS;
496
+ while (occupied.has(slot))
497
+ slot = (slot + 1) % DIMENSION_SLOTS;
498
+ dimensions.push({
499
+ type: "country",
500
+ slot,
501
+ value: to,
502
+ count: moved,
503
+ revenueCents: 0,
504
+ });
505
+ return dimensions;
506
+ }
507
+ const overflow = countrySlots.find((slot) => slot.value === "(other)");
508
+ if (overflow) {
509
+ overflow.count += moved;
510
+ return dimensions;
511
+ }
512
+ const occupied = new Set(countrySlots.map((slot) => slot.slot));
513
+ if (countrySlots.length < DIMENSION_SLOTS) {
514
+ let slot = stableHash("(other)") % DIMENSION_SLOTS;
515
+ while (occupied.has(slot))
516
+ slot = (slot + 1) % DIMENSION_SLOTS;
517
+ dimensions.push({
518
+ type: "country",
519
+ slot,
520
+ value: "(other)",
521
+ count: moved,
522
+ revenueCents: 0,
523
+ });
524
+ return dimensions;
525
+ }
526
+ let replacement = countrySlots[0];
527
+ for (const candidate of countrySlots.slice(1)) {
528
+ if (candidate.count < replacement.count)
529
+ replacement = candidate;
530
+ }
531
+ replacement.value = "(other)";
532
+ replacement.count += moved;
533
+ return dimensions;
534
+ }
535
+ function missingGeo(existing, context) {
536
+ const coordinates = (existing.latitude === undefined || existing.longitude === undefined) &&
537
+ context.latitude !== undefined &&
538
+ context.longitude !== undefined
539
+ ? { latitude: context.latitude, longitude: context.longitude }
540
+ : {};
541
+ return {
542
+ ...(existing.country === undefined && context.country !== undefined
543
+ ? { country: context.country }
544
+ : {}),
545
+ ...(existing.city === undefined && context.city !== undefined
546
+ ? { city: context.city }
547
+ : {}),
548
+ ...coordinates,
549
+ };
550
+ }
551
+ function geoIpRequest(ip, provider, token) {
552
+ const encodedIp = encodeURIComponent(ip);
553
+ if (provider === "ipinfo") {
554
+ return new URL(`https://api.ipinfo.io/lookup/${encodedIp}`);
555
+ }
556
+ const url = new URL(token
557
+ ? `https://ipwhois.pro/${encodedIp}`
558
+ : `https://ipwho.is/${encodedIp}`);
559
+ url.searchParams.set("fields", "success,country_code,city,latitude,longitude");
560
+ if (token)
561
+ url.searchParams.set("key", token);
562
+ return url;
563
+ }
564
+ function parseIpinfoResponse(value) {
565
+ if (!isPlainRecord(value) || !isPlainRecord(value.geo))
566
+ return undefined;
567
+ return geoContext({
568
+ country: value.geo.country_code,
569
+ city: value.geo.city,
570
+ latitude: value.geo.latitude,
571
+ longitude: value.geo.longitude,
572
+ });
573
+ }
574
+ function parseIpwhoisResponse(value) {
575
+ if (!isPlainRecord(value) || value.success === false)
576
+ return undefined;
577
+ return geoContext({
578
+ country: value.country_code,
579
+ city: value.city,
580
+ latitude: value.latitude,
581
+ longitude: value.longitude,
582
+ });
583
+ }
584
+ function geoContext(value) {
585
+ const country = typeof value.country === "string" ? value.country : undefined;
586
+ const city = typeof value.city === "string" ? value.city : undefined;
587
+ const latitude = finiteNumber(value.latitude);
588
+ const longitude = finiteNumber(value.longitude);
589
+ const coordinates = latitude !== undefined &&
590
+ longitude !== undefined &&
591
+ latitude >= -90 &&
592
+ latitude <= 90 &&
593
+ longitude >= -180 &&
594
+ longitude <= 180
595
+ ? { latitude, longitude }
596
+ : {};
597
+ if (!country && !city && Object.keys(coordinates).length === 0) {
598
+ return undefined;
599
+ }
600
+ return {
601
+ ...(country ? { country } : {}),
602
+ ...(city ? { city } : {}),
603
+ ...coordinates,
604
+ };
605
+ }
606
+ function finiteNumber(value) {
607
+ return typeof value === "number" && Number.isFinite(value)
608
+ ? value
609
+ : undefined;
610
+ }
611
+ //# sourceMappingURL=geo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/component/geo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/component/goals.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,MAAM;;;;;;;;;uDA+EjB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;KASf,CAAC;AAEH,eAAO,MAAM,MAAM;;;iBASjB,CAAC"}
1
+ {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/component/goals.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,MAAM;;;;;;;;;uDA8GjB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;KASf,CAAC;AAEH,eAAO,MAAM,MAAM;;;iBAUjB,CAAC"}