@iann29/rastro 0.4.0 → 0.6.0

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 (112) hide show
  1. package/README.md +146 -24
  2. package/agent/integration.md +66 -29
  3. package/agent/manifest.json +19 -8
  4. package/agent/manifest.schema.json +28 -9
  5. package/dist/client/federation.d.ts +38 -8
  6. package/dist/client/federation.d.ts.map +1 -1
  7. package/dist/client/federation.js +18 -1
  8. package/dist/client/federation.js.map +1 -1
  9. package/dist/client/identity.d.ts +11 -0
  10. package/dist/client/identity.d.ts.map +1 -0
  11. package/dist/client/identity.js +123 -0
  12. package/dist/client/identity.js.map +1 -0
  13. package/dist/client/index.d.ts +501 -11
  14. package/dist/client/index.d.ts.map +1 -1
  15. package/dist/client/index.js +220 -4
  16. package/dist/client/index.js.map +1 -1
  17. package/dist/component/_generated/api.d.ts +8 -0
  18. package/dist/component/_generated/api.d.ts.map +1 -1
  19. package/dist/component/_generated/api.js.map +1 -1
  20. package/dist/component/_generated/component.d.ts +158 -1
  21. package/dist/component/_generated/component.d.ts.map +1 -1
  22. package/dist/component/constants.d.ts +2 -0
  23. package/dist/component/constants.d.ts.map +1 -1
  24. package/dist/component/constants.js +7 -0
  25. package/dist/component/constants.js.map +1 -1
  26. package/dist/component/coverage.d.ts +1 -0
  27. package/dist/component/coverage.d.ts.map +1 -1
  28. package/dist/component/coverage.js +6 -1
  29. package/dist/component/coverage.js.map +1 -1
  30. package/dist/component/eventStore.d.ts +2 -0
  31. package/dist/component/eventStore.d.ts.map +1 -1
  32. package/dist/component/http.d.ts.map +1 -1
  33. package/dist/component/http.js +51 -1
  34. package/dist/component/http.js.map +1 -1
  35. package/dist/component/ingest.d.ts +2 -0
  36. package/dist/component/ingest.d.ts.map +1 -1
  37. package/dist/component/ingest.js +72 -22
  38. package/dist/component/ingest.js.map +1 -1
  39. package/dist/component/origin.d.ts +70 -0
  40. package/dist/component/origin.d.ts.map +1 -0
  41. package/dist/component/origin.js +230 -0
  42. package/dist/component/origin.js.map +1 -0
  43. package/dist/component/people.d.ts +79 -0
  44. package/dist/component/people.d.ts.map +1 -0
  45. package/dist/component/people.js +249 -0
  46. package/dist/component/people.js.map +1 -0
  47. package/dist/component/platforms.d.ts +33 -0
  48. package/dist/component/platforms.d.ts.map +1 -0
  49. package/dist/component/platforms.js +328 -0
  50. package/dist/component/platforms.js.map +1 -0
  51. package/dist/component/reports.d.ts +35 -74
  52. package/dist/component/reports.d.ts.map +1 -1
  53. package/dist/component/reports.js +59 -14
  54. package/dist/component/reports.js.map +1 -1
  55. package/dist/component/sanitize.d.ts +5 -0
  56. package/dist/component/sanitize.d.ts.map +1 -1
  57. package/dist/component/sanitize.js +33 -1
  58. package/dist/component/sanitize.js.map +1 -1
  59. package/dist/component/schema.d.ts +101 -7
  60. package/dist/component/schema.js +45 -1
  61. package/dist/component/schema.js.map +1 -1
  62. package/dist/component/trackedLinks.d.ts +91 -0
  63. package/dist/component/trackedLinks.d.ts.map +1 -0
  64. package/dist/component/trackedLinks.js +314 -0
  65. package/dist/component/trackedLinks.js.map +1 -0
  66. package/dist/component/useragent.d.ts +6 -0
  67. package/dist/component/useragent.d.ts.map +1 -1
  68. package/dist/component/useragent.js +9 -0
  69. package/dist/component/useragent.js.map +1 -1
  70. package/dist/component/validators.d.ts +101 -11
  71. package/dist/component/validators.d.ts.map +1 -1
  72. package/dist/component/validators.js +62 -1
  73. package/dist/component/validators.js.map +1 -1
  74. package/dist/component/visitors.d.ts +38 -2
  75. package/dist/component/visitors.d.ts.map +1 -1
  76. package/dist/component/visitors.js +162 -42
  77. package/dist/component/visitors.js.map +1 -1
  78. package/dist/react/index.d.ts +9 -5
  79. package/dist/react/index.d.ts.map +1 -1
  80. package/dist/react/index.js +36 -5
  81. package/dist/react/index.js.map +1 -1
  82. package/dist/tracker/generated.d.ts +6 -6
  83. package/dist/tracker/generated.d.ts.map +1 -1
  84. package/dist/tracker/generated.js +6 -6
  85. package/dist/tracker/generated.js.map +1 -1
  86. package/dist/tracker/tracker.d.ts +3 -1
  87. package/dist/tracker/tracker.d.ts.map +1 -1
  88. package/dist/tracker/tracker.js +56 -5
  89. package/dist/tracker/tracker.js.map +1 -1
  90. package/dist/tracker.min.js +1 -1
  91. package/docs/federation.md +24 -0
  92. package/docs/identity.md +307 -0
  93. package/docs/upgrading.md +190 -19
  94. package/llms.txt +11 -2
  95. package/package.json +5 -3
  96. package/src/component/_generated/api.ts +8 -0
  97. package/src/component/_generated/component.ts +251 -1
  98. package/src/component/constants.ts +7 -0
  99. package/src/component/coverage.ts +7 -1
  100. package/src/component/http.ts +56 -1
  101. package/src/component/ingest.ts +100 -28
  102. package/src/component/origin.ts +273 -0
  103. package/src/component/people.ts +321 -0
  104. package/src/component/platforms.ts +359 -0
  105. package/src/component/reports.ts +84 -13
  106. package/src/component/sanitize.ts +39 -1
  107. package/src/component/schema.ts +53 -0
  108. package/src/component/trackedLinks.ts +384 -0
  109. package/src/component/useragent.ts +11 -0
  110. package/src/component/validators.ts +120 -0
  111. package/src/component/visitors.ts +232 -55
  112. package/src/tracker/generated.ts +6 -6
@@ -1,10 +1,14 @@
1
1
  import type { FunctionArgs, FunctionReturnType, GenericActionCtx, GenericDataModel, GenericMutationCtx, GenericQueryCtx } from "convex/server";
2
2
  import { type Infer } from "convex/values";
3
+ import { type IdentityHttpAuthorizer } from "./identity.js";
4
+ export { visitorIdForUser } from "./identity.js";
5
+ export type { IdentityHttpAuthorizer } from "./identity.js";
3
6
  import type { ComponentApi } from "../component/_generated/component.js";
4
- import { eventPropertiesValidator, eventTypeValidator, funnelStepValidator, goalMatchTypeValidator, ingestContextValidator, ingestResultValidator, trackerEventValidator, vitalMetricValidator } from "../component/validators.js";
7
+ import { eventPropertiesValidator, eventTypeValidator, funnelStepValidator, goalMatchTypeValidator, ingestContextValidator, ingestResultValidator, trackerEventValidator, vitalMetricValidator, visitorProfileValidator } from "../component/validators.js";
5
8
  import { type FederatedAnalyticsAuthorizerOptions, type FederatedAnalyticsConnectionStatus, type FederatedSiteSummary } from "./federation.js";
