@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.
Files changed (179) hide show
  1. package/README.md +693 -69
  2. package/agent/integration.md +801 -0
  3. package/agent/manifest.json +205 -0
  4. package/agent/manifest.schema.json +444 -0
  5. package/dist/client/federation.d.ts +381 -0
  6. package/dist/client/federation.d.ts.map +1 -0
  7. package/dist/client/federation.js +274 -0
  8. package/dist/client/federation.js.map +1 -0
  9. package/dist/client/index.d.ts +2673 -15
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +565 -33
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/component/_generated/api.d.ts +22 -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 +315 -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 +28 -1
  29. package/dist/component/constants.d.ts.map +1 -1
  30. package/dist/component/constants.js +44 -1
  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 +27 -0
  36. package/dist/component/coverage.d.ts.map +1 -0
  37. package/dist/component/coverage.js +56 -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 +21 -9
  47. package/dist/component/eventStore.d.ts.map +1 -1
  48. package/dist/component/eventStore.js +142 -152
  49. package/dist/component/eventStore.js.map +1 -1
  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 +73 -0
  54. package/dist/component/geo.d.ts.map +1 -0
  55. package/dist/component/geo.js +648 -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 +8 -5
  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 +281 -62
  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 +498 -95
  72. package/dist/component/ingest.js.map +1 -1
  73. package/dist/component/live.d.ts.map +1 -1
  74. package/dist/component/live.js +7 -6
  75. package/dist/component/live.js.map +1 -1
  76. package/dist/component/localTime.d.ts +25 -0
  77. package/dist/component/localTime.d.ts.map +1 -0
  78. package/dist/component/localTime.js +126 -0
  79. package/dist/component/localTime.js.map +1 -0
  80. package/dist/component/reports.d.ts +266 -10
  81. package/dist/component/reports.d.ts.map +1 -1
  82. package/dist/component/reports.js +1243 -137
  83. package/dist/component/reports.js.map +1 -1
  84. package/dist/component/retention.d.ts +75 -1
  85. package/dist/component/retention.d.ts.map +1 -1
  86. package/dist/component/retention.js +561 -38
  87. package/dist/component/retention.js.map +1 -1
  88. package/dist/component/rollupStore.d.ts +320 -0
  89. package/dist/component/rollupStore.d.ts.map +1 -0
  90. package/dist/component/rollupStore.js +596 -0
  91. package/dist/component/rollupStore.js.map +1 -0
  92. package/dist/component/rollups.d.ts +20 -0
  93. package/dist/component/rollups.d.ts.map +1 -0
  94. package/dist/component/rollups.js +73 -0
  95. package/dist/component/rollups.js.map +1 -0
  96. package/dist/component/sanitize.d.ts +24 -1
  97. package/dist/component/sanitize.d.ts.map +1 -1
  98. package/dist/component/sanitize.js +96 -16
  99. package/dist/component/sanitize.js.map +1 -1
  100. package/dist/component/schema.d.ts +687 -65
  101. package/dist/component/schema.js +187 -20
  102. package/dist/component/schema.js.map +1 -1
  103. package/dist/component/sites.d.ts +12 -0
  104. package/dist/component/sites.d.ts.map +1 -1
  105. package/dist/component/sites.js +41 -7
  106. package/dist/component/sites.js.map +1 -1
  107. package/dist/component/useragent.d.ts +9 -0
  108. package/dist/component/useragent.d.ts.map +1 -0
  109. package/dist/component/useragent.js +152 -0
  110. package/dist/component/useragent.js.map +1 -0
  111. package/dist/component/validators.d.ts +124 -69
  112. package/dist/component/validators.d.ts.map +1 -1
  113. package/dist/component/validators.js +35 -14
  114. package/dist/component/validators.js.map +1 -1
  115. package/dist/component/visitors.d.ts +19 -0
  116. package/dist/component/visitors.d.ts.map +1 -0
  117. package/dist/component/visitors.js +86 -0
  118. package/dist/component/visitors.js.map +1 -0
  119. package/dist/component/vitals.d.ts +41 -0
  120. package/dist/component/vitals.d.ts.map +1 -0
  121. package/dist/component/vitals.js +115 -0
  122. package/dist/component/vitals.js.map +1 -0
  123. package/dist/react/index.d.ts.map +1 -1
  124. package/dist/react/index.js.map +1 -1
  125. package/dist/tracker/generated.d.ts +11 -4
  126. package/dist/tracker/generated.d.ts.map +1 -1
  127. package/dist/tracker/generated.js +11 -4
  128. package/dist/tracker/generated.js.map +1 -1
  129. package/dist/tracker/tracker.d.ts +1 -1
  130. package/dist/tracker/tracker.d.ts.map +1 -1
  131. package/dist/tracker/tracker.js +57 -20
  132. package/dist/tracker/tracker.js.map +1 -1
  133. package/dist/tracker/vitals.d.ts +10 -0
  134. package/dist/tracker/vitals.d.ts.map +1 -0
  135. package/dist/tracker/vitals.js +140 -0
  136. package/dist/tracker/vitals.js.map +1 -0
  137. package/dist/tracker.min.js +1 -1
  138. package/dist/vitals.min.js +1 -0
  139. package/docs/benchmarks/2026-08-20-realistic.md +76 -76
  140. package/docs/benchmarks/2026-08-21-formal-certification.md +353 -0
  141. package/docs/benchmarks/2026-08-30-alpha6-recertification.md +206 -0
  142. package/docs/federation-setup.md +464 -0
  143. package/docs/federation.md +352 -0
  144. package/docs/upgrading.md +344 -0
  145. package/llms.txt +72 -0
  146. package/package.json +55 -11
  147. package/scripts/benchmark-ingest.mjs +175 -73
  148. package/scripts/generate-federation-keys.mjs +20 -0
  149. package/src/component/_generated/api.ts +22 -0
  150. package/src/component/_generated/component.ts +381 -4
  151. package/src/component/_generated/server.ts +4 -0
  152. package/src/component/affiliates.ts +20 -5
  153. package/src/component/cardinality.ts +117 -0
  154. package/src/component/constants.ts +44 -1
  155. package/src/component/convex.config.ts +11 -1
  156. package/src/component/coverage.ts +71 -0
  157. package/src/component/diagnostics.ts +65 -0
  158. package/src/component/errors.ts +2 -1
  159. package/src/component/eventStore.ts +217 -193
  160. package/src/component/funnels.ts +19 -16
  161. package/src/component/geo.ts +835 -0
  162. package/src/component/goals.ts +29 -21
  163. package/src/component/guards.ts +3 -1
  164. package/src/component/http.ts +404 -70
  165. package/src/component/identity.ts +74 -0
  166. package/src/component/ingest.ts +894 -188
  167. package/src/component/live.ts +13 -7
  168. package/src/component/localTime.ts +167 -0
  169. package/src/component/reports.ts +1872 -197
  170. package/src/component/retention.ts +788 -96
  171. package/src/component/rollupStore.ts +799 -0
  172. package/src/component/rollups.ts +82 -0
  173. package/src/component/sanitize.ts +144 -29
  174. package/src/component/schema.ts +217 -21
  175. package/src/component/sites.ts +59 -12
  176. package/src/component/useragent.ts +171 -0
  177. package/src/component/validators.ts +49 -14
  178. package/src/component/visitors.ts +116 -0
  179. package/src/component/vitals.ts +146 -0
