@iann29/rastro 0.1.0-alpha.1 → 0.1.0-alpha.3

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 (68) hide show
  1. package/README.md +80 -18
  2. package/dist/component/_generated/api.d.ts +4 -0
  3. package/dist/component/_generated/api.d.ts.map +1 -1
  4. package/dist/component/_generated/api.js.map +1 -1
  5. package/dist/component/_generated/component.d.ts +10 -0
  6. package/dist/component/_generated/component.d.ts.map +1 -1
  7. package/dist/component/_generated/server.d.ts +4 -0
  8. package/dist/component/_generated/server.d.ts.map +1 -1
  9. package/dist/component/_generated/server.js.map +1 -1
  10. package/dist/component/constants.d.ts +2 -0
  11. package/dist/component/constants.d.ts.map +1 -1
  12. package/dist/component/constants.js +2 -0
  13. package/dist/component/constants.js.map +1 -1
  14. package/dist/component/convex.config.d.ts +6 -1
  15. package/dist/component/convex.config.js +9 -1
  16. package/dist/component/convex.config.js.map +1 -1
  17. package/dist/component/diagnostics.d.ts +9 -0
  18. package/dist/component/diagnostics.d.ts.map +1 -0
  19. package/dist/component/diagnostics.js +47 -0
  20. package/dist/component/diagnostics.js.map +1 -0
  21. package/dist/component/eventStore.d.ts +18 -8
  22. package/dist/component/eventStore.d.ts.map +1 -1
  23. package/dist/component/eventStore.js +134 -147
  24. package/dist/component/eventStore.js.map +1 -1
  25. package/dist/component/geo.d.ts +71 -0
  26. package/dist/component/geo.d.ts.map +1 -0
  27. package/dist/component/geo.js +610 -0
  28. package/dist/component/geo.js.map +1 -0
  29. package/dist/component/http.d.ts.map +1 -1
  30. package/dist/component/http.js +124 -11
  31. package/dist/component/http.js.map +1 -1
  32. package/dist/component/ingest.d.ts.map +1 -1
  33. package/dist/component/ingest.js +34 -14
  34. package/dist/component/ingest.js.map +1 -1
  35. package/dist/component/reports.d.ts +8 -8
  36. package/dist/component/reports.d.ts.map +1 -1
  37. package/dist/component/reports.js +10 -30
  38. package/dist/component/reports.js.map +1 -1
  39. package/dist/component/schema.d.ts +47 -52
  40. package/dist/component/schema.js +21 -20
  41. package/dist/component/schema.js.map +1 -1
  42. package/dist/component/validators.d.ts +49 -49
  43. package/dist/component/validators.d.ts.map +1 -1
  44. package/dist/component/validators.js +4 -11
  45. package/dist/component/validators.js.map +1 -1
  46. package/dist/tracker/generated.d.ts +4 -4
  47. package/dist/tracker/generated.d.ts.map +1 -1
  48. package/dist/tracker/generated.js +4 -4
  49. package/dist/tracker/generated.js.map +1 -1
  50. package/dist/tracker/tracker.js +7 -6
  51. package/dist/tracker/tracker.js.map +1 -1
  52. package/dist/tracker.min.js +1 -1
  53. package/docs/benchmarks/2026-08-20-realistic.md +1 -1
  54. package/package.json +1 -1
  55. package/scripts/benchmark-ingest.mjs +81 -32
  56. package/src/component/_generated/api.ts +4 -0
  57. package/src/component/_generated/component.ts +13 -0
  58. package/src/component/_generated/server.ts +4 -0
  59. package/src/component/constants.ts +2 -0
  60. package/src/component/convex.config.ts +11 -1
  61. package/src/component/diagnostics.ts +64 -0
  62. package/src/component/eventStore.ts +195 -178
  63. package/src/component/geo.ts +779 -0
  64. package/src/component/http.ts +184 -17
  65. package/src/component/ingest.ts +49 -15
  66. package/src/component/reports.ts +12 -38
  67. package/src/component/schema.ts +23 -21
  68. package/src/component/validators.ts +7 -12
@@ -52,6 +52,55 @@ export declare const ingestContextValidator: import("convex/values").VObject<{
52
52
  os: import("convex/values").VString<string | undefined, "optional">;
53
53
  device: import("convex/values").VString<string | undefined, "optional">;
54
54
  }, "required", "browser" | "city" | "country" | "device" | "latitude" | "longitude" | "os">;