6
- export { eventPropertiesValidator, eventTypeValidator, funnelStepValidator, goalMatchTypeValidator, ingestContextValidator, ingestResultValidator, trackerEventValidator, vitalMetricValidator, };
7
- export type { EventProperties, EventType, FunnelStep, IngestContext, TrackerEvent, } from "../component/validators.js";
9
+ export { eventPropertiesValidator, eventTypeValidator, funnelStepValidator, goalMatchTypeValidator, ingestContextValidator, ingestResultValidator, trackerEventValidator, vitalMetricValidator, visitorProfileValidator, };
10
+ export type { Channel, EventProperties, EventType, Evidence, FunnelStep, IngestContext, TrackerEvent, VisitorProfile, PersonAttributes, PersonFilter, } from "../component/validators.js";
11
+ export { channelForPlatform, platformDimensionValue, platformForSource, splitPlatformDimension, } from "../component/origin.js";
8
12
  export { VITAL_METRICS, VITAL_THRESHOLDS } from "../component/vitals.js";
9
13
  export { normalizeRoute } from "../component/sanitize.js";
10
14
  export { localDayStart, nextLocalDayStart, previousLocalDayStart, } from "../component/localTime.js";
@@ -14,6 +18,8 @@ export type { VitalMetric } from "../component/vitals.js";
14
18
  export { effectiveFederatedPermissions, federatedPermissionSatisfies, isPublicFederatedAccess, FEDERATED_ANALYTICS_CLAIMS, FEDERATED_ANALYTICS_CONFIGURE_FUNCTIONS, FEDERATED_ANALYTICS_CONFIGURE_PERMISSION, FEDERATED_ANALYTICS_CONNECTOR_MANIFEST, FEDERATED_ANALYTICS_ERROR_CODES, FEDERATED_ANALYTICS_PERMISSIONS, FEDERATED_ANALYTICS_PUBLIC_FUNCTIONS, FEDERATED_ANALYTICS_PUBLIC_PERMISSION, FEDERATED_ANALYTICS_READ_PERMISSION, FEDERATED_ANALYTICS_REQUIRED_CAPABILITIES, FEDERATED_ANALYTICS_REQUIRED_FUNCTIONS, federatedAnalyticsPermissionValidator, } from "./federation.js";
15
19
  export type { FederatedAnalyticsCapability, FederatedAnalyticsAuthorizerOptions, FederatedAnalyticsConnection, FederatedAnalyticsConnectionStatus, FederatedAnalyticsErrorCode, FederatedAnalyticsIdentity, FederatedAnalyticsManifest, FederatedAnalyticsPermission, FederatedSiteSummary, ResolveFederatedAnalyticsConnection, } from "./federation.js";
16
20
  export type CreateSiteInput = FunctionArgs<ComponentApi["sites"]["create"]>;
21
+ export type ListPeopleInput = FunctionArgs<ComponentApi["people"]["list"]>;
22
+ export type Person = FunctionReturnType<ComponentApi["people"]["list"]>["page"][number];
17
23
  export type CreateSiteOutput = FunctionReturnType<ComponentApi["sites"]["create"]>;
18
24
  export type UpdateSiteInput = FunctionArgs<ComponentApi["sites"]["update"]>;
19
25
  export type UpdateSiteOutput = FunctionReturnType<ComponentApi["sites"]["update"]>;