@@ -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;;;;;;;;;uDAoGjB,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"}
@@ -3,7 +3,7 @@ import { mutation, query } from "./_generated/server.js";
3
3
  import { MAX_GOALS_PER_SITE } from "./constants.js";
4
4
  import { fail } from "./errors.js";
5
5
  import { cleanString, isValidMoney, sanitizePath, sanitizeSlug, } from "./sanitize.js";
6
- import { goalFieldsValidator, goalMatchTypeValidator, } from "./validators.js";
6
+ import { goalFieldsValidator, goalMatchTypeValidator } from "./validators.js";
7
7
  const goalDocumentValidator = goalFieldsValidator.extend({
8
8
  _id: v.id("goals"),
9
9
  _creationTime: v.number(),
@@ -27,9 +27,10 @@ export const upsert = mutation({
27
27
  let matchValue;
28
28
  try {
29
29
  key = sanitizeSlug(args.key, "key");
30
- matchValue = args.matchType === "pageview"
31
- ? sanitizePath(args.matchValue)
32
- : cleanString(args.matchValue, 80);
30
+ matchValue =
31
+ args.matchType === "pageview"
32
+ ? sanitizePath(args.matchValue)
33
+ : cleanString(args.matchValue, 80);
33
34
  }
34
35
  catch (error) {
35
36
  fail("INVALID_ARGUMENT", error instanceof Error ? error.message : "invalid goal");
@@ -84,7 +85,9 @@ export const upsert = mutation({
84
85
  fail("CONFLICT", "another active goal already uses this matcher");
85
86
  }
86
87
  if (goals.length >= MAX_GOALS_PER_SITE) {
87
- fail("LIMIT_EXCEEDED", "goal limit reached", { limit: MAX_GOALS_PER_SITE });
88
+ fail("LIMIT_EXCEEDED", "goal limit reached", {
89
+ limit: MAX_GOALS_PER_SITE,
90
+ });
88
91
  }
89
92
  return await ctx.db.insert("goals", {
90
93
  siteId: args.siteId,
@@ -1 +1 @@
1
- {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/component/goals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/component/goals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/component/guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/component/guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC"}
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/component/guards.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/component/guards.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAC3B,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/component/http.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI,oCAAe,CAAC;eAqUX,IAAI"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/component/http.ts"],"names":[],"mappings":"AAwFA,QAAA,MAAM,IAAI,oCAAe,CAAC;eAsjBX,IAAI"}
@@ -1,20 +1,66 @@
1
1
  import { httpRouter } from "convex/server";
2
2
  import { ConvexError } from "convex/values";
3
- import { api } from "./_generated/api.js";
4
- import { httpAction } from "./_generated/server.js";
5
- import { MAX_BATCH_BYTES } from "./constants.js";
3
+ import { api, internal } from "./_generated/api.js";
4
+ import { env, httpAction } from "./_generated/server.js";
5
+ import { MAX_BATCH_BYTES, MAX_BATCH_EVENT_GROUPS, MAX_BATCH_EVENTS, RATE_LIMIT_WINDOW_MS, } from "./constants.js";
6
+ import { classifyIp, geoIpDailyLimit, geoIpStatus, isTrustedProxyRequest, readRequestMetadata, resolveClientIp, resolveGeoIp, } from "./geo.js";
6
7
  import { isPlainRecord } from "./guards.js";
7
- import { TRACKER_GZIP_BASE64, TRACKER_GZIP_BYTES, } from "../tracker/generated.js";
8
+ import { alignClock, sanitizeEvent } from "./sanitize.js";
9
+ import { deriveVisitorKey, randomSecret } from "./identity.js";
10
+ import { classifyClient, isKnownBot } from "./useragent.js";
11
+ import { RASTRO_VERSION, TRACKER_GZIP_BASE64, TRACKER_GZIP_BYTES, TRACKER_HASH, VITALS_GZIP_BASE64, VITALS_GZIP_BYTES, VITALS_HASH, } from "../tracker/generated.js";
8
12
  const TRACKER_GZIP = Uint8Array.from(atob(TRACKER_GZIP_BASE64), (character) => character.charCodeAt(0));
13
+ const VITALS_GZIP = Uint8Array.from(atob(VITALS_GZIP_BASE64), (character) => character.charCodeAt(0));
14
+ // Five minutes fresh, then up to an hour of stale-while-revalidate: a visitor
15
+ // who returns after a deploy gets at most one stale load before the browser's
16
+ // background revalidation, and that revalidation is a 304 against the ETag.
17
+ const SCRIPT_CACHE_CONTROL = "public, max-age=300, stale-while-revalidate=3600";
18
+ /**
19
+ * Serves one pre-gzipped module with a strong ETag from its build-time content
20
+ * hash. A matching If-None-Match answers 304 with the same caching and CORS
21
+ * headers, so a revalidation costs a header exchange instead of the script.
22
+ */
23
+ function scriptResponse(request, body, byteLength, hash) {
24
+ const etag = `"${hash}"`;
25
+ const headers = {
26
+ ETag: etag,
27
+ "Cache-Control": SCRIPT_CACHE_CONTROL,
28
+ "Access-Control-Allow-Origin": "*",
29
+ Vary: "Accept-Encoding",
30
+ };
31
+ if (etagMatches(request.headers.get("if-none-match"), etag)) {
32
+ return new Response(null, { status: 304, headers });
33
+ }
34
+ return new Response(body, {
35
+ status: 200,
36
+ headers: {
37
+ ...headers,
38
+ "Content-Type": "text/javascript; charset=utf-8",
39
+ "Content-Encoding": "gzip",
40
+ "Content-Length": String(byteLength),
41
+ },
42
+ });
43
+ }
44
+ /** RFC 9110 If-None-Match: a list of entity tags or "*", weak markers ignored. */
45
+ function etagMatches(header, etag) {
46
+ if (!header)
47
+ return false;
48
+ return header.split(",").some((candidate) => {
49
+ const value = candidate.trim().replace(/^W\//, "");
50
+ return value === "*" || value === etag;
51
+ });
52
+ }
9
53
  const http = httpRouter();
10
54
  http.route({
11
55
  path: "/events",
12
56
  method: "POST",
13
57
  handler: httpAction(async (ctx, request) => {
58
+ const requestId = crypto.randomUUID();
14
59
  const origin = request.headers.get("origin");
15
- if (!origin)
16
- return json({ error: { code: "ORIGIN_REQUIRED" } }, 400);
17
- const headers = corsHeaders(origin);
60
+ if (!origin) {
61
+ return json({ error: { code: "ORIGIN_REQUIRED" } }, 400, requestIdHeaders(requestId));
62
+ }
63
+ const headers = corsHeaders(origin, requestId);
18
64
  const contentLength = Number(request.headers.get("content-length"));
19
65
  if (Number.isFinite(contentLength) && contentLength > MAX_BATCH_BYTES) {
20
66
  return json({ error: { code: "BATCH_TOO_LARGE", limitBytes: MAX_BATCH_BYTES } }, 413, headers);
@@ -36,21 +82,82 @@ http.route({
36
82
  },
37
83
  }, 400, headers);
38
84
  }
39
- const userAgent = request.headers.get("user-agent") ?? "";
85
+ // The sender's clock says when its events happened, but a clock minutes
86
+ // off would keep the visitor out of the live view and file the traffic
87
+ // under another hour. The batch also says when it was sent, and that offset
88
+ // re-anchors every event here, before the transaction and the geo
89
+ // enrichment read them, so both see the same timestamps.
90
+ const events = alignClock(payload.events, payload.sentAt, Date.now());
91
+ const trustProxy = env.RASTRO_TRUST_PROXY === "true";
92
+ const metadata = await readRequestMetadata(ctx);
93
+ const proxyRequestTrusted = isTrustedProxyRequest(metadata.ip, trustProxy);
94
+ const clientIp = resolveClientIp(metadata.ip, request.headers, trustProxy);
95
+ const edgeGeo = proxyRequestTrusted ? geoFromHeaders(request) : {};
96
+ const userAgent = metadata.userAgent ?? request.headers.get("user-agent") ?? "";
97
+ // Self-declared bots never reach a transaction; the response keeps the
98
+ // counter shape the tracker expects and names the reason in a header.
99
+ if (isKnownBot(userAgent)) {
100
+ return json({ accepted: 0, duplicates: 0, rejected: events.length }, 200, { ...headers, "X-Rastro-Rejected": "bot" });
101
+ }
102
+ // Anonymous batches (visitorId === sessionId) get a salted daily key so
103
+ // repeat visits count once; the IP itself stops here.
104
+ const anonymous = events.some((event) => event.visitorId === event.sessionId);
105
+ const visitorKey = anonymous && clientIp.ip && userAgent
106
+ ? await deriveVisitorKey({
107
+ secret: await visitorSecret(ctx),
108
+ now: Date.now(),
109
+ siteId: payload.siteId,
110
+ ip: clientIp.ip,
111
+ userAgent,
112
+ })
113
+ : undefined;
40
114
  const context = {
41
- country: firstHeader(request, ["x-vercel-ip-country", "cf-ipcountry"]),
42
- city: decodeHeader(firstHeader(request, ["x-vercel-ip-city", "cf-ipcity"])),
43
- latitude: numericHeader(request, ["x-vercel-ip-latitude", "cf-iplatitude"]),
44
- longitude: numericHeader(request, ["x-vercel-ip-longitude", "cf-iplongitude"]),
45
- ...classifyUserAgent(userAgent),
115
+ ...edgeGeo,
116
+ ...classifyClient(userAgent, request.headers),
117
+ ...(visitorKey ? { visitorKey } : {}),
46
118
  };
47
119
  try {
48
120
  const result = await ctx.runMutation(api.ingest.ingestBatch, {
49
121
  siteId: payload.siteId,
50
122
  origin,
51
- events: payload.events,
123
+ events,
52
124
  context,
53
125
  });
126
+ if (clientIp.ip &&
127
+ !hasCoordinates(edgeGeo) &&
128
+ geoIpStatus(env.RASTRO_GEOIP_PROVIDER, env.RASTRO_GEOIP_TOKEN) ===
129
+ "ready") {
130
+ const candidates = enrichmentCandidateEvents(events);
131
+ if (candidates) {
132
+ let stage = "claim";
133
+ try {
134
+ const claim = await ctx.runMutation(internal.geo.claimEnrichment, {
135
+ siteId: payload.siteId,
136
+ events: candidates,
137
+ dailyLimit: geoIpDailyLimit(env.RASTRO_GEOIP_DAILY_LIMIT),
138
+ });
139
+ if (claim.sessionIds.length > 0) {
140
+ stage = "resolve";
141
+ const providerGeo = await resolveGeoIp(clientIp.ip, env.RASTRO_GEOIP_PROVIDER, env.RASTRO_GEOIP_TOKEN);
142
+ if (providerGeo) {
143
+ stage = "apply";
144
+ await ctx.runMutation(internal.geo.applyEnrichment, {
145
+ siteId: payload.siteId,
146
+ sessionIds: claim.sessionIds,
147
+ events: claim.events,
148
+ context: providerGeo,
149
+ });
150
+ }
151
+ else {
152
+ logGeoIpFailure(requestId, stage, env.RASTRO_GEOIP_PROVIDER);
153
+ }
154
+ }
155
+ }
156
+ catch {
157
+ logGeoIpFailure(requestId, stage, env.RASTRO_GEOIP_PROVIDER);
158
+ }
159
+ }
160
+ }
54
161
  return json(result, 200, headers);
55
162
  }
56
163
  catch (error) {
@@ -61,9 +168,15 @@ http.route({
61
168
  : data.code === "RATE_LIMITED"
62
169
  ? 429
63
170
  : 400;
64
- return json({ error: data }, status, headers);
171
+ return json({ error: data }, status, status === 429
172
+ ? {
173
+ ...headers,
174
+ "Retry-After": String(Math.ceil(RATE_LIMIT_WINDOW_MS / 1_000)),
175
+ }
176
+ : headers);
65
177
  }
66
- return json({ error: { code: "INVALID_REQUEST" } }, 400, headers);
178
+ logInternalHttpError(requestId);
179
+ return json({ error: { code: "INTERNAL_ERROR", requestId } }, 500, headers);
67
180
  }
68
181
  }),
69
182
  });
@@ -89,35 +202,73 @@ http.route({
89
202
  http.route({
90
203
  path: "/tracker.js",
91
204
  method: "GET",
92
- handler: httpAction(async () => {
93
- return new Response(TRACKER_GZIP, {
94
- status: 200,
95
- headers: {
96
- "Content-Type": "text/javascript; charset=utf-8",
97
- "Content-Encoding": "gzip",
98
- "Content-Length": String(TRACKER_GZIP_BYTES),
99
- "Cache-Control": "public, max-age=300, stale-while-revalidate=86400",
100
- "Access-Control-Allow-Origin": "*",
101
- Vary: "Accept-Encoding",
102
- },
103
- });
104
- }),
205
+ handler: httpAction(async (_ctx, request) => scriptResponse(request, TRACKER_GZIP, TRACKER_GZIP_BYTES, TRACKER_HASH)),
206
+ });
207
+ http.route({
208
+ path: "/vitals.js",
209
+ method: "GET",
210
+ handler: httpAction(async (_ctx, request) => scriptResponse(request, VITALS_GZIP, VITALS_GZIP_BYTES, VITALS_HASH)),
105
211
  });
106
212
  http.route({
107
213
  path: "/health",
108
214
  method: "GET",
109
- handler: httpAction(async () => {
110
- return json({ ok: true, component: "@iann29/rastro" }, 200, {
215
+ handler: httpAction(async (ctx, request) => {
216
+ const trustProxy = env.RASTRO_TRUST_PROXY === "true";
217
+ const metadata = await readRequestMetadata(ctx);
218
+ const proxyRequestTrusted = isTrustedProxyRequest(metadata.ip, trustProxy);
219
+ const clientIp = resolveClientIp(metadata.ip, request.headers, trustProxy);
220
+ const provider = env.RASTRO_GEOIP_PROVIDER;
221
+ return json({
222
+ ok: true,
223
+ component: "@iann29/rastro",
224
+ requestMetadata: {
225
+ runtimeIpKind: classifyIp(metadata.ip),
226
+ clientIpAvailable: clientIp.ip !== null,
227
+ clientIpSource: clientIp.source,
228
+ userAgentAvailable: metadata.userAgent !== null,
229
+ },
230
+ geoIp: {
231
+ provider: provider ?? null,
232
+ status: geoIpStatus(provider, env.RASTRO_GEOIP_TOKEN),
233
+ dailyLimit: geoIpDailyLimit(env.RASTRO_GEOIP_DAILY_LIMIT),
234
+ trustedProxy: trustProxy,
235
+ proxyRequestTrusted,
236
+ edgeHeadersAvailable: proxyRequestTrusted &&
237
+ Object.keys(geoFromHeaders(request)).length > 0,
238
+ },
239
+ features: {
240
+ botDetection: "userAgent",
241
+ uniqueVisitors: clientIp.ip &&
242
+ (metadata.userAgent ?? request.headers.get("user-agent"))
243
+ ? "dailyHash"
244
+ : "session",
245
+ webVitals: "optIn",
246
+ siteMap: "dailyRollup",
247
+ liveDepartures: "leaveBeacon",
248
+ },
249
+ tracker: {
250
+ version: RASTRO_VERSION,
251
+ hash: TRACKER_HASH,
252
+ vitalsHash: VITALS_HASH,
253
+ },
254
+ }, 200, {
111
255
  "Access-Control-Allow-Origin": "*",
112
256
  "Cache-Control": "no-store",
113
257
  });
114
258
  }),
115
259
  });
116
260
  function parsePayload(value) {
117
- if (!isPlainRecord(value) || typeof value.siteId !== "string" || !Array.isArray(value.events)) {
261
+ if (!isPlainRecord(value) ||
262
+ typeof value.siteId !== "string" ||
263
+ !Array.isArray(value.events)) {
118
264
  throw new Error("body must contain siteId and events");
119
265
  }
120
- return { siteId: value.siteId, events: value.events.map(parseEvent) };
266
+ const sentAt = optionalNumber(value.sentAt, "sentAt");
267
+ return {
268
+ siteId: value.siteId,
269
+ events: value.events.map(parseEvent),
270
+ ...(sentAt === undefined ? {} : { sentAt }),
271
+ };
121
272
  }
122
273
  class PayloadTooLargeError extends Error {
123
274
  }
@@ -155,7 +306,9 @@ function parseEvent(value) {
155
306
  type !== "custom" &&
156
307
  type !== "conversion" &&
157
308
  type !== "heartbeat" &&
158
- type !== "outbound") {
309
+ type !== "leave" &&
310
+ type !== "outbound" &&
311
+ type !== "vital") {
159
312
  throw new Error("event type is invalid");
160
313
  }
161
314
  if (typeof value.eventId !== "string" ||
@@ -197,6 +350,9 @@ function parseEvent(value) {
197
350
  ...(optionalString(value.affiliateSlug, "affiliateSlug") !== undefined
198
351
  ? { affiliateSlug: optionalString(value.affiliateSlug, "affiliateSlug") }
199
352
  : {}),
353
+ ...(optionalNumber(value.value, "value") !== undefined
354
+ ? { value: optionalNumber(value.value, "value") }
355
+ : {}),
200
356
  };
201
357
  }
202
358
  function parseProperties(value) {
@@ -230,6 +386,60 @@ function optionalNumber(value, field) {
230
386
  throw new Error(`${field} must be a number`);
231
387
  return value;
232
388
  }
389
+ function enrichmentCandidateEvents(events) {
390
+ if (events.length === 0 || events.length > MAX_BATCH_EVENTS)
391
+ return undefined;
392
+ const now = Date.now();
393
+ const sanitized = events.flatMap((event) => {
394
+ try {
395
+ return [sanitizeEvent(event, now)];
396
+ }
397
+ catch {
398
+ return [];
399
+ }
400
+ });
401
+ const sessionIds = [...new Set(sanitized.map((event) => event.sessionId))];
402
+ if (!sanitized.some((event) => event.sequence === 0) ||
403
+ sessionIds.length > MAX_BATCH_EVENT_GROUPS ||
404
+ sessionIds.some((sessionId) => sessionId.length === 0 || sessionId.length > 128)) {
405
+ return undefined;
406
+ }
407
+ return sanitized.map(({ eventId, sessionId, visitorId, timestamp, sequence }) => ({
408
+ eventId,
409
+ sessionId,
410
+ visitorId,
411
+ timestamp,
412
+ sequence,
413
+ }));
414
+ }
415
+ function geoFromHeaders(request) {
416
+ const country = firstHeader(request, ["x-vercel-ip-country", "cf-ipcountry"]);
417
+ const city = decodeHeader(firstHeader(request, ["x-vercel-ip-city", "cf-ipcity"]));
418
+ const latitude = numericHeader(request, [
419
+ "x-vercel-ip-latitude",
420
+ "cf-iplatitude",
421
+ ]);
422
+ const longitude = numericHeader(request, [
423
+ "x-vercel-ip-longitude",
424
+ "cf-iplongitude",
425
+ ]);
426
+ return {
427
+ ...(country ? { country } : {}),
428
+ ...(city ? { city } : {}),
429
+ ...(validCoordinates(latitude, longitude) ? { latitude, longitude } : {}),
430
+ };
431
+ }
432
+ function hasCoordinates(value) {
433
+ return value.latitude !== undefined && value.longitude !== undefined;
434
+ }
435
+ function validCoordinates(latitude, longitude) {
436
+ return (latitude !== undefined &&
437
+ longitude !== undefined &&
438
+ latitude >= -90 &&
439
+ latitude <= 90 &&
440
+ longitude >= -180 &&
441
+ longitude <= 180);
442
+ }
233
443
  function firstHeader(request, names) {
234
444
  for (const name of names) {
235
445
  const value = request.headers.get(name);
@@ -255,40 +465,36 @@ function decodeHeader(value) {
255
465
  return value;
256
466
  }
257
467
  }
258
- function classifyUserAgent(userAgent) {
259
- const browser = /Edg\//.test(userAgent)
260
- ? "Edge"
261
- : /Firefox\//.test(userAgent)
262
- ? "Firefox"
263
- : /Chrome\//.test(userAgent)
264
- ? "Chrome"
265
- : /Safari\//.test(userAgent)
266
- ? "Safari"
267
- : "Other";
268
- const os = /Android/.test(userAgent)
269
- ? "Android"
270
- : /iPhone|iPad/.test(userAgent)
271
- ? "iOS"
272
- : /Windows/.test(userAgent)
273
- ? "Windows"
274
- : /Mac OS X/.test(userAgent)
275
- ? "macOS"
276
- : /Linux/.test(userAgent)
277
- ? "Linux"
278
- : "Other";
279
- const device = /iPad|Tablet/.test(userAgent)
280
- ? "tablet"
281
- : /Mobile|Android|iPhone/.test(userAgent)
282
- ? "mobile"
283
- : "desktop";
284
- return { browser, os, device };
468
+ function logInternalHttpError(requestId) {
469
+ console.error(JSON.stringify({
470
+ level: "error",
471
+ event: "rastro.http.internal_error",
472
+ requestId,
473
+ route: "/events",
474
+ method: "POST",
475
+ }));
476
+ }
477
+ function logGeoIpFailure(requestId, stage, provider) {
478
+ console.warn(JSON.stringify({
479
+ level: "warn",
480
+ event: "rastro.geoip.failure",
481
+ requestId,
482
+ route: "/events",
483
+ stage,
484
+ provider,
485
+ }));
285
486
  }
286
- function corsHeaders(origin) {
487
+ function requestIdHeaders(requestId) {
488
+ return { "X-Request-ID": requestId };
489
+ }
490
+ function corsHeaders(origin, requestId) {
287
491
  return {
288
492
  "Access-Control-Allow-Origin": origin,
289
493
  "Access-Control-Allow-Methods": "POST, OPTIONS",
290
494
  "Access-Control-Allow-Headers": "Content-Type",
495
+ "Access-Control-Expose-Headers": "X-Request-ID, Retry-After",
291
496
  "Access-Control-Max-Age": "86400",
497
+ ...(requestId ? requestIdHeaders(requestId) : {}),
292
498
  Vary: "Origin",
293
499
  };
294
500
  }
@@ -299,4 +505,17 @@ function json(value, status, headers) {
299
505
  });
300
506
  }
301
507
  export default http;
508
+ let cachedVisitorSecret;
509
+ /** The per-deployment salt behind anonymous visitor keys, created on first use. */
510
+ async function visitorSecret(ctx) {
511
+ if (cachedVisitorSecret)
512
+ return cachedVisitorSecret;
513
+ const stored = await ctx.runQuery(internal.identity.secret, {});
514
+ cachedVisitorSecret =
515
+ stored ??
516
+ (await ctx.runMutation(internal.identity.ensureSecret, {
517
+ candidate: randomSecret(),
518
+ }));
519
+ return cachedVisitorSecret;
520
+ }
302
521
  //# sourceMappingURL=http.js.map