55
+ export declare const batchedEventValidator: import("convex/values").VObject<{
56
+ affiliateSlug?: string | undefined;
57
+ aggregateCountry?: string | undefined;
58
+ browser?: string | undefined;
59
+ city?: string | undefined;
60
+ country?: string | undefined;
61
+ currency?: string | undefined;
62
+ device?: string | undefined;
63
+ eventId: string;
64
+ href?: string | undefined;
65
+ latitude?: number | undefined;
66
+ longitude?: number | undefined;
67
+ name?: string | undefined;
68
+ os?: string | undefined;
69
+ path: string;
70
+ properties?: Record<string, string | number | boolean | null> | undefined;
71
+ referrer?: string | undefined;
72
+ revenueCents?: number | undefined;
73
+ sequence: number;
74
+ sessionId: string;
75
+ target?: string | undefined;
76
+ timestamp: number;
77
+ type: "click" | "conversion" | "custom" | "heartbeat" | "outbound" | "pageview";
78
+ visitorId: string;
79
+ }, {
80
+ eventId: import("convex/values").VString<string, "required">;
81
+ sessionId: import("convex/values").VString<string, "required">;
82
+ visitorId: import("convex/values").VString<string, "required">;
83
+ type: import("convex/values").VUnion<"click" | "conversion" | "custom" | "heartbeat" | "outbound" | "pageview", [import("convex/values").VLiteral<"pageview", "required">, import("convex/values").VLiteral<"click", "required">, import("convex/values").VLiteral<"custom", "required">, import("convex/values").VLiteral<"conversion", "required">, import("convex/values").VLiteral<"heartbeat", "required">, import("convex/values").VLiteral<"outbound", "required">], "required", never>;
84
+ name: import("convex/values").VString<string | undefined, "optional">;
85
+ path: import("convex/values").VString<string, "required">;
86
+ referrer: import("convex/values").VString<string | undefined, "optional">;
87
+ timestamp: import("convex/values").VFloat64<number, "required">;
88
+ sequence: import("convex/values").VFloat64<number, "required">;
89
+ target: import("convex/values").VString<string | undefined, "optional">;
90
+ href: import("convex/values").VString<string | undefined, "optional">;
91
+ properties: import("convex/values").VRecord<Record<string, string | number | boolean | null> | undefined, import("convex/values").VString<string, "required">, import("convex/values").VUnion<string | number | boolean | null, [import("convex/values").VString<string, "required">, import("convex/values").VFloat64<number, "required">, import("convex/values").VBoolean<boolean, "required">, import("convex/values").VNull<null, "required">], "required", never>, "optional", string>;
92
+ revenueCents: import("convex/values").VFloat64<number | undefined, "optional">;
93
+ currency: import("convex/values").VString<string | undefined, "optional">;
94
+ affiliateSlug: import("convex/values").VString<string | undefined, "optional">;
95
+ country: import("convex/values").VString<string | undefined, "optional">;
96
+ city: import("convex/values").VString<string | undefined, "optional">;
97
+ latitude: import("convex/values").VFloat64<number | undefined, "optional">;
98
+ longitude: import("convex/values").VFloat64<number | undefined, "optional">;
99
+ browser: import("convex/values").VString<string | undefined, "optional">;
100
+ os: import("convex/values").VString<string | undefined, "optional">;
101
+ device: import("convex/values").VString<string | undefined, "optional">;
102
+ aggregateCountry: import("convex/values").VString<string | undefined, "optional">;
103
+ }, "required", "affiliateSlug" | "aggregateCountry" | "browser" | "city" | "country" | "currency" | "device" | "eventId" | "href" | "latitude" | "longitude" | "name" | "os" | "path" | "properties" | "referrer" | "revenueCents" | "sequence" | "sessionId" | "target" | "timestamp" | "type" | "visitorId" | `properties.${string}`>;
55
104
  export declare const siteFieldsValidator: import("convex/values").VObject<{
56
105
  cookieless: boolean;
57
106
  createdAt: number;
@@ -183,55 +232,6 @@ export declare const eventFieldsValidator: import("convex/values").VObject<{
183
232
  os: import("convex/values").VString<string, "required">;
184
233
  device: import("convex/values").VString<string, "required">;
185
234
  }, "required", "affiliateSlug" | "browser" | "city" | "country" | "currency" | "device" | "eventId" | "href" | "latitude" | "longitude" | "name" | "os" | "path" | "properties" | "referrer" | "revenueCents" | "sequence" | "sessionId" | "siteId" | "target" | "timestamp" | "type" | "visitorId" | `properties.${string}`>;
186
- export declare const storedEventFieldsValidator: import("convex/values").VObject<{
187
- affiliateSlug?: string | undefined;
188
- browser?: string | undefined;
189
- city?: string | undefined;
190
- country?: string | undefined;
191
- currency?: string | undefined;
192
- device?: string | undefined;
193
- eventId: string;
194
- href?: string | undefined;
195
- latitude?: number | undefined;
196
- longitude?: number | undefined;
197
- name?: string | undefined;
198
- os?: string | undefined;
199
- path: string;
200
- properties?: Record<string, string | number | boolean | null> | undefined;
201
- referrer?: string | undefined;
202
- revenueCents?: number | undefined;
203
- sequence: number;
204
- sessionId: string;
205
- siteId: import("convex/values").GenericId<"sites">;
206
- target?: string | undefined;
207
- timestamp: number;
208
- type: "click" | "conversion" | "custom" | "heartbeat" | "outbound" | "pageview";
209
- visitorId: string;
210
- }, {
211
- siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
212
- eventId: import("convex/values").VString<string, "required">;
213
- sessionId: import("convex/values").VString<string, "required">;
214
- visitorId: import("convex/values").VString<string, "required">;
215
- type: import("convex/values").VUnion<"click" | "conversion" | "custom" | "heartbeat" | "outbound" | "pageview", [import("convex/values").VLiteral<"pageview", "required">, import("convex/values").VLiteral<"click", "required">, import("convex/values").VLiteral<"custom", "required">, import("convex/values").VLiteral<"conversion", "required">, import("convex/values").VLiteral<"heartbeat", "required">, import("convex/values").VLiteral<"outbound", "required">], "required", never>;
216
- name: import("convex/values").VString<string | undefined, "optional">;
217
- path: import("convex/values").VString<string, "required">;
218
- referrer: import("convex/values").VString<string | undefined, "optional">;
219
- timestamp: import("convex/values").VFloat64<number, "required">;
220
- sequence: import("convex/values").VFloat64<number, "required">;
221
- target: import("convex/values").VString<string | undefined, "optional">;
222
- href: import("convex/values").VString<string | undefined, "optional">;
223
- properties: import("convex/values").VRecord<Record<string, string | number | boolean | null> | undefined, import("convex/values").VString<string, "required">, import("convex/values").VUnion<string | number | boolean | null, [import("convex/values").VString<string, "required">, import("convex/values").VFloat64<number, "required">, import("convex/values").VBoolean<boolean, "required">, import("convex/values").VNull<null, "required">], "required", never>, "optional", string>;
224
- revenueCents: import("convex/values").VFloat64<number | undefined, "optional">;
225
- currency: import("convex/values").VString<string | undefined, "optional">;
226
- affiliateSlug: import("convex/values").VString<string | undefined, "optional">;
227
- country: import("convex/values").VString<string | undefined, "optional">;
228
- city: import("convex/values").VString<string | undefined, "optional">;
229
- latitude: import("convex/values").VFloat64<number | undefined, "optional">;
230
- longitude: import("convex/values").VFloat64<number | undefined, "optional">;
231
- browser: import("convex/values").VString<string | undefined, "optional">;
232
- os: import("convex/values").VString<string | undefined, "optional">;
233
- device: import("convex/values").VString<string | undefined, "optional">;
234
- }, "required", "affiliateSlug" | "browser" | "city" | "country" | "currency" | "device" | "eventId" | "href" | "latitude" | "longitude" | "name" | "os" | "path" | "properties" | "referrer" | "revenueCents" | "sequence" | "sessionId" | "siteId" | "target" | "timestamp" | "type" | "visitorId" | `properties.${string}`>;
235
235
  export declare const dimensionTypeValidator: import("convex/values").VUnion<"browser" | "country" | "device" | "event" | "goal" | "page" | "source", [import("convex/values").VLiteral<"source", "required">, import("convex/values").VLiteral<"page", "required">, import("convex/values").VLiteral<"country", "required">, import("convex/values").VLiteral<"device", "required">, import("convex/values").VLiteral<"browser", "required">, import("convex/values").VLiteral<"event", "required">, import("convex/values").VLiteral<"goal", "required">], "required", never>;
236
236
  export declare const dimensionSlotValidator: import("convex/values").VObject<{
237
237
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/component/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,kBAAkB,0dAO9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,0SAKlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,scAGpC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oOAgBhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;2FAQjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iIAU9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mbA8BjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6TAwB/B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6TAUnC,CAAC;AAEL,eAAO,MAAM,sBAAsB,mgBAQlC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;oEAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oNAenC,CAAC;AAEH,eAAO,MAAM,sBAAsB,8LAGlC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;4HAU9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;yCAI9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iHAShC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;6HASnC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;sDAIhC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;yKAWrC,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/component/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,kBAAkB,0dAO9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,0SAKlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,scAGpC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oOAgBhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;2FAQjC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uUAKjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iIAU9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mbA8BjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6TAwB/B,CAAC;AAEH,eAAO,MAAM,sBAAsB,mgBAQlC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;oEAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oNAenC,CAAC;AAEH,eAAO,MAAM,sBAAsB,8LAGlC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;4HAU9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;yCAI9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iHAShC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;6HASnC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;sDAIhC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;yKAWrC,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -28,6 +28,10 @@ export const ingestContextValidator = v.object({
28
28
  os: v.optional(v.string()),
29
29
  device: v.optional(v.string()),
30
30
  });
31
+ export const batchedEventValidator = trackerEventValidator.extend({
32
+ ...ingestContextValidator.fields,
33
+ aggregateCountry: v.optional(v.string()),
34
+ });
31
35
  export const siteFieldsValidator = v.object({
32
36
  ownerId: v.string(),
33
37
  name: v.string(),
@@ -95,17 +99,6 @@ export const eventFieldsValidator = v.object({
95
99
  os: v.string(),
96
100
  device: v.string(),
97
101
  });
98
- export const storedEventFieldsValidator = eventFieldsValidator
99
- .omit("country", "city", "latitude", "longitude", "browser", "os", "device")
100
- .extend({
101
- country: v.optional(v.string()),
102
- city: v.optional(v.string()),
103
- latitude: v.optional(v.number()),
104
- longitude: v.optional(v.number()),
105
- browser: v.optional(v.string()),
106
- os: v.optional(v.string()),
107
- device: v.optional(v.string()),
108
- });
109
102
  export const dimensionTypeValidator = v.union(v.literal("source"), v.literal("page"), v.literal("country"), v.literal("device"), v.literal("browser"), v.literal("event"), v.literal("goal"));
110
103
  export const dimensionSlotValidator = v.object({
111
104
  type: dimensionTypeValidator,
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/component/validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/component/validators.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export declare const TRACKER_SOURCE = "\"use strict\";(()=>{const t=document.currentScript,e=t?.dataset.site,o=t?.dataset.endpoint||t?.src.replace(/tracker\\.js.*$/,\"events\");if(!e||!o)return;const s=()=>crypto.randomUUID?.()||Math.random()+\"\",n=new URLSearchParams(location.search).get(\"ref\")?.slice(0,64);let r,a;try{r=sessionStorage._r||s(),sessionStorage._r=r,a=n||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=s(),a=n}const i=t.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=t=>{const s=l.splice(0,50);if(!s.length)return;const n=()=>new Blob([JSON.stringify({siteId:e,events:s})]);let r=n();for(;r.size>64e3&&s.length>1;)l.unshift(s.pop()),r=n();t&&navigator.sendBeacon(o,r)||fetch(o,{method:\"POST\",body:r,keepalive:1}).catch(()=>{}),l.length&&p(t)},g=(t,e,o)=>{const s=Date.now();l.push({eventId:`${r}.${s.toString(36)}.${d.toString(36)}`,sessionId:r,visitorId:i,type:t,name:e,path:location.pathname.slice(0,256),referrer:h,timestamp:s,sequence:d++,affiliateSlug:a,...o}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const t=location.pathname;t!==u&&(u=t,g(\"pageview\"))};window.rastro=(t,e,o)=>{if(\"context\"===t)return{sessionId:r,visitorId:i};\"event\"===t&&g(\"custom\",`${e||\"event\"}`.slice(0,80),o&&JSON.stringify(o).length>2e4?void 0:{properties:o})},document.addEventListener(\"click\",t=>{const e=t.target?.closest(\"a,button,[data-rastro-event]\");if(!e)return;const o=e.dataset.rastroEvent,s=e.href,n=s?new URL(s):void 0,r=\"http:\"===n?.protocol||\"https:\"===n?.protocol;g(o?\"custom\":r&&n.origin!==location.origin?\"outbound\":\"click\",o,{target:(e.dataset.rastroLabel||e.tagName).slice(0,80),href:r?n.pathname.slice(0,256):void 0})},1);const m=t=>{const e=history[t];history[t]=function(t,o,s){e.call(history,t,o,s),v()}};m(\"pushState\"),m(\"replaceState\"),addEventListener(\"popstate\",v),addEventListener(\"pagehide\",()=>p(1)),setInterval(()=>{g(\"heartbeat\"),p()},2e4),v()})();";
2
- export declare const TRACKER_GZIP_BASE64 = "H4sIAAAAAAACA3VV227cNhD9FZswBLKZMGvHMQoJ9AJB+uDCTYJu8uQaNU3NSqwlUiVH67or/Xuhy65vzdvqDLWcOZcRayMeRArWEMs4F+p8a7yLdEAq96at0ZE0bQjoaGWCbQhQ0VLmmnREktESgn+KoMsbbx11HS1lDEYGbCptkL+joM0dhj/kX1H+dPQOGG7QUWQis2t+iF136EVAaoPLphaiGvox4aEhL4N2ua+/f7/4tJRcdN1vmsoZ5OINY+CUw/uD779frlAHU37VQdeRV95ost7JOKJCFkicBVwzsZSxsgb5As5ORVYhHQTQGYWHbVARY7TercgHXaD8M3Rd5AJewSqAVq7rXhY06CThr1ClRW80mXK4govh3X6a1SraU7ix0ZIPXRfGrgzkajFTUqmraygfpQm4xhAwLOfZ+auKkD7Ywrp0421+sIBG0V7jqCoZm5mED4tJiCgrdAWVz7VwoxbDLR8rf8uvfl19+SwH37jCrh/4djDCRZ4iTKKmsRfXM6nKcZGtfeBZkNH+i+dnp/g+SXb3nB9nopKti6VdE4+y8Q0XAqbXKEmc3thCkw8yoss/ojbecQ9BdN0ayZTcw7ZGKn2esq9fVt8Y3Pr8IQ1wh9joym4wPe6FHGmfDN4LqObLk6ThJHooFCdA8OIJN580oXT+nouskk0bS74dh7vI05ujbejl0TZK8quRBP7+TAxI/hy52VnmIk8DzMJe5KkFemgwJXC6xhSh0VSme68OT0Nhb9CTD2cCdoqmJZCtMZKumzRCxL9bdAbT/M0b0Ou1rawmXFVtkWqQUvpegKlQh2+2Rt8SNwKMiki75waOTxYL0Y9qtbPeG/VsF7xqLaNDpdok4a0iKDhrdIEbi/dMiD67ty739zLoSME/YdauOTPeEf5DTClFs8W2P+Coz6YVMZ5NkoIz00byNYOboy123Vztb/Y8/bwQ4JPkhTm92FntBE+XUw7SbRN8g4EsxtT3ood9cnSe/zL88aWNhA4DZ6ay5o7BY3BQkSQdCqSlNJWPGIkzDbctkXdwNQT57TT927HH692Sex4qr3Af+un4eDFEhbIMuAan4j7ZUewiHBQriZp04MUtZRM8eeOrrhvh+BLPCu6XO+rSkCRuXgmH6lHXCVky39Ktb13O0t3UHrbTqCl/2e2lvsWq61CSLj7rGsUzIYYJ0rD8gZ3nYQbmj8XMR62eUlzaSD48XNF19vhTrVtnho45gYcotiiNrio+n4AJhQ0XfZ/VnA25XZEmZALqYfGPH6Md8lrqxjdxLMLmf8u6wNLmyGCIR8OPxfBRoAtHGDa6mvZLwVmJOtAtamICGi56OMHTqSvBRfYfmqHy1nUHAAA=";
3
- export declare const TRACKER_RAW_BYTES = 1909;
4
- export declare const TRACKER_GZIP_BYTES = 1022;
1
+ export declare const TRACKER_SOURCE = "(()=>{const e=document.currentScript,t=e?.dataset.site,s=e?.dataset.endpoint||e?.src&&new URL(\"events\",e.src).href;if(!t||!s)return;const n=()=>crypto.randomUUID?.()||Math.random()+\"\",o=new URLSearchParams(location.search).get(\"ref\")?.slice(0,64);let r,a;try{r=sessionStorage._r||n(),sessionStorage._r=r,a=o||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=n(),a=o}const i=e.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=e=>{const n=l.splice(0,50);if(!n.length)return;const o=()=>new Blob([JSON.stringify({siteId:t,events:n})]);let r=o();for(;r.size>64e3&&n.length>1;)l.unshift(n.pop()),r=o();e&&navigator.sendBeacon(s,r)||fetch(s,{method:\"POST\",body:r,keepalive:1}).catch(()=>{}),l.length&&p(e)},g=(e,t,s)=>{const n=Date.now();l.push({eventId:`${r}.${n.toString(36)}.${d}`,sessionId:r,visitorId:i,type:e,name:t,path:location.pathname.slice(0,256),referrer:h,timestamp:n,sequence:d++,affiliateSlug:a,...s}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const e=location.pathname;e!==u&&(u=e,g(\"pageview\"))};window.rastro=(e,t,s)=>{if(\"context\"===e)return{sessionId:r,visitorId:i};\"event\"===e&&g(\"custom\",`${t||\"event\"}`.slice(0,80),s&&JSON.stringify(s).length>2e4?void 0:{properties:s})},document.addEventListener(\"click\",e=>{const t=e.target?.closest(\"a,button,[data-rastro-event]\");if(!t)return;const s=t.dataset.rastroEvent,n=t.href,o=n&&new URL(n),r=/^https?:$/.test(o?.protocol);g(s?\"custom\":r&&o.origin!==location.origin?\"outbound\":\"click\",s,{target:(t.dataset.rastroLabel||t.tagName).slice(0,80),href:r?o.pathname.slice(0,256):void 0})},1);const m=e=>{const t=history[e];history[e]=(...e)=>{t.apply(history,e),v()}};m(\"pushState\"),m(\"replaceState\"),addEventListener(\"popstate\",v),addEventListener(\"pagehide\",()=>p(1)),setInterval(()=>{g(\"heartbeat\"),p()},2e4),v()})();";
2
+ export declare const TRACKER_GZIP_BASE64 = "H4sIAAAAAAACA3VUbW/bNhD+K4kQCCRyZZ00DQYJjIGi+5Aha4u5/RRkC0OdJaISyZEnZ56l/z7oxU7SdN+s52Td3fNyjHF5tdPORjpCWTjdNmhJ6DYEtLTSwXgCkrgUhSIVkUQ0hBCfI2gL74ylrsOliEGnqcXHo29/3LAEN2gpJoADzkUVcJ2bNTumrjuOPCC1weZTdyuHUXTYenIiKFu45tu3649LwXjX/a6omkHGT5MEnJx7rFAFXX1RQTWR1U4rMs6KOKJclEgsCbhO+FLE2mhkC7i84HmNdBRA5RS2uyAjxmicXZELqkTxV+g6yzi8gmUAJV3X/VhQoNKUvUKl4r1WpKtdkMP3lHT9tKuReGBvY6IhF7oujFNpKORipqSWt3dQPakScI0hYFju+X1V4cIFUxqbbZwpjhbgJR7ktbIW0c8kvF/wUQgrarQlVS+1cKMWQ5cPtXtgt7+tPn8SkYKxpVlv2W7wwHWREUz6ZrbndzOp0jGer11geRDR/ItXlxf4Lk33fa7Ocl6L1sbKrIlZ4Z1nnMP0N0xTqzamVOSCiGiLD6i0syxC4F23RtIVi7BrkCpXZMmXz6uvCTy4YpsF+I7oVW02mJ31XIy0s9HbPYd6bp6mniHvoZQMgSDyZ9x8VITCukfG81r4NlZsNy53XWT3J7vQi5OdFeRWIwns3SUfkKK/37vkusgCzFpeF5kB2nrMEKxqMCPwiqrsYM/haSgcPHn+/pLDXsSsAjINRlKNzyxE/LtFqzErTk9BrdemNopwVbdlpkAIEXsOukYVvpoGXUtMc9AyIu2fPZydLxa8HwVqZ4k38kXyX42W47GUbZqyViKULPGqxI3Bx4TzPn80tnCPIqhIwT0j06xZop0l/IcSKSXOrtr9D0d9Ph2I8d00LVmi20iuSeD+ZEddN1f7+wNPvyw4xDT9wY+R7911jhfLyfrZzgfnMZDBmMWe93AIiyqKX4cP35hIaDGwRNdGf0/gKSskUZAKJdJS6NpFjMQSBQ8tkbNwO2T3zbT9m3HGu2SKE73MUZR0yPn0+tgYrKTxFg5n7Ola2iEHb/+siHxcZidvBQ1t3VL44MhpV/O8ZHG5JykLaermvB/LJwUnZJm4lh5ca4sk2+8XYTctlbEf57pRD1h3HQlS5SfVIH9B+TBrFpbu58adj83A8RmfN2/kczIrE8mF7S3e5U8/JRNC4GAbEsr7esvmGiCHDeN9nzcsGaK4IkWYcGiGW+5rpXGPvJbSOx/HImx+WlYlVqbABAb7e3bGhztP15YwbFQ9nYySJRWqQA+oKOHgGe/hHC+mqTjj+X/ssrhNNgcAAA==";
3
+ export declare const TRACKER_RAW_BYTES = 1846;
4
+ export declare const TRACKER_GZIP_BYTES = 1000;
5
5
  //# sourceMappingURL=generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/tracker/generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,u6DAAu6D,CAAC;AACn8D,eAAO,MAAM,mBAAmB,y1CAAy1C,CAAC;AAC13C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,OAAO,CAAC"}
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/tracker/generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,i2DAAi2D,CAAC;AAC73D,eAAO,MAAM,mBAAmB,6zCAA6zC,CAAC;AAC91C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,OAAO,CAAC"}
@@ -1,6 +1,6 @@
1
1
  // Generated by scripts/build-tracker.mjs. Do not edit.
2
- export const TRACKER_SOURCE = "\"use strict\";(()=>{const t=document.currentScript,e=t?.dataset.site,o=t?.dataset.endpoint||t?.src.replace(/tracker\\.js.*$/,\"events\");if(!e||!o)return;const s=()=>crypto.randomUUID?.()||Math.random()+\"\",n=new URLSearchParams(location.search).get(\"ref\")?.slice(0,64);let r,a;try{r=sessionStorage._r||s(),sessionStorage._r=r,a=n||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=s(),a=n}const i=t.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=t=>{const s=l.splice(0,50);if(!s.length)return;const n=()=>new Blob([JSON.stringify({siteId:e,events:s})]);let r=n();for(;r.size>64e3&&s.length>1;)l.unshift(s.pop()),r=n();t&&navigator.sendBeacon(o,r)||fetch(o,{method:\"POST\",body:r,keepalive:1}).catch(()=>{}),l.length&&p(t)},g=(t,e,o)=>{const s=Date.now();l.push({eventId:`${r}.${s.toString(36)}.${d.toString(36)}`,sessionId:r,visitorId:i,type:t,name:e,path:location.pathname.slice(0,256),referrer:h,timestamp:s,sequence:d++,affiliateSlug:a,...o}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const t=location.pathname;t!==u&&(u=t,g(\"pageview\"))};window.rastro=(t,e,o)=>{if(\"context\"===t)return{sessionId:r,visitorId:i};\"event\"===t&&g(\"custom\",`${e||\"event\"}`.slice(0,80),o&&JSON.stringify(o).length>2e4?void 0:{properties:o})},document.addEventListener(\"click\",t=>{const e=t.target?.closest(\"a,button,[data-rastro-event]\");if(!e)return;const o=e.dataset.rastroEvent,s=e.href,n=s?new URL(s):void 0,r=\"http:\"===n?.protocol||\"https:\"===n?.protocol;g(o?\"custom\":r&&n.origin!==location.origin?\"outbound\":\"click\",o,{target:(e.dataset.rastroLabel||e.tagName).slice(0,80),href:r?n.pathname.slice(0,256):void 0})},1);const m=t=>{const e=history[t];history[t]=function(t,o,s){e.call(history,t,o,s),v()}};m(\"pushState\"),m(\"replaceState\"),addEventListener(\"popstate\",v),addEventListener(\"pagehide\",()=>p(1)),setInterval(()=>{g(\"heartbeat\"),p()},2e4),v()})();";
3
- export const TRACKER_GZIP_BASE64 = "H4sIAAAAAAACA3VV227cNhD9FZswBLKZMGvHMQoJ9AJB+uDCTYJu8uQaNU3NSqwlUiVH67or/Xuhy65vzdvqDLWcOZcRayMeRArWEMs4F+p8a7yLdEAq96at0ZE0bQjoaGWCbQhQ0VLmmnREktESgn+KoMsbbx11HS1lDEYGbCptkL+joM0dhj/kX1H+dPQOGG7QUWQis2t+iF136EVAaoPLphaiGvox4aEhL4N2ua+/f7/4tJRcdN1vmsoZ5OINY+CUw/uD779frlAHU37VQdeRV95ost7JOKJCFkicBVwzsZSxsgb5As5ORVYhHQTQGYWHbVARY7TercgHXaD8M3Rd5AJewSqAVq7rXhY06CThr1ClRW80mXK4govh3X6a1SraU7ix0ZIPXRfGrgzkajFTUqmraygfpQm4xhAwLOfZ+auKkD7Ywrp0421+sIBG0V7jqCoZm5mED4tJiCgrdAWVz7VwoxbDLR8rf8uvfl19+SwH37jCrh/4djDCRZ4iTKKmsRfXM6nKcZGtfeBZkNH+i+dnp/g+SXb3nB9nopKti6VdE4+y8Q0XAqbXKEmc3thCkw8yoss/ojbecQ9BdN0ayZTcw7ZGKn2esq9fVt8Y3Pr8IQ1wh9joym4wPe6FHGmfDN4LqObLk6ThJHooFCdA8OIJN580oXT+nouskk0bS74dh7vI05ujbejl0TZK8quRBP7+TAxI/hy52VnmIk8DzMJe5KkFemgwJXC6xhSh0VSme68OT0Nhb9CTD2cCdoqmJZCtMZKumzRCxL9bdAbT/M0b0Ou1rawmXFVtkWqQUvpegKlQh2+2Rt8SNwKMiki75waOTxYL0Y9qtbPeG/VsF7xqLaNDpdok4a0iKDhrdIEbi/dMiD67ty739zLoSME/YdauOTPeEf5DTClFs8W2P+Coz6YVMZ5NkoIz00byNYOboy123Vztb/Y8/bwQ4JPkhTm92FntBE+XUw7SbRN8g4EsxtT3ood9cnSe/zL88aWNhA4DZ6ay5o7BY3BQkSQdCqSlNJWPGIkzDbctkXdwNQT57TT927HH692Sex4qr3Af+un4eDFEhbIMuAan4j7ZUewiHBQriZp04MUtZRM8eeOrrhvh+BLPCu6XO+rSkCRuXgmH6lHXCVky39Ktb13O0t3UHrbTqCl/2e2lvsWq61CSLj7rGsUzIYYJ0rD8gZ3nYQbmj8XMR62eUlzaSD48XNF19vhTrVtnho45gYcotiiNrio+n4AJhQ0XfZ/VnA25XZEmZALqYfGPH6Md8lrqxjdxLMLmf8u6wNLmyGCIR8OPxfBRoAtHGDa6mvZLwVmJOtAtamICGi56OMHTqSvBRfYfmqHy1nUHAAA=";
4
- export const TRACKER_RAW_BYTES = 1909;
5
- export const TRACKER_GZIP_BYTES = 1022;
2
+ export const TRACKER_SOURCE = "(()=>{const e=document.currentScript,t=e?.dataset.site,s=e?.dataset.endpoint||e?.src&&new URL(\"events\",e.src).href;if(!t||!s)return;const n=()=>crypto.randomUUID?.()||Math.random()+\"\",o=new URLSearchParams(location.search).get(\"ref\")?.slice(0,64);let r,a;try{r=sessionStorage._r||n(),sessionStorage._r=r,a=o||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=n(),a=o}const i=e.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=e=>{const n=l.splice(0,50);if(!n.length)return;const o=()=>new Blob([JSON.stringify({siteId:t,events:n})]);let r=o();for(;r.size>64e3&&n.length>1;)l.unshift(n.pop()),r=o();e&&navigator.sendBeacon(s,r)||fetch(s,{method:\"POST\",body:r,keepalive:1}).catch(()=>{}),l.length&&p(e)},g=(e,t,s)=>{const n=Date.now();l.push({eventId:`${r}.${n.toString(36)}.${d}`,sessionId:r,visitorId:i,type:e,name:t,path:location.pathname.slice(0,256),referrer:h,timestamp:n,sequence:d++,affiliateSlug:a,...s}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const e=location.pathname;e!==u&&(u=e,g(\"pageview\"))};window.rastro=(e,t,s)=>{if(\"context\"===e)return{sessionId:r,visitorId:i};\"event\"===e&&g(\"custom\",`${t||\"event\"}`.slice(0,80),s&&JSON.stringify(s).length>2e4?void 0:{properties:s})},document.addEventListener(\"click\",e=>{const t=e.target?.closest(\"a,button,[data-rastro-event]\");if(!t)return;const s=t.dataset.rastroEvent,n=t.href,o=n&&new URL(n),r=/^https?:$/.test(o?.protocol);g(s?\"custom\":r&&o.origin!==location.origin?\"outbound\":\"click\",s,{target:(t.dataset.rastroLabel||t.tagName).slice(0,80),href:r?o.pathname.slice(0,256):void 0})},1);const m=e=>{const t=history[e];history[e]=(...e)=>{t.apply(history,e),v()}};m(\"pushState\"),m(\"replaceState\"),addEventListener(\"popstate\",v),addEventListener(\"pagehide\",()=>p(1)),setInterval(()=>{g(\"heartbeat\"),p()},2e4),v()})();";
3
+ export const TRACKER_GZIP_BASE64 = "H4sIAAAAAAACA3VUbW/bNhD+K4kQCCRyZZ00DQYJjIGi+5Aha4u5/RRkC0OdJaISyZEnZ56l/z7oxU7SdN+s52Td3fNyjHF5tdPORjpCWTjdNmhJ6DYEtLTSwXgCkrgUhSIVkUQ0hBCfI2gL74ylrsOliEGnqcXHo29/3LAEN2gpJoADzkUVcJ2bNTumrjuOPCC1weZTdyuHUXTYenIiKFu45tu3649LwXjX/a6omkHGT5MEnJx7rFAFXX1RQTWR1U4rMs6KOKJclEgsCbhO+FLE2mhkC7i84HmNdBRA5RS2uyAjxmicXZELqkTxV+g6yzi8gmUAJV3X/VhQoNKUvUKl4r1WpKtdkMP3lHT9tKuReGBvY6IhF7oujFNpKORipqSWt3dQPakScI0hYFju+X1V4cIFUxqbbZwpjhbgJR7ktbIW0c8kvF/wUQgrarQlVS+1cKMWQ5cPtXtgt7+tPn8SkYKxpVlv2W7wwHWREUz6ZrbndzOp0jGer11geRDR/ItXlxf4Lk33fa7Ocl6L1sbKrIlZ4Z1nnMP0N0xTqzamVOSCiGiLD6i0syxC4F23RtIVi7BrkCpXZMmXz6uvCTy4YpsF+I7oVW02mJ31XIy0s9HbPYd6bp6mniHvoZQMgSDyZ9x8VITCukfG81r4NlZsNy53XWT3J7vQi5OdFeRWIwns3SUfkKK/37vkusgCzFpeF5kB2nrMEKxqMCPwiqrsYM/haSgcPHn+/pLDXsSsAjINRlKNzyxE/LtFqzErTk9BrdemNopwVbdlpkAIEXsOukYVvpoGXUtMc9AyIu2fPZydLxa8HwVqZ4k38kXyX42W47GUbZqyViKULPGqxI3Bx4TzPn80tnCPIqhIwT0j06xZop0l/IcSKSXOrtr9D0d9Ph2I8d00LVmi20iuSeD+ZEddN1f7+wNPvyw4xDT9wY+R7911jhfLyfrZzgfnMZDBmMWe93AIiyqKX4cP35hIaDGwRNdGf0/gKSskUZAKJdJS6NpFjMQSBQ8tkbNwO2T3zbT9m3HGu2SKE73MUZR0yPn0+tgYrKTxFg5n7Ola2iEHb/+siHxcZidvBQ1t3VL44MhpV/O8ZHG5JykLaermvB/LJwUnZJm4lh5ca4sk2+8XYTctlbEf57pRD1h3HQlS5SfVIH9B+TBrFpbu58adj83A8RmfN2/kczIrE8mF7S3e5U8/JRNC4GAbEsr7esvmGiCHDeN9nzcsGaK4IkWYcGiGW+5rpXGPvJbSOx/HImx+WlYlVqbABAb7e3bGhztP15YwbFQ9nYySJRWqQA+oKOHgGe/hHC+mqTjj+X/ssrhNNgcAAA==";
4
+ export const TRACKER_RAW_BYTES = 1846;
5
+ export const TRACKER_GZIP_BYTES = 1000;
6
6
  //# sourceMappingURL=generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/tracker/generated.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,o6DAAo6D,CAAC;AACn8D,MAAM,CAAC,MAAM,mBAAmB,GAAG,s1CAAs1C,CAAC;AAC13C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/tracker/generated.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,81DAA81D,CAAC;AAC73D,MAAM,CAAC,MAAM,mBAAmB,GAAG,0zCAA0zC,CAAC;AAC91C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC"}
@@ -2,7 +2,8 @@
2
2
  (() => {
3
3
  const script = document.currentScript;
4
4
  const siteId = script?.dataset.site;
5
- const endpoint = script?.dataset.endpoint || script?.src.replace(/tracker\.js.*$/, "events");
5
+ const endpoint = script?.dataset.endpoint ||
6
+ (script?.src && new URL("events", script.src).href);
6
7
  if (!siteId || !endpoint)
7
8
  return;
8
9
  const createId = () => crypto.randomUUID?.() || Math.random() + "";
@@ -50,7 +51,7 @@
50
51
  const emit = (type, name, extra) => {
51
52
  const timestamp = Date.now();
52
53
  queue.push({
53
- eventId: `${sessionId}.${timestamp.toString(36)}.${sequence.toString(36)}`,
54
+ eventId: `${sessionId}.${timestamp.toString(36)}.${sequence}`,
54
55
  sessionId,
55
56
  visitorId,
56
57
  type,
@@ -88,8 +89,8 @@
88
89
  return;
89
90
  const name = element.dataset.rastroEvent;
90
91
  const href = element.href;
91
- const url = href ? new URL(href) : undefined;
92
- const web = url?.protocol === "http:" || url?.protocol === "https:";
92
+ const url = (href && new URL(href));
93
+ const web = /^https?:$/.test(url?.protocol);
93
94
  emit(name
94
95
  ? "custom"
95
96
  : web && url.origin !== location.origin
@@ -101,8 +102,8 @@
101
102
  }, true);
102
103
  const wrapHistory = (method) => {
103
104
  const native = history[method];
104
- history[method] = function (data, unused, url) {
105
- native.call(history, data, unused, url);
105
+ history[method] = function (...args) {
106
+ native.apply(history, args);
106
107
  pageview();
107
108
  };
108
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/tracker/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/tracker/tracker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";(()=>{const t=document.currentScript,e=t?.dataset.site,o=t?.dataset.endpoint||t?.src.replace(/tracker\.js.*$/,"events");if(!e||!o)return;const s=()=>crypto.randomUUID?.()||Math.random()+"",n=new URLSearchParams(location.search).get("ref")?.slice(0,64);let r,a;try{r=sessionStorage._r||s(),sessionStorage._r=r,a=n||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=s(),a=n}const i=t.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=t=>{const s=l.splice(0,50);if(!s.length)return;const n=()=>new Blob([JSON.stringify({siteId:e,events:s})]);let r=n();for(;r.size>64e3&&s.length>1;)l.unshift(s.pop()),r=n();t&&navigator.sendBeacon(o,r)||fetch(o,{method:"POST",body:r,keepalive:1}).catch(()=>{}),l.length&&p(t)},g=(t,e,o)=>{const s=Date.now();l.push({eventId:`${r}.${s.toString(36)}.${d.toString(36)}`,sessionId:r,visitorId:i,type:t,name:e,path:location.pathname.slice(0,256),referrer:h,timestamp:s,sequence:d++,affiliateSlug:a,...o}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const t=location.pathname;t!==u&&(u=t,g("pageview"))};window.rastro=(t,e,o)=>{if("context"===t)return{sessionId:r,visitorId:i};"event"===t&&g("custom",`${e||"event"}`.slice(0,80),o&&JSON.stringify(o).length>2e4?void 0:{properties:o})},document.addEventListener("click",t=>{const e=t.target?.closest("a,button,[data-rastro-event]");if(!e)return;const o=e.dataset.rastroEvent,s=e.href,n=s?new URL(s):void 0,r="http:"===n?.protocol||"https:"===n?.protocol;g(o?"custom":r&&n.origin!==location.origin?"outbound":"click",o,{target:(e.dataset.rastroLabel||e.tagName).slice(0,80),href:r?n.pathname.slice(0,256):void 0})},1);const m=t=>{const e=history[t];history[t]=function(t,o,s){e.call(history,t,o,s),v()}};m("pushState"),m("replaceState"),addEventListener("popstate",v),addEventListener("pagehide",()=>p(1)),setInterval(()=>{g("heartbeat"),p()},2e4),v()})();
1
+ (()=>{const e=document.currentScript,t=e?.dataset.site,s=e?.dataset.endpoint||e?.src&&new URL("events",e.src).href;if(!t||!s)return;const n=()=>crypto.randomUUID?.()||Math.random()+"",o=new URLSearchParams(location.search).get("ref")?.slice(0,64);let r,a;try{r=sessionStorage._r||n(),sessionStorage._r=r,a=o||sessionStorage._a,a&&(sessionStorage._a=a)}catch{r=n(),a=o}const i=e.dataset.visitor||r;let c,d=0;const l=[],h=document.referrer?new URL(document.referrer).origin:void 0,p=e=>{const n=l.splice(0,50);if(!n.length)return;const o=()=>new Blob([JSON.stringify({siteId:t,events:n})]);let r=o();for(;r.size>64e3&&n.length>1;)l.unshift(n.pop()),r=o();e&&navigator.sendBeacon(s,r)||fetch(s,{method:"POST",body:r,keepalive:1}).catch(()=>{}),l.length&&p(e)},g=(e,t,s)=>{const n=Date.now();l.push({eventId:`${r}.${n.toString(36)}.${d}`,sessionId:r,visitorId:i,type:e,name:t,path:location.pathname.slice(0,256),referrer:h,timestamp:n,sequence:d++,affiliateSlug:a,...s}),clearTimeout(c),c=setTimeout(p,1200)};let u;const v=()=>{const e=location.pathname;e!==u&&(u=e,g("pageview"))};window.rastro=(e,t,s)=>{if("context"===e)return{sessionId:r,visitorId:i};"event"===e&&g("custom",`${t||"event"}`.slice(0,80),s&&JSON.stringify(s).length>2e4?void 0:{properties:s})},document.addEventListener("click",e=>{const t=e.target?.closest("a,button,[data-rastro-event]");if(!t)return;const s=t.dataset.rastroEvent,n=t.href,o=n&&new URL(n),r=/^https?:$/.test(o?.protocol);g(s?"custom":r&&o.origin!==location.origin?"outbound":"click",s,{target:(t.dataset.rastroLabel||t.tagName).slice(0,80),href:r?o.pathname.slice(0,256):void 0})},1);const m=e=>{const t=history[e];history[e]=(...e)=>{t.apply(history,e),v()}};m("pushState"),m("replaceState"),addEventListener("popstate",v),addEventListener("pagehide",()=>p(1)),setInterval(()=>{g("heartbeat"),p()},2e4),v()})();
@@ -150,7 +150,7 @@ A passing harness certification must include:
150
150
  - `certification.requested: true` and `certification.passed: true`;
151
151
  - zero request failures, duplicate events, rejected events, and failed events;
152
152
  - completed request accounting;
153
- - reliable and exact aggregate reconciliation;
153
+ - reliable and exact run-session reconciliation;
154
154
  - separate accepted and stored throughput/capacity fields.
155
155
 
156
156
  Release evidence should additionally record deployment health and successful
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "bugs": {
7
7
  "url": "https://github.com/amageweb/amage-rastro/issues"
8
8
  },
9
- "version": "0.1.0-alpha.1",
9
+ "version": "0.1.0-alpha.3",
10
10
  "license": "Apache-2.0",
11
11
  "publishConfig": {
12
12
  "access": "public"
@@ -1,11 +1,14 @@
1
1
  import process from "node:process";
2
2
  import { Buffer } from "node:buffer";
3
+ import { randomUUID } from "node:crypto";
3
4
  import { performance } from "node:perf_hooks";
4
5
  import { clearInterval, setInterval } from "node:timers";
5
6
  import { ConvexHttpClient } from "convex/browser";
6
7
  import { makeFunctionReference } from "convex/server";
7
8
 
8
- const overviewQuery = makeFunctionReference("example:overview");
9
+ const reconcileSessionsQuery = makeFunctionReference(
10
+ "benchmark:reconcileSessionsPage",
11
+ );
9
12
 
10
13
  const PROFILE_DEFAULTS = {
11
14
  lean: { batchSize: 50, sessions: 0 },
@@ -200,6 +203,14 @@ function percentile(sorted, fraction) {
200
203
  return sorted[Math.min(sorted.length - 1, Math.ceil(sorted.length * fraction) - 1)];
201
204
  }
202
205
 
206
+ function hasValidSessionTotals(value) {
207
+ return value !== null &&
208
+ typeof value === "object" &&
209
+ [value.requestedSessions, value.foundSessions, value.storedEvents].every(
210
+ (total) => Number.isSafeInteger(total) && total >= 0,
211
+ );
212
+ }
213
+
203
214
  async function main() {
204
215
  const options = parseOptions(process.argv.slice(2));
205
216
  if (options.batchSize > 50) throw new Error("--batch-size cannot exceed 50");
@@ -212,7 +223,7 @@ async function main() {
212
223
  if (options.certify && Number.isFinite(options.maximumRequests)) {
213
224
  throw new Error("--certify cannot be combined with --requests");
214
225
  }
215
- const runId = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
226
+ const runId = randomUUID();
216
227
  const sessions = Array.from({ length: options.sessionCount }, (_, index) => ({
217
228
  id: `bench-${runId}-${index}`,
218
229
  visitorId: `visitor-${runId}-${index}`,
@@ -288,20 +299,23 @@ async function main() {
288
299
  process.once("SIGINT", stopForInterrupt);
289
300
  process.once("SIGTERM", stopForTermination);
290
301
 
291
- const wallClockStartedAt = Date.now();
292
- const reconciliationFrom = Math.floor(wallClockStartedAt / 3_600_000) * 3_600_000;
293
- const reconciliationTo = Math.ceil(
294
- (wallClockStartedAt + options.durationSeconds * 1_000 + 60_000) / 3_600_000,
295
- ) * 3_600_000 - 1;
296
302
  const convex = options.convexUrl ? new ConvexHttpClient(options.convexUrl) : null;
297
- const aggregateBefore = convex
298
- ? await convex.query(overviewQuery, {
299
- siteIds: [options.siteId],
300
- from: reconciliationFrom,
301
- to: reconciliationTo,
302
- interval: "hour",
303
- })
304
- : null;
303
+ if (convex) {
304
+ const preflight = await convex.query(reconcileSessionsQuery, {
305
+ siteId: options.siteId,
306
+ runId,
307
+ start: 0,
308
+ count: 1,
309
+ });
310
+ if (
311
+ !hasValidSessionTotals(preflight) ||
312
+ preflight.requestedSessions !== 1 ||
313
+ preflight.foundSessions !== 0 ||
314
+ preflight.storedEvents !== 0
315
+ ) {
316
+ throw new Error("reconciliation preflight returned unexpected totals");
317
+ }
318
+ }
305
319
  const startedAt = performance.now();
306
320
  const deadline = startedAt + options.durationSeconds * 1_000;
307
321
  const recordError = (key) => errors.set(key, (errors.get(key) ?? 0) + 1);
@@ -392,31 +406,66 @@ async function main() {
392
406
 
393
407
  const elapsedMs = performance.now() - startedAt;
394
408
  terminationReason ??= performance.now() >= deadline ? "duration" : "completed";
395
- const aggregateAfter = convex
396
- ? await convex.query(overviewQuery, {
397
- siteIds: [options.siteId],
398
- from: reconciliationFrom,
399
- to: reconciliationTo,
400
- interval: "hour",
401
- })
402
- : null;
403
409
  process.removeListener("SIGINT", stopForInterrupt);
404
410
  process.removeListener("SIGTERM", stopForTermination);
405
411
  const durationCompleted = terminationReason === "duration";
406
412
  durations.sort((left, right) => left - right);
407
- const storedEvents = accepted - acceptedHeartbeats;
408
- const reconciliation = aggregateBefore && aggregateAfter
413
+ const expectedSessions = options.profile === "lean"
414
+ ? nextRequest
415
+ : Math.min(nextRequest, options.sessionCount);
416
+ let sessionTotals = null;
417
+ if (convex && expectedSessions > 0) {
418
+ try {
419
+ sessionTotals = {
420
+ requestedSessions: 0,
421
+ foundSessions: 0,
422
+ storedEvents: 0,
423
+ };
424
+ for (let start = 0; start < expectedSessions; start += 100) {
425
+ const page = await convex.query(reconcileSessionsQuery, {
426
+ siteId: options.siteId,
427
+ runId,
428
+ start,
429
+ count: Math.min(100, expectedSessions - start),
430
+ });
431
+ if (!hasValidSessionTotals(page)) {
432
+ throw new Error("reconciliation response has invalid totals");
433
+ }
434
+ sessionTotals.requestedSessions += page.requestedSessions;
435
+ sessionTotals.foundSessions += page.foundSessions;
436
+ sessionTotals.storedEvents += page.storedEvents;
437
+ }
438
+ } catch (error) {
439
+ reconciliationReliable = false;
440
+ sessionTotals = null;
441
+ recordError(
442
+ `reconciliation:${error instanceof Error ? error.message : "unknown"}`,
443
+ );
444
+ }
445
+ }
446
+ const expectedStoredEvents = reconciliationReliable
447
+ ? accepted - acceptedHeartbeats
448
+ : null;
449
+ const storedEvents = sessionTotals?.storedEvents ?? expectedStoredEvents;
450
+ const reconciliation = sessionTotals
409
451
  ? {
410
- scope: "site-wide-delta",
452
+ scope: "run-session-ids",
411
453
  reliable: reconciliationReliable && failures === 0 && rejected === 0,
412
- expectedStoredEvents: storedEvents,
413
- aggregateEventsDelta:
414
- aggregateAfter.totals.events - aggregateBefore.totals.events,
454
+ expectedSessions,
455
+ requestedSessions: sessionTotals.requestedSessions,
456
+ foundSessions: sessionTotals.foundSessions,
457
+ acceptedEvents: accepted,
458
+ acceptedHeartbeats: reconciliationReliable ? acceptedHeartbeats : null,
459
+ expectedStoredEvents,
460
+ storedEvents: sessionTotals.storedEvents,
415
461
  matches:
416
462
  reconciliationReliable &&
417
463
  failures === 0 &&
418
464
  rejected === 0 &&
419
- aggregateAfter.totals.events - aggregateBefore.totals.events === storedEvents,
465
+ expectedStoredEvents !== null &&
466
+ sessionTotals.requestedSessions === expectedSessions &&
467
+ sessionTotals.foundSessions === expectedSessions &&
468
+ sessionTotals.storedEvents === expectedStoredEvents,
420
469
  }
421
470
  : null;
422
471
  const cleanRun =
@@ -458,13 +507,13 @@ async function main() {
458
507
  errors: Object.fromEntries(errors),
459
508
  throughput: {
460
509
  eventsPerSecond: Math.round((accepted * 1_000) / elapsedMs),
461
- storedEventsPerSecond: reconciliationReliable
510
+ storedEventsPerSecond: reconciliationPassed
462
511
  ? Math.round((storedEvents * 1_000) / elapsedMs)
463
512
  : null,
464
513
  estimatedEventsPerDay: durationCompleted
465
514
  ? Math.round((accepted * 86_400_000) / elapsedMs)
466
515
  : null,
467
- estimatedStoredEventsPerDay: durationCompleted && reconciliationReliable
516
+ estimatedStoredEventsPerDay: durationCompleted && reconciliationPassed
468
517
  ? Math.round((storedEvents * 86_400_000) / elapsedMs)
469
518
  : null,
470
519
  certifiedEventsPerDay: certificationPassed
@@ -10,9 +10,11 @@
10
10
 
11
11
  import type * as affiliates from "../affiliates.js";
12
12
  import type * as constants from "../constants.js";
13
+ import type * as diagnostics from "../diagnostics.js";
13
14
  import type * as errors from "../errors.js";
14
15
  import type * as eventStore from "../eventStore.js";
15
16
  import type * as funnels from "../funnels.js";
17
+ import type * as geo from "../geo.js";
16
18
  import type * as goals from "../goals.js";
17
19
  import type * as guards from "../guards.js";
18
20
  import type * as http from "../http.js";
@@ -34,9 +36,11 @@ import { anyApi, componentsGeneric } from "convex/server";
34
36
  const fullApi: ApiFromModules<{
35
37
  affiliates: typeof affiliates;
36
38
  constants: typeof constants;
39
+ diagnostics: typeof diagnostics;
37
40
  errors: typeof errors;
38
41
  eventStore: typeof eventStore;
39
42
  funnels: typeof funnels;
43
+ geo: typeof geo;
40
44
  goals: typeof goals;
41
45
  guards: typeof guards;
42
46
  http: typeof http;
@@ -65,6 +65,19 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
65
65
  Name
66
66
  >;
67
67
  };
68
+ diagnostics: {
69
+ sessionEventTotals: FunctionReference<
70
+ "query",
71
+ "internal",
72
+ { sessionIds: Array<string>; siteId: string },
73
+ {
74
+ foundSessions: number;
75
+ requestedSessions: number;
76
+ storedEvents: number;
77
+ },
78
+ Name
79
+ >;
80
+ };
68
81
  funnels: {
69
82
  list: FunctionReference<
70
83
  "query",
@@ -39,6 +39,10 @@ import type { DataModel } from "./dataModel.js";
39
39
  type Env = {
40
40
  readonly CONVEX_CLOUD_URL: string;
41
41
  readonly CONVEX_SITE_URL: string;
42
+ readonly RASTRO_GEOIP_DAILY_LIMIT: string | undefined;
43
+ readonly RASTRO_GEOIP_PROVIDER: "ipinfo" | "ipwhois" | undefined;
44
+ readonly RASTRO_GEOIP_TOKEN: string | undefined;
45
+ readonly RASTRO_TRUST_PROXY: "true" | undefined;
42
46
  };
43
47
 
44
48
  /**
@@ -24,6 +24,8 @@ export const MAX_REPORT_SITES = 10;
24
24
  export const MAX_REPORT_RANGE_DAYS = 366;
25
25
  export const MAX_LIVE_VISITORS = 500;
26
26
  export const MAX_JOURNEY_EVENTS = 500;
27
+ export const JOURNEY_READ_BYTE_RESERVE = 4 * 1024 * 1024;
28
+ export const JOURNEY_READ_DOCUMENT_RESERVE = 1_000;
27
29
  export const MAX_RETENTION_BATCH = 500;
28
30
  export const MAX_OVERVIEW_AGGREGATE_ROWS = 13_000;
29
31