@@ -26,6 +32,8 @@ export type TrackConversionInput = Omit<FunctionArgs<ComponentApi["ingest"]["tra
26
32
  export type TrackConversionOutput = FunctionReturnType<ComponentApi["ingest"]["trackConversion"]>;
27
33
  export type LinkVisitorInput = FunctionArgs<ComponentApi["visitors"]["link"]>;
28
34
  export type LinkVisitorOutput = FunctionReturnType<ComponentApi["visitors"]["link"]>;
35
+ export type IdentifyVisitorInput = FunctionArgs<ComponentApi["visitors"]["identify"]>;
36
+ export type GetVisitorProfileInput = FunctionArgs<ComponentApi["visitors"]["getProfile"]>;
29
37
  export type OverviewInput = FunctionArgs<ComponentApi["reports"]["overview"]>;
30
38
  export type Overview = Infer<typeof hostOverviewValidator>;
31
39
  export type LiveVisitorsInput = FunctionArgs<ComponentApi["reports"]["liveVisitors"]>;
@@ -57,6 +65,10 @@ export type Funnel = FunctionReturnType<ComponentApi["funnels"]["list"]>[number]
57
65
  export type UpsertAffiliateInput = FunctionArgs<ComponentApi["affiliates"]["upsert"]>;
58
66
  export type UpsertAffiliateOutput = FunctionReturnType<ComponentApi["affiliates"]["upsert"]>;
59
67
  export type Affiliate = FunctionReturnType<ComponentApi["affiliates"]["list"]>[number];
68
+ export type CreateTrackedLinkInput = FunctionArgs<ComponentApi["trackedLinks"]["create"]>;
69
+ export type UpdateTrackedLinkInput = FunctionArgs<ComponentApi["trackedLinks"]["update"]>;
70
+ export type ListTrackedLinksInput = FunctionArgs<ComponentApi["trackedLinks"]["list"]>;
71
+ export type TrackedLink = FunctionReturnType<ComponentApi["trackedLinks"]["list"]>[number];
60
72
  export type CleanupInput = {
61
73
  siteId: string;
62
74
  kind: RetentionKind;
@@ -167,6 +179,61 @@ export declare class Rastro {
167
179
  aliasCount: number;
168
180
  linked: boolean;
169
181
  }>;
182
+ /** The caller resolves the user with its own auth; no provider is required. */
183
+ identifyVisitor(ctx: MutationCtx | ActionCtx, args: IdentifyVisitorInput): Promise<{
184
+ attributes?: Record<string, string | number | boolean>;
185
+ email?: string;
186
+ identifiedAt: number;
187
+ name?: string;
188
+ updatedAt: number;
189
+ visitorId: string;
190
+ }>;
191
+ /** End-user entrypoint: the browser supplies only its pre-login visitor ID. */
192
+ identifyVisitorMutation<DataModel extends GenericDataModel>(options: {
193
+ resolveUser: (ctx: GenericMutationCtx<DataModel>) => Promise<Omit<IdentifyVisitorInput, "previousVisitorId"> | null>;
194
+ }): import("convex/server").RegisteredMutation<"public", {
195
+ previousVisitorId?: string | undefined;
196
+ }, Promise<{
197
+ attributes?: Record<string, string | number | boolean>;
198
+ email?: string;
199
+ identifiedAt: number;
200
+ name?: string;
201
+ updatedAt: number;
202
+ visitorId: string;
203
+ }>>;
204
+ /** Mount on the host's router with its own server credential/site authorization. */
205
+ identifyVisitorHttpAction(options: {
206
+ authorize: IdentityHttpAuthorizer;
207
+ }): import("convex/server").PublicHttpAction;
208
+ getVisitorProfile(ctx: QueryCtx | MutationCtx | ActionCtx, args: GetVisitorProfileInput): Promise<{
209
+ attributes?: Record<string, string | number | boolean>;
210
+ email?: string;
211
+ identifiedAt: number;
212
+ name?: string;
213
+ updatedAt: number;
214
+ visitorId: string;
215
+ } | null>;
216
+ listPeople(ctx: QueryCtx | MutationCtx | ActionCtx, args: ListPeopleInput): Promise<{
217
+ continueCursor: string;
218
+ isDone: boolean;
219
+ page: Array<{
220
+ _creationTime: number;
221
+ _id: string;
222
+ attributes?: Record<string, string | number | boolean>;
223
+ email?: string;
224
+ identifiedAt: number;
225
+ name?: string;
226
+ siteId: string;
227
+ updatedAt: number;
228
+ visitorId: string;
229
+ }>;
230
+ }>;
231
+ backfillVisitorProfiles(ctx: MutationCtx | ActionCtx, args: {
232
+ siteId: string;
233
+ }): Promise<{
234
+ isDone: boolean;
235
+ updated: number;
236
+ }>;
170
237
  overview(ctx: QueryCtx | MutationCtx | ActionCtx, args: OverviewInput): Promise<{
171
238
  currency: string;
172
239
  from: number;
@@ -175,13 +242,16 @@ export declare class Rastro {
175
242
  breakdowns: {
176
243
  topBrowsers: "pageviews" | "sessions" | "eventVolume";
177
244
  topCampaigns: "pageviews" | "sessions" | "eventVolume";
245
+ topChannels: "pageviews" | "sessions" | "eventVolume";
178
246
  topCountries: "pageviews" | "sessions" | "eventVolume";
179
247
  topDevices: "pageviews" | "sessions" | "eventVolume";
180
248
  topEvents: "eventVolume";
249
+ topEvidence: "pageviews" | "sessions" | "eventVolume";
181
250
  topGoals: "goalCompletionVolume";
182
251
  topMediums: "pageviews" | "sessions" | "eventVolume";
183
252
  topOutbound: "eventVolume";
184
253
  topPages: "pageviews" | "sessions" | "eventVolume";
254
+ topPlatforms: "pageviews" | "sessions" | "eventVolume";
185
255
  topSources: "pageviews" | "sessions" | "eventVolume";
186
256
  };
187
257
  coverage: {
@@ -239,6 +309,11 @@ export declare class Rastro {
239
309
  revenueCents: number;
240
310
  value: string;
241
311
  }>;
312
+ topChannels: Array<{
313
+ count: number;
314
+ revenueCents: number;
315
+ value: string;
316
+ }>;
242
317
  topCountries: Array<{
243
318
  count: number;
244
319
  revenueCents: number;
@@ -254,6 +329,11 @@ export declare class Rastro {
254
329
  revenueCents: number;
255
330
  value: string;
256
331
  }>;
332
+ topEvidence: Array<{
333
+ count: number;
334
+ revenueCents: number;
335
+ value: string;
336
+ }>;
257
337
  topGoals: Array<{
258
338
  count: number;
259
339
  revenueCents: number;
@@ -274,6 +354,11 @@ export declare class Rastro {
274
354
  revenueCents: number;
275
355
  value: string;
276
356
  }>;
357
+ topPlatforms: Array<{
358
+ count: number;
359
+ revenueCents: number;
360
+ value: string;
361
+ }>;
277
362
  topSources: Array<{
278
363
  count: number;
279
364
  revenueCents: number;
@@ -319,6 +404,14 @@ export declare class Rastro {
319
404
  pageviewCount: number;
320
405
  path: string;
321
406
  previousPath?: string;
407
+ profile?: {
408
+ attributes?: Record<string, string | number | boolean>;
409
+ email?: string;
410
+ identifiedAt: number;
411
+ name?: string;
412
+ updatedAt: number;
413
+ visitorId: string;
414
+ };
322
415
  returning?: boolean;
323
416
  sessionId: string;
324
417
  siteId: string;
@@ -338,6 +431,7 @@ export declare class Rastro {
338
431
  affiliateId?: string;
339
432
  affiliateSlug?: string;
340
433
  browser: string;
434
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
341
435
  city?: string;
342
436
  conversionCount: number;
343
437
  country?: string;
@@ -346,6 +440,7 @@ export declare class Rastro {
346
440
  durationMs: number;
347
441
  entryPath: string;
348
442
  eventCount: number;
443
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
349
444
  exitPath: string;
350
445
  lastSeenAt: number;
351
446
  latitude?: number;
@@ -353,6 +448,15 @@ export declare class Rastro {
353
448
  newVisitor?: boolean;
354
449
  os: string;
355
450
  pageviewCount: number;
451
+ platform?: string;
452
+ profile?: {
453
+ attributes?: Record<string, string | number | boolean>;
454
+ email?: string;
455
+ identifiedAt: number;
456
+ name?: string;
457
+ updatedAt: number;
458
+ visitorId: string;
459
+ };
356
460
  referrer?: string;
357
461
  revenueCents: number;
358
462
  sessionId: string;
@@ -383,6 +487,7 @@ export declare class Rastro {
383
487
  affiliateId?: string;
384
488
  affiliateSlug?: string;
385
489
  browser: string;
490
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
386
491
  city?: string;
387
492
  conversionCount: number;
388
493
  country?: string;
@@ -391,6 +496,7 @@ export declare class Rastro {
391
496
  durationMs: number;
392
497
  entryPath: string;
393
498
  eventCount: number;
499
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
394
500
  exitPath: string;
395
501
  lastSeenAt: number;
396
502
  latitude?: number;
@@ -398,6 +504,15 @@ export declare class Rastro {
398
504
  newVisitor?: boolean;
399
505
  os: string;
400
506
  pageviewCount: number;
507
+ platform?: string;
508
+ profile?: {
509
+ attributes?: Record<string, string | number | boolean>;
510
+ email?: string;
511
+ identifiedAt: number;
512
+ name?: string;
513
+ updatedAt: number;
514
+ visitorId: string;
515
+ };
401
516
  referrer?: string;
402
517
  revenueCents: number;
403
518
  sessionId: string;
@@ -766,6 +881,26 @@ export declare class Rastro {
766
881
  updatedAt: number;
767
882
  }[]>;
768
883
  removeAffiliate(ctx: MutationCtx, siteId: string, affiliateId: string): Promise<null>;
884
+ createTrackedLink(ctx: MutationCtx, args: CreateTrackedLinkInput): Promise<string>;
885
+ updateTrackedLink(ctx: MutationCtx, args: UpdateTrackedLinkInput): Promise<null>;
886
+ deleteTrackedLink(ctx: MutationCtx, siteId: string, linkId: string): Promise<null>;
887
+ listTrackedLinks(ctx: QueryCtx | MutationCtx | ActionCtx, args: ListTrackedLinksInput): Promise<{
888
+ _creationTime: number;
889
+ _id: string;
890
+ bots: number;
891
+ botsLast30Days: number;
892
+ campaign?: string;
893
+ channel: "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "display" | "referral" | "offline";
894
+ clicks: number;
895
+ clicksLast30Days: number;
896
+ createdAt: number;
897
+ createdBy: string;
898
+ destination: string;
899
+ disabledAt?: number;
900
+ platform: string;
901
+ siteId: string;
902
+ slug: string;
903
+ }[]>;
769
904
  cleanup(ctx: MutationCtx, args: CleanupInput): Promise<{
770
905
  before: number;
771
906
  deleted: number;
@@ -780,7 +915,7 @@ export declare class Rastro {
780
915
  retainedBefore: number | null;
781
916
  state: "complete" | "partial" | "retained" | "unavailable";
782
917
  };
783
- dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap";
918
+ dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap" | "origin";
784
919
  }>;
785
920
  from: number;
786
921
  siteId: string;
@@ -813,7 +948,7 @@ export declare class Rastro {
813
948
  hasMore: boolean;
814
949
  }>;
815
950
  }
816
- export type AnalyticsOperation = "site.create" | "site.update" | "site.get" | "site.list" | "ingest" | "conversion.track" | "visitor.link" | "report.overview" | "report.live" | "report.sessions" | "report.sessionJourney" | "report.conversions" | "report.visitorJourney" | "report.goals" | "report.funnels" | "report.affiliates" | "report.vitals" | "report.siteMap" | "goal.upsert" | "goal.list" | "goal.remove" | "funnel.upsert" | "funnel.list" | "funnel.remove" | "affiliate.upsert" | "affiliate.list" | "affiliate.remove" | "retention.cleanup" | "retention.policy" | "retention.status" | "coverage.read";
951
+ export type AnalyticsOperation = "site.create" | "site.update" | "site.get" | "site.list" | "ingest" | "conversion.track" | "visitor.link" | "visitor.identify" | "visitor.profile" | "visitor.list" | "visitor.index" | "report.overview" | "report.live" | "report.sessions" | "report.sessionJourney" | "report.conversions" | "report.visitorJourney" | "report.goals" | "report.funnels" | "report.affiliates" | "report.vitals" | "report.siteMap" | "goal.upsert" | "goal.list" | "goal.remove" | "funnel.upsert" | "funnel.list" | "funnel.remove" | "affiliate.upsert" | "affiliate.list" | "affiliate.remove" | "trackedLink.create" | "trackedLink.update" | "trackedLink.delete" | "trackedLink.list" | "retention.cleanup" | "retention.policy" | "retention.status" | "coverage.read";
817
952
  export type AnalyticsAuthorizationRequest = {
818
953
  operation: AnalyticsOperation;
819
954
  siteIds: string[];
@@ -829,13 +964,16 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
829
964
  breakdowns: {
830
965
  topBrowsers: "eventVolume" | "pageviews" | "sessions";
831
966
  topCampaigns: "eventVolume" | "pageviews" | "sessions";
967
+ topChannels: "eventVolume" | "pageviews" | "sessions";
832
968
  topCountries: "eventVolume" | "pageviews" | "sessions";
833
969
  topDevices: "eventVolume" | "pageviews" | "sessions";
834
970
  topEvents: "eventVolume";
971
+ topEvidence: "eventVolume" | "pageviews" | "sessions";
835
972
  topGoals: "goalCompletionVolume";
836
973
  topMediums: "eventVolume" | "pageviews" | "sessions";
837
974
  topOutbound: "eventVolume";
838
975
  topPages: "eventVolume" | "pageviews" | "sessions";
976
+ topPlatforms: "eventVolume" | "pageviews" | "sessions";
839
977
  topSources: "eventVolume" | "pageviews" | "sessions";
840
978
  };
841
979
  coverage: {
@@ -893,6 +1031,11 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
893
1031
  revenueCents: number;
894
1032
  value: string;
895
1033
  }[];
1034
+ topChannels: {
1035
+ count: number;
1036
+ revenueCents: number;
1037
+ value: string;
1038
+ }[];
896
1039
  topCountries: {
897
1040
  count: number;
898
1041
  revenueCents: number;
@@ -908,6 +1051,11 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
908
1051
  revenueCents: number;
909
1052
  value: string;
910
1053
  }[];
1054
+ topEvidence: {
1055
+ count: number;
1056
+ revenueCents: number;
1057
+ value: string;
1058
+ }[];
911
1059
  topGoals: {
912
1060
  count: number;
913
1061
  revenueCents: number;
@@ -928,6 +1076,11 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
928
1076
  revenueCents: number;
929
1077
  value: string;
930
1078
  }[];
1079
+ topPlatforms: {
1080
+ count: number;
1081
+ revenueCents: number;
1082
+ value: string;
1083
+ }[];
931
1084
  topSources: {
932
1085
  count: number;
933
1086
  revenueCents: number;
@@ -1152,17 +1305,59 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
1152
1305
  count: import("convex/values").VFloat64<number, "required">;
1153
1306
  revenueCents: import("convex/values").VFloat64<number, "required">;
1154
1307
  }, "required", "count" | "revenueCents" | "value">, "required">;
1308
+ topPlatforms: import("convex/values").VArray<{
1309
+ count: number;
1310
+ revenueCents: number;
1311
+ value: string;
1312
+ }[], import("convex/values").VObject<{
1313
+ count: number;
1314
+ revenueCents: number;
1315
+ value: string;
1316
+ }, {
1317
+ value: import("convex/values").VString<string, "required">;
1318
+ count: import("convex/values").VFloat64<number, "required">;
1319
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1320
+ }, "required", "count" | "revenueCents" | "value">, "required">;
1321
+ topChannels: import("convex/values").VArray<{
1322
+ count: number;
1323
+ revenueCents: number;
1324
+ value: string;
1325
+ }[], import("convex/values").VObject<{
1326
+ count: number;
1327
+ revenueCents: number;
1328
+ value: string;
1329
+ }, {
1330
+ value: import("convex/values").VString<string, "required">;
1331
+ count: import("convex/values").VFloat64<number, "required">;
1332
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1333
+ }, "required", "count" | "revenueCents" | "value">, "required">;
1334
+ topEvidence: import("convex/values").VArray<{
1335
+ count: number;
1336
+ revenueCents: number;
1337
+ value: string;
1338
+ }[], import("convex/values").VObject<{
1339
+ count: number;
1340
+ revenueCents: number;
1341
+ value: string;
1342
+ }, {
1343
+ value: import("convex/values").VString<string, "required">;
1344
+ count: import("convex/values").VFloat64<number, "required">;
1345
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1346
+ }, "required", "count" | "revenueCents" | "value">, "required">;
1155
1347
  metadata: import("convex/values").VObject<{
1156
1348
  breakdowns: {
1157
1349
  topBrowsers: "eventVolume" | "pageviews" | "sessions";
1158
1350
  topCampaigns: "eventVolume" | "pageviews" | "sessions";
1351
+ topChannels: "eventVolume" | "pageviews" | "sessions";
1159
1352
  topCountries: "eventVolume" | "pageviews" | "sessions";
1160
1353
  topDevices: "eventVolume" | "pageviews" | "sessions";
1161
1354
  topEvents: "eventVolume";
1355
+ topEvidence: "eventVolume" | "pageviews" | "sessions";
1162
1356
  topGoals: "goalCompletionVolume";
1163
1357
  topMediums: "eventVolume" | "pageviews" | "sessions";
1164
1358
  topOutbound: "eventVolume";
1165
1359
  topPages: "eventVolume" | "pageviews" | "sessions";
1360
+ topPlatforms: "eventVolume" | "pageviews" | "sessions";
1166
1361
  topSources: "eventVolume" | "pageviews" | "sessions";
1167
1362
  };
1168
1363
  coverage: {
@@ -1210,13 +1405,16 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
1210
1405
  breakdowns: import("convex/values").VObject<{
1211
1406
  topBrowsers: "eventVolume" | "pageviews" | "sessions";
1212
1407
  topCampaigns: "eventVolume" | "pageviews" | "sessions";
1408
+ topChannels: "eventVolume" | "pageviews" | "sessions";
1213
1409
  topCountries: "eventVolume" | "pageviews" | "sessions";
1214
1410
  topDevices: "eventVolume" | "pageviews" | "sessions";
1215
1411
  topEvents: "eventVolume";
1412
+ topEvidence: "eventVolume" | "pageviews" | "sessions";
1216
1413
  topGoals: "goalCompletionVolume";
1217
1414
  topMediums: "eventVolume" | "pageviews" | "sessions";
1218
1415
  topOutbound: "eventVolume";
1219
1416
  topPages: "eventVolume" | "pageviews" | "sessions";
1417
+ topPlatforms: "eventVolume" | "pageviews" | "sessions";
1220
1418
  topSources: "eventVolume" | "pageviews" | "sessions";
1221
1419
  }, {
1222
1420
  topSources: import("convex/values").VUnion<"eventVolume" | "pageviews" | "sessions", [import("convex/values").VLiteral<"pageviews", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"eventVolume", "required">], "required", never>;
@@ -1229,7 +1427,10 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
1229
1427
  topGoals: import("convex/values").VLiteral<"goalCompletionVolume", "required">;
1230
1428
  topMediums: import("convex/values").VUnion<"eventVolume" | "pageviews" | "sessions", [import("convex/values").VLiteral<"pageviews", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"eventVolume", "required">], "required", never>;
1231
1429
  topOutbound: import("convex/values").VLiteral<"eventVolume", "required">;
1232
- }, "required", "topBrowsers" | "topCampaigns" | "topCountries" | "topDevices" | "topEvents" | "topGoals" | "topMediums" | "topOutbound" | "topPages" | "topSources">;
1430
+ topPlatforms: import("convex/values").VUnion<"eventVolume" | "pageviews" | "sessions", [import("convex/values").VLiteral<"pageviews", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"eventVolume", "required">], "required", never>;
1431
+ topChannels: import("convex/values").VUnion<"eventVolume" | "pageviews" | "sessions", [import("convex/values").VLiteral<"pageviews", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"eventVolume", "required">], "required", never>;
1432
+ topEvidence: import("convex/values").VUnion<"eventVolume" | "pageviews" | "sessions", [import("convex/values").VLiteral<"pageviews", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"eventVolume", "required">], "required", never>;
1433
+ }, "required", "topBrowsers" | "topCampaigns" | "topChannels" | "topCountries" | "topDevices" | "topEvents" | "topEvidence" | "topGoals" | "topMediums" | "topOutbound" | "topPages" | "topPlatforms" | "topSources">;
1233
1434
  dimensionsSince: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1234
1435
  engagement: import("convex/values").VUnion<"counted" | "unavailable", [import("convex/values").VLiteral<"counted", "required">, import("convex/values").VLiteral<"unavailable", "required">], "required", never>;
1235
1436
  coverage: import("convex/values").VObject<{
@@ -1267,8 +1468,8 @@ declare const hostOverviewValidator: import("convex/values").VObject<{
1267
1468
  outboundLinks: import("convex/values").VLiteral<"eventVolume", "required">;
1268
1469
  botDetection: import("convex/values").VLiteral<"userAgent", "required">;
1269
1470
  }, "required", "botDetection" | "errorInsights" | "outboundLinks" | "sessionReplay">;
1270
- }, "required", "breakdowns" | "breakdowns.topBrowsers" | "breakdowns.topCampaigns" | "breakdowns.topCountries" | "breakdowns.topDevices" | "breakdowns.topEvents" | "breakdowns.topGoals" | "breakdowns.topMediums" | "breakdowns.topOutbound" | "breakdowns.topPages" | "breakdowns.topSources" | "coverage" | "coverage.availableFrom" | "coverage.availableThrough" | "coverage.generation" | "coverage.retainedBefore" | "coverage.state" | "dimensionsSince" | "engagement" | "features" | "features.botDetection" | "features.errorInsights" | "features.outboundLinks" | "features.sessionReplay" | "range" | "range.boundary" | "range.from" | "range.timezone" | "range.to" | "visitors" | "visitors.basis" | "visitors.exact" | "visitors.legacyIncomplete" | "visitors.precision" | "visitors.sketchVersion">;
1271
- }, "required", "currency" | "from" | "interval" | "metadata" | "metadata.breakdowns" | "metadata.breakdowns.topBrowsers" | "metadata.breakdowns.topCampaigns" | "metadata.breakdowns.topCountries" | "metadata.breakdowns.topDevices" | "metadata.breakdowns.topEvents" | "metadata.breakdowns.topGoals" | "metadata.breakdowns.topMediums" | "metadata.breakdowns.topOutbound" | "metadata.breakdowns.topPages" | "metadata.breakdowns.topSources" | "metadata.coverage" | "metadata.coverage.availableFrom" | "metadata.coverage.availableThrough" | "metadata.coverage.generation" | "metadata.coverage.retainedBefore" | "metadata.coverage.state" | "metadata.dimensionsSince" | "metadata.engagement" | "metadata.features" | "metadata.features.botDetection" | "metadata.features.errorInsights" | "metadata.features.outboundLinks" | "metadata.features.sessionReplay" | "metadata.range" | "metadata.range.boundary" | "metadata.range.from" | "metadata.range.timezone" | "metadata.range.to" | "metadata.visitors" | "metadata.visitors.basis" | "metadata.visitors.exact" | "metadata.visitors.legacyIncomplete" | "metadata.visitors.precision" | "metadata.visitors.sketchVersion" | "timeSeries" | "to" | "topBrowsers" | "topCampaigns" | "topCountries" | "topDevices" | "topEvents" | "topGoals" | "topMediums" | "topOutbound" | "topPages" | "topSources" | "totals" | "totals.clicks" | "totals.continuedSessions" | "totals.conversions" | "totals.customEvents" | "totals.durationMs" | "totals.events" | "totals.newVisitors" | "totals.outboundClicks" | "totals.pageviews" | "totals.revenueCents" | "totals.sessions" | "totals.visitors">;
1471
+ }, "required", "breakdowns" | "breakdowns.topBrowsers" | "breakdowns.topCampaigns" | "breakdowns.topChannels" | "breakdowns.topCountries" | "breakdowns.topDevices" | "breakdowns.topEvents" | "breakdowns.topEvidence" | "breakdowns.topGoals" | "breakdowns.topMediums" | "breakdowns.topOutbound" | "breakdowns.topPages" | "breakdowns.topPlatforms" | "breakdowns.topSources" | "coverage" | "coverage.availableFrom" | "coverage.availableThrough" | "coverage.generation" | "coverage.retainedBefore" | "coverage.state" | "dimensionsSince" | "engagement" | "features" | "features.botDetection" | "features.errorInsights" | "features.outboundLinks" | "features.sessionReplay" | "range" | "range.boundary" | "range.from" | "range.timezone" | "range.to" | "visitors" | "visitors.basis" | "visitors.exact" | "visitors.legacyIncomplete" | "visitors.precision" | "visitors.sketchVersion">;
1472
+ }, "required", "currency" | "from" | "interval" | "metadata" | "metadata.breakdowns" | "metadata.breakdowns.topBrowsers" | "metadata.breakdowns.topCampaigns" | "metadata.breakdowns.topChannels" | "metadata.breakdowns.topCountries" | "metadata.breakdowns.topDevices" | "metadata.breakdowns.topEvents" | "metadata.breakdowns.topEvidence" | "metadata.breakdowns.topGoals" | "metadata.breakdowns.topMediums" | "metadata.breakdowns.topOutbound" | "metadata.breakdowns.topPages" | "metadata.breakdowns.topPlatforms" | "metadata.breakdowns.topSources" | "metadata.coverage" | "metadata.coverage.availableFrom" | "metadata.coverage.availableThrough" | "metadata.coverage.generation" | "metadata.coverage.retainedBefore" | "metadata.coverage.state" | "metadata.dimensionsSince" | "metadata.engagement" | "metadata.features" | "metadata.features.botDetection" | "metadata.features.errorInsights" | "metadata.features.outboundLinks" | "metadata.features.sessionReplay" | "metadata.range" | "metadata.range.boundary" | "metadata.range.from" | "metadata.range.timezone" | "metadata.range.to" | "metadata.visitors" | "metadata.visitors.basis" | "metadata.visitors.exact" | "metadata.visitors.legacyIncomplete" | "metadata.visitors.precision" | "metadata.visitors.sketchVersion" | "timeSeries" | "to" | "topBrowsers" | "topCampaigns" | "topChannels" | "topCountries" | "topDevices" | "topEvents" | "topEvidence" | "topGoals" | "topMediums" | "topOutbound" | "topPages" | "topPlatforms" | "topSources" | "totals" | "totals.clicks" | "totals.continuedSessions" | "totals.conversions" | "totals.customEvents" | "totals.durationMs" | "totals.events" | "totals.newVisitors" | "totals.outboundClicks" | "totals.pageviews" | "totals.revenueCents" | "totals.sessions" | "totals.visitors">;
1272
1473
  declare const hostGoalsReportValidator: import("convex/values").VObject<{
1273
1474
  goals: {
1274
1475
  _creationTime: number;
@@ -2186,6 +2387,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2186
2387
  city?: string | undefined;
2187
2388
  country?: string | undefined;
2188
2389
  device?: string | undefined;
2390
+ inApp?: string | undefined;
2189
2391
  latitude?: number | undefined;
2190
2392
  longitude?: number | undefined;
2191
2393
  os?: string | undefined;
@@ -2193,6 +2395,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2193
2395
  } | undefined;
2194
2396
  events: {
2195
2397
  affiliateSlug?: string | undefined;
2398
+ clid?: string[] | undefined;
2196
2399
  currency?: string | undefined;
2197
2400
  eventId: string;
2198
2401
  href?: string | undefined;
@@ -2240,6 +2443,67 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2240
2443
  aliasCount: number;
2241
2444
  linked: boolean;
2242
2445
  }>>;
2446
+ identifyVisitor: import("convex/server").RegisteredMutation<"public", {
2447
+ attributes?: Record<string, string | number | boolean | null> | undefined;
2448
+ email?: string | null | undefined;
2449
+ name?: string | null | undefined;
2450
+ previousVisitorId?: string | undefined;
2451
+ siteId: string;
2452
+ visitorId: string;
2453
+ }, Promise<{
2454
+ attributes?: Record<string, string | number | boolean>;
2455
+ email?: string;
2456
+ identifiedAt: number;
2457
+ name?: string;
2458
+ updatedAt: number;
2459
+ visitorId: string;
2460
+ }>>;
2461
+ getVisitorProfile: import("convex/server").RegisteredQuery<"public", {
2462
+ siteId: string;
2463
+ visitorId: string;
2464
+ }, Promise<{
2465
+ attributes?: Record<string, string | number | boolean>;
2466
+ email?: string;
2467
+ identifiedAt: number;
2468
+ name?: string;
2469
+ updatedAt: number;
2470
+ visitorId: string;
2471
+ } | null>>;
2472
+ listPeople: import("convex/server").RegisteredQuery<"public", {
2473
+ filter?: {
2474
+ field: "email" | "name" | "visitorId";
2475
+ prefix: string;
2476
+ } | {
2477
+ field: "attribute";
2478
+ key: string;
2479
+ value: string | number | boolean;
2480
+ } | undefined;
2481
+ paginationOpts: {
2482
+ cursor: string | null;
2483
+ numItems: number;
2484
+ };
2485
+ siteId: string;
2486
+ }, Promise<{
2487
+ continueCursor: string;
2488
+ isDone: boolean;
2489
+ page: Array<{
2490
+ _creationTime: number;
2491
+ _id: string;
2492
+ attributes?: Record<string, string | number | boolean>;
2493
+ email?: string;
2494
+ identifiedAt: number;
2495
+ name?: string;
2496
+ siteId: string;
2497
+ updatedAt: number;
2498
+ visitorId: string;
2499
+ }>;
2500
+ }>>;
2501
+ backfillVisitorProfiles: import("convex/server").RegisteredMutation<"public", {
2502
+ siteId: string;
2503
+ }, Promise<{
2504
+ isDone: boolean;
2505
+ updated: number;
2506
+ }>>;
2243
2507
  overview: import("convex/server").RegisteredQuery<"public", {
2244
2508
  from: number;
2245
2509
  interval?: "day" | "hour" | undefined;
@@ -2253,13 +2517,16 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2253
2517
  breakdowns: {
2254
2518
  topBrowsers: "pageviews" | "sessions" | "eventVolume";
2255
2519
  topCampaigns: "pageviews" | "sessions" | "eventVolume";
2520
+ topChannels: "pageviews" | "sessions" | "eventVolume";
2256
2521
  topCountries: "pageviews" | "sessions" | "eventVolume";
2257
2522
  topDevices: "pageviews" | "sessions" | "eventVolume";
2258
2523
  topEvents: "eventVolume";
2524
+ topEvidence: "pageviews" | "sessions" | "eventVolume";
2259
2525
  topGoals: "goalCompletionVolume";
2260
2526
  topMediums: "pageviews" | "sessions" | "eventVolume";
2261
2527
  topOutbound: "eventVolume";
2262
2528
  topPages: "pageviews" | "sessions" | "eventVolume";
2529
+ topPlatforms: "pageviews" | "sessions" | "eventVolume";
2263
2530
  topSources: "pageviews" | "sessions" | "eventVolume";
2264
2531
  };
2265
2532
  coverage: {
@@ -2317,6 +2584,11 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2317
2584
  revenueCents: number;
2318
2585
  value: string;
2319
2586
  }>;
2587
+ topChannels: Array<{
2588
+ count: number;
2589
+ revenueCents: number;
2590
+ value: string;
2591
+ }>;
2320
2592
  topCountries: Array<{
2321
2593
  count: number;
2322
2594
  revenueCents: number;
@@ -2332,6 +2604,11 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2332
2604
  revenueCents: number;
2333
2605
  value: string;
2334
2606
  }>;
2607
+ topEvidence: Array<{
2608
+ count: number;
2609
+ revenueCents: number;
2610
+ value: string;
2611
+ }>;
2335
2612
  topGoals: Array<{
2336
2613
  count: number;
2337
2614
  revenueCents: number;
@@ -2352,6 +2629,11 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2352
2629
  revenueCents: number;
2353
2630
  value: string;
2354
2631
  }>;
2632
+ topPlatforms: Array<{
2633
+ count: number;
2634
+ revenueCents: number;
2635
+ value: string;
2636
+ }>;
2355
2637
  topSources: Array<{
2356
2638
  count: number;
2357
2639
  revenueCents: number;
@@ -2401,6 +2683,14 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2401
2683
  pageviewCount: number;
2402
2684
  path: string;
2403
2685
  previousPath?: string;
2686
+ profile?: {
2687
+ attributes?: Record<string, string | number | boolean>;
2688
+ email?: string;
2689
+ identifiedAt: number;
2690
+ name?: string;
2691
+ updatedAt: number;
2692
+ visitorId: string;
2693
+ };
2404
2694
  returning?: boolean;
2405
2695
  sessionId: string;
2406
2696
  siteId: string;
@@ -2420,6 +2710,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2420
2710
  affiliateId?: string;
2421
2711
  affiliateSlug?: string;
2422
2712
  browser: string;
2713
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
2423
2714
  city?: string;
2424
2715
  conversionCount: number;
2425
2716
  country?: string;
@@ -2428,6 +2719,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2428
2719
  durationMs: number;
2429
2720
  entryPath: string;
2430
2721
  eventCount: number;
2722
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
2431
2723
  exitPath: string;
2432
2724
  lastSeenAt: number;
2433
2725
  latitude?: number;
@@ -2435,6 +2727,15 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2435
2727
  newVisitor?: boolean;
2436
2728
  os: string;
2437
2729
  pageviewCount: number;
2730
+ platform?: string;
2731
+ profile?: {
2732
+ attributes?: Record<string, string | number | boolean>;
2733
+ email?: string;
2734
+ identifiedAt: number;
2735
+ name?: string;
2736
+ updatedAt: number;
2737
+ visitorId: string;
2738
+ };
2438
2739
  referrer?: string;
2439
2740
  revenueCents: number;
2440
2741
  sessionId: string;
@@ -2477,6 +2778,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2477
2778
  affiliateId?: string;
2478
2779
  affiliateSlug?: string;
2479
2780
  browser: string;
2781
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
2480
2782
  city?: string;
2481
2783
  conversionCount: number;
2482
2784
  country?: string;
@@ -2485,6 +2787,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2485
2787
  durationMs: number;
2486
2788
  entryPath: string;
2487
2789
  eventCount: number;
2790
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
2488
2791
  exitPath: string;
2489
2792
  lastSeenAt: number;
2490
2793
  latitude?: number;
@@ -2492,6 +2795,15 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2492
2795
  newVisitor?: boolean;
2493
2796
  os: string;
2494
2797
  pageviewCount: number;
2798
+ platform?: string;
2799
+ profile?: {
2800
+ attributes?: Record<string, string | number | boolean>;
2801
+ email?: string;
2802
+ identifiedAt: number;
2803
+ name?: string;
2804
+ updatedAt: number;
2805
+ visitorId: string;
2806
+ };
2495
2807
  referrer?: string;
2496
2808
  revenueCents: number;
2497
2809
  sessionId: string;
@@ -2877,7 +3189,7 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
2877
3189
  retainedBefore: number | null;
2878
3190
  state: "complete" | "partial" | "retained" | "unavailable";
2879
3191
  };
2880
- dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap";
3192
+ dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap" | "origin";
2881
3193
  }>;
2882
3194
  from: number;
2883
3195
  siteId: string;
@@ -3015,6 +3327,48 @@ export declare function exposeAnalyticsApi(component: ComponentApi, options: {
3015
3327
  affiliateId: string;
3016
3328
  siteId: string;
3017
3329
  }, Promise<null>>;
3330
+ createTrackedLink: import("convex/server").RegisteredMutation<"public", {
3331
+ campaign?: string | undefined;
3332
+ channel: "affiliate" | "display" | "email" | "messaging" | "offline" | "organic_social" | "paid_social" | "referral";
3333
+ createdBy: string;
3334
+ destination: string;
3335
+ platform: string;
3336
+ siteId: string;
3337
+ slug: string;
3338
+ }, Promise<string>>;
3339
+ updateTrackedLink: import("convex/server").RegisteredMutation<"public", {
3340
+ campaign?: string | null | undefined;
3341
+ channel?: "affiliate" | "display" | "email" | "messaging" | "offline" | "organic_social" | "paid_social" | "referral" | undefined;
3342
+ destination?: string | undefined;
3343
+ disabled?: boolean | undefined;
3344
+ linkId: string;
3345
+ platform?: string | undefined;
3346
+ siteId: string;
3347
+ }, Promise<null>>;
3348
+ deleteTrackedLink: import("convex/server").RegisteredMutation<"public", {
3349
+ linkId: string;
3350
+ siteId: string;
3351
+ }, Promise<null>>;
3352
+ listTrackedLinks: import("convex/server").RegisteredQuery<"public", {
3353
+ now: number;
3354
+ siteId: string;
3355
+ }, Promise<{
3356
+ _creationTime: number;
3357
+ _id: string;
3358
+ bots: number;
3359
+ botsLast30Days: number;
3360
+ campaign?: string;
3361
+ channel: "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "display" | "referral" | "offline";
3362
+ clicks: number;
3363
+ clicksLast30Days: number;
3364
+ createdAt: number;
3365
+ createdBy: string;
3366
+ destination: string;
3367
+ disabledAt?: number;
3368
+ platform: string;
3369
+ siteId: string;
3370
+ slug: string;
3371
+ }[]>>;
3018
3372
  cleanupAnalytics: import("convex/server").RegisteredMutation<"public", {
3019
3373
  batchSize?: number | undefined;
3020
3374
  before: number;
@@ -3079,12 +3433,18 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3079
3433
  setRetentionPolicy: "setRetentionPolicy";
3080
3434
  disableRetentionPolicy: "disableRetentionPolicy";
3081
3435
  getSession: "getSession";
3436
+ getVisitorProfile: "getVisitorProfile";
3437
+ listPeople: "listPeople";
3082
3438
  revenueSummary: "revenueSummary";
3083
3439
  vitalsReport: "vitalsReport";
3084
3440
  siteMap: "siteMap";
3441
+ listTrackedLinks: "listTrackedLinks";
3442
+ createTrackedLink: "createTrackedLink";
3443
+ updateTrackedLink: "updateTrackedLink";
3444
+ deleteTrackedLink: "deleteTrackedLink";
3085
3445
  transferConnection?: "transferConnection" | undefined;
3086
3446
  };
3087
- capabilities: ("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "revenueSummary" | "sessionDetails" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "transfer" | "visitorJourney" | "vitals")[];
3447
+ capabilities: ("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "people" | "revenueSummary" | "sessionDetails" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "trackedLinks" | "transfer" | "visitorJourney" | "visitorProfiles" | "vitals")[];
3088
3448
  limits: {
3089
3449
  maxSitesPerRequest: 10;
3090
3450
  maxSitesPerConnection: 10;
@@ -3109,13 +3469,16 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3109
3469
  breakdowns: {
3110
3470
  topBrowsers: "pageviews" | "sessions" | "eventVolume";
3111
3471
  topCampaigns: "pageviews" | "sessions" | "eventVolume";
3472
+ topChannels: "pageviews" | "sessions" | "eventVolume";
3112
3473
  topCountries: "pageviews" | "sessions" | "eventVolume";
3113
3474
  topDevices: "pageviews" | "sessions" | "eventVolume";
3114
3475
  topEvents: "eventVolume";
3476
+ topEvidence: "pageviews" | "sessions" | "eventVolume";
3115
3477
  topGoals: "goalCompletionVolume";
3116
3478
  topMediums: "pageviews" | "sessions" | "eventVolume";
3117
3479
  topOutbound: "eventVolume";
3118
3480
  topPages: "pageviews" | "sessions" | "eventVolume";
3481
+ topPlatforms: "pageviews" | "sessions" | "eventVolume";
3119
3482
  topSources: "pageviews" | "sessions" | "eventVolume";
3120
3483
  };
3121
3484
  coverage: {
@@ -3173,6 +3536,11 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3173
3536
  revenueCents: number;
3174
3537
  value: string;
3175
3538
  }>;
3539
+ topChannels: Array<{
3540
+ count: number;
3541
+ revenueCents: number;
3542
+ value: string;
3543
+ }>;
3176
3544
  topCountries: Array<{
3177
3545
  count: number;
3178
3546
  revenueCents: number;
@@ -3188,6 +3556,11 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3188
3556
  revenueCents: number;
3189
3557
  value: string;
3190
3558
  }>;
3559
+ topEvidence: Array<{
3560
+ count: number;
3561
+ revenueCents: number;
3562
+ value: string;
3563
+ }>;
3191
3564
  topGoals: Array<{
3192
3565
  count: number;
3193
3566
  revenueCents: number;
@@ -3208,6 +3581,11 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3208
3581
  revenueCents: number;
3209
3582
  value: string;
3210
3583
  }>;
3584
+ topPlatforms: Array<{
3585
+ count: number;
3586
+ revenueCents: number;
3587
+ value: string;
3588
+ }>;
3211
3589
  topSources: Array<{
3212
3590
  count: number;
3213
3591
  revenueCents: number;
@@ -3257,6 +3635,14 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3257
3635
  pageviewCount: number;
3258
3636
  path: string;
3259
3637
  previousPath?: string;
3638
+ profile?: {
3639
+ attributes?: Record<string, string | number | boolean>;
3640
+ email?: string;
3641
+ identifiedAt: number;
3642
+ name?: string;
3643
+ updatedAt: number;
3644
+ visitorId: string;
3645
+ };
3260
3646
  returning?: boolean;
3261
3647
  sessionId: string;
3262
3648
  siteId: string;
@@ -3276,6 +3662,7 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3276
3662
  affiliateId?: string;
3277
3663
  affiliateSlug?: string;
3278
3664
  browser: string;
3665
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
3279
3666
  city?: string;
3280
3667
  conversionCount: number;
3281
3668
  country?: string;
@@ -3284,6 +3671,7 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3284
3671
  durationMs: number;
3285
3672
  entryPath: string;
3286
3673
  eventCount: number;
3674
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
3287
3675
  exitPath: string;
3288
3676
  lastSeenAt: number;
3289
3677
  latitude?: number;
@@ -3291,6 +3679,15 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3291
3679
  newVisitor?: boolean;
3292
3680
  os: string;
3293
3681
  pageviewCount: number;
3682
+ platform?: string;
3683
+ profile?: {
3684
+ attributes?: Record<string, string | number | boolean>;
3685
+ email?: string;
3686
+ identifiedAt: number;
3687
+ name?: string;
3688
+ updatedAt: number;
3689
+ visitorId: string;
3690
+ };
3294
3691
  referrer?: string;
3295
3692
  revenueCents: number;
3296
3693
  sessionId: string;
@@ -3333,6 +3730,7 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3333
3730
  affiliateId?: string;
3334
3731
  affiliateSlug?: string;
3335
3732
  browser: string;
3733
+ channel?: "direct" | "organic_search" | "paid_search" | "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "ai" | "display" | "referral" | "offline";
3336
3734
  city?: string;
3337
3735
  conversionCount: number;
3338
3736
  country?: string;
@@ -3341,6 +3739,7 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3341
3739
  durationMs: number;
3342
3740
  entryPath: string;
3343
3741
  eventCount: number;
3742
+ evidence?: "utm" | "clickId" | "referrer" | "inApp" | "affiliate" | "none" | "legacy";
3344
3743
  exitPath: string;
3345
3744
  lastSeenAt: number;
3346
3745
  latitude?: number;
@@ -3348,6 +3747,15 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3348
3747
  newVisitor?: boolean;
3349
3748
  os: string;
3350
3749
  pageviewCount: number;
3750
+ platform?: string;
3751
+ profile?: {
3752
+ attributes?: Record<string, string | number | boolean>;
3753
+ email?: string;
3754
+ identifiedAt: number;
3755
+ name?: string;
3756
+ updatedAt: number;
3757
+ visitorId: string;
3758
+ };
3351
3759
  referrer?: string;
3352
3760
  revenueCents: number;
3353
3761
  sessionId: string;
@@ -3479,6 +3887,46 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3479
3887
  type: "pageview" | "click" | "custom" | "conversion" | "heartbeat" | "leave" | "outbound" | "vital";
3480
3888
  visitorId: string;
3481
3889
  }[]>>;
3890
+ getVisitorProfile: import("convex/server").RegisteredQuery<"public", {
3891
+ siteId: string;
3892
+ visitorId: string;
3893
+ }, Promise<{
3894
+ attributes?: Record<string, string | number | boolean>;
3895
+ email?: string;
3896
+ identifiedAt: number;
3897
+ name?: string;
3898
+ updatedAt: number;
3899
+ visitorId: string;
3900
+ } | null>>;
3901
+ listPeople: import("convex/server").RegisteredQuery<"public", {
3902
+ filter?: {
3903
+ field: "email" | "name" | "visitorId";
3904
+ prefix: string;
3905
+ } | {
3906
+ field: "attribute";
3907
+ key: string;
3908
+ value: string | number | boolean;
3909
+ } | undefined;
3910
+ paginationOpts: {
3911
+ cursor: string | null;
3912
+ numItems: number;
3913
+ };
3914
+ siteId: string;
3915
+ }, Promise<{
3916
+ continueCursor: string;
3917
+ isDone: boolean;
3918
+ page: Array<{
3919
+ _creationTime: number;
3920
+ _id: string;
3921
+ attributes?: Record<string, string | number | boolean>;
3922
+ email?: string;
3923
+ identifiedAt: number;
3924
+ name?: string;
3925
+ siteId: string;
3926
+ updatedAt: number;
3927
+ visitorId: string;
3928
+ }>;
3929
+ }>>;
3482
3930
  goalsReport: import("convex/server").RegisteredQuery<"public", {
3483
3931
  from: number;
3484
3932
  siteId: string;
@@ -3733,7 +4181,7 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3733
4181
  retainedBefore: number | null;
3734
4182
  state: "complete" | "partial" | "retained" | "unavailable";
3735
4183
  };
3736
- dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap";
4184
+ dataset: "overviewHour" | "overviewDay" | "overviewLocalDay" | "events" | "sessions" | "conversions" | "goals" | "funnels" | "affiliates" | "vitals" | "siteMap" | "origin";
3737
4185
  }>;
3738
4186
  from: number;
3739
4187
  siteId: string;
@@ -3846,6 +4294,48 @@ export declare function exposeFederatedAnalyticsApi(component: ComponentApi, opt
3846
4294
  affiliateId: string;
3847
4295
  siteId: string;
3848
4296
  }, Promise<null>>;
4297
+ listTrackedLinks: import("convex/server").RegisteredQuery<"public", {
4298
+ now: number;
4299
+ siteId: string;
4300
+ }, Promise<{
4301
+ _creationTime: number;
4302
+ _id: string;
4303
+ bots: number;
4304
+ botsLast30Days: number;
4305
+ campaign?: string;
4306
+ channel: "organic_social" | "paid_social" | "messaging" | "email" | "affiliate" | "display" | "referral" | "offline";
4307
+ clicks: number;
4308
+ clicksLast30Days: number;
4309
+ createdAt: number;
4310
+ createdBy: string;
4311
+ destination: string;
4312
+ disabledAt?: number;
4313
+ platform: string;
4314
+ siteId: string;
4315
+ slug: string;
4316
+ }[]>>;
4317
+ createTrackedLink: import("convex/server").RegisteredMutation<"public", {
4318
+ campaign?: string | undefined;
4319
+ channel: "affiliate" | "display" | "email" | "messaging" | "offline" | "organic_social" | "paid_social" | "referral";
4320
+ createdBy: string;
4321
+ destination: string;
4322
+ platform: string;
4323
+ siteId: string;
4324
+ slug: string;
4325
+ }, Promise<string>>;
4326
+ updateTrackedLink: import("convex/server").RegisteredMutation<"public", {
4327
+ campaign?: string | null | undefined;
4328
+ channel?: "affiliate" | "display" | "email" | "messaging" | "offline" | "organic_social" | "paid_social" | "referral" | undefined;
4329
+ destination?: string | undefined;
4330
+ disabled?: boolean | undefined;
4331
+ linkId: string;
4332
+ platform?: string | undefined;
4333
+ siteId: string;
4334
+ }, Promise<null>>;
4335
+ deleteTrackedLink: import("convex/server").RegisteredMutation<"public", {
4336
+ linkId: string;
4337
+ siteId: string;
4338
+ }, Promise<null>>;
3849
4339
  retentionStatus: import("convex/server").RegisteredQuery<"public", {
3850
4340
  siteId: string;
3851
4341
  }, Promise<{