@iann29/rastro 0.6.0 → 0.8.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 (63) hide show
  1. package/README.md +90 -0
  2. package/agent/integration.md +19 -0
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +34 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +14 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +365 -5
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +98 -6
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +2 -0
  13. package/dist/component/_generated/api.d.ts.map +1 -1
  14. package/dist/component/_generated/api.js.map +1 -1
  15. package/dist/component/_generated/component.d.ts +163 -0
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/constants.d.ts +5 -0
  18. package/dist/component/constants.d.ts.map +1 -1
  19. package/dist/component/constants.js +8 -0
  20. package/dist/component/constants.js.map +1 -1
  21. package/dist/component/ingest.d.ts.map +1 -1
  22. package/dist/component/ingest.js +7 -5
  23. package/dist/component/ingest.js.map +1 -1
  24. package/dist/component/leads.d.ts +190 -0
  25. package/dist/component/leads.d.ts.map +1 -0
  26. package/dist/component/leads.js +689 -0
  27. package/dist/component/leads.js.map +1 -0
  28. package/dist/component/reports.d.ts +3 -0
  29. package/dist/component/reports.d.ts.map +1 -1
  30. package/dist/component/reports.js +16 -5
  31. package/dist/component/reports.js.map +1 -1
  32. package/dist/component/sanitize.d.ts +3 -1
  33. package/dist/component/sanitize.d.ts.map +1 -1
  34. package/dist/component/sanitize.js +30 -1
  35. package/dist/component/sanitize.js.map +1 -1
  36. package/dist/component/schema.d.ts +122 -1
  37. package/dist/component/schema.js +39 -1
  38. package/dist/component/schema.js.map +1 -1
  39. package/dist/component/sites.d.ts +4 -0
  40. package/dist/component/sites.d.ts.map +1 -1
  41. package/dist/component/sites.js +13 -2
  42. package/dist/component/sites.js.map +1 -1
  43. package/dist/component/validators.d.ts +696 -1
  44. package/dist/component/validators.d.ts.map +1 -1
  45. package/dist/component/validators.js +130 -0
  46. package/dist/component/validators.js.map +1 -1
  47. package/dist/tracker/generated.d.ts +1 -1
  48. package/dist/tracker/generated.js +1 -1
  49. package/docs/federation-setup.md +29 -0
  50. package/docs/upgrading.md +57 -0
  51. package/llms.txt +2 -0
  52. package/package.json +1 -1
  53. package/src/component/_generated/api.ts +2 -0
  54. package/src/component/_generated/component.ts +186 -0
  55. package/src/component/constants.ts +8 -0
  56. package/src/component/ingest.ts +8 -3
  57. package/src/component/leads.ts +823 -0
  58. package/src/component/reports.ts +23 -5
  59. package/src/component/sanitize.ts +46 -1
  60. package/src/component/schema.ts +45 -0
  61. package/src/component/sites.ts +14 -1
  62. package/src/component/validators.ts +165 -0
  63. package/src/tracker/generated.ts +1 -1
@@ -178,6 +178,7 @@ export declare const siteFieldsValidator: import("convex/values").VObject<{
178
178
  name: string;
179
179
  networkId?: string | undefined;
180
180
  ownerId: string;
181
+ routePatterns?: string[] | undefined;
181
182
  timezone?: string | undefined;
182
183
  updatedAt: number;
183
184
  }, {
@@ -188,9 +189,10 @@ export declare const siteFieldsValidator: import("convex/values").VObject<{
188
189
  timezone: import("convex/values").VString<string | undefined, "optional">;
189
190
  currency: import("convex/values").VString<string | undefined, "optional">;
190
191
  cookieless: import("convex/values").VBoolean<boolean, "required">;
192
+ routePatterns: import("convex/values").VArray<string[] | undefined, import("convex/values").VString<string, "required">, "optional">;
191
193
  createdAt: import("convex/values").VFloat64<number, "required">;
192
194
  updatedAt: import("convex/values").VFloat64<number, "required">;
193
- }, "required", "cookieless" | "createdAt" | "currency" | "domains" | "name" | "networkId" | "ownerId" | "timezone" | "updatedAt">;
195
+ }, "required", "cookieless" | "createdAt" | "currency" | "domains" | "name" | "networkId" | "ownerId" | "routePatterns" | "timezone" | "updatedAt">;
194
196
  export declare const sessionFieldsValidator: import("convex/values").VObject<{
195
197
  affiliateAttributedAt?: number | undefined;
196
198
  affiliateExpiresAt?: number | undefined;
@@ -531,6 +533,110 @@ export declare const trackedLinkFieldsValidator: import("convex/values").VObject
531
533
  createdBy: import("convex/values").VString<string, "required">;
532
534
  disabledAt: import("convex/values").VFloat64<number | undefined, "optional">;
533
535
  }, "required", "campaign" | "channel" | "createdAt" | "createdBy" | "destination" | "disabledAt" | "platform" | "siteId" | "slug">;
536
+ /**
537
+ * Leads (0.8.0): a conversation the host's server reports, with no web session
538
+ * behind it. Today the channel is WhatsApp; the stage follows the host's
539
+ * pipeline as `lead` → `qualified` → `won`, or `lost`.
540
+ */
541
+ export declare const leadChannelValidator: import("convex/values").VLiteral<"whatsapp", "required">;
542
+ export declare const leadStageValidator: import("convex/values").VUnion<"lead" | "lost" | "qualified" | "won", [import("convex/values").VLiteral<"lead", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">], "required", never>;
543
+ /** What the host may move a lead to; `open` undoes a sale or a loss. */
544
+ export declare const leadStageChangeValidator: import("convex/values").VUnion<"lost" | "open" | "qualified" | "won", [import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">, import("convex/values").VLiteral<"open", "required">], "required", never>;
545
+ export declare const leadEventTypeValidator: import("convex/values").VUnion<"created" | "lost" | "open" | "qualified" | "won", [import("convex/values").VLiteral<"created", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">, import("convex/values").VLiteral<"open", "required">], "required", never>;
546
+ /** The Meta Click-to-WhatsApp ad a lead came from, as the message carried it. */
547
+ export declare const leadAdValidator: import("convex/values").VObject<{
548
+ adId?: string | undefined;
549
+ ctwaClid?: string | undefined;
550
+ sourceApp?: string | undefined;
551
+ sourceUrl?: string | undefined;
552
+ title?: string | undefined;
553
+ }, {
554
+ adId: import("convex/values").VString<string | undefined, "optional">;
555
+ sourceApp: import("convex/values").VString<string | undefined, "optional">;
556
+ sourceUrl: import("convex/values").VString<string | undefined, "optional">;
557
+ ctwaClid: import("convex/values").VString<string | undefined, "optional">;
558
+ title: import("convex/values").VString<string | undefined, "optional">;
559
+ }, "required", "adId" | "ctwaClid" | "sourceApp" | "sourceUrl" | "title">;
560
+ export declare const leadFieldsValidator: import("convex/values").VObject<{
561
+ ad?: {
562
+ adId?: string | undefined;
563
+ ctwaClid?: string | undefined;
564
+ sourceApp?: string | undefined;
565
+ sourceUrl?: string | undefined;
566
+ title?: string | undefined;
567
+ } | undefined;
568
+ channel: "whatsapp";
569
+ dayStart: number;
570
+ entryPoint?: string | undefined;
571
+ firstAt: number;
572
+ label?: string | undefined;
573
+ leadKey: string;
574
+ originKey: string;
575
+ qualifiedAt?: number | undefined;
576
+ revenueCents: number;
577
+ siteId: import("convex/values").GenericId<"sites">;
578
+ stage: "lead" | "lost" | "qualified" | "won";
579
+ stageAt: number;
580
+ updatedAt: number;
581
+ visitorId?: string | undefined;
582
+ wonAt?: number | undefined;
583
+ }, {
584
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
585
+ /** The host's opaque id for the lead (never a phone number). */
586
+ leadKey: import("convex/values").VString<string, "required">;
587
+ channel: import("convex/values").VLiteral<"whatsapp", "required">;
588
+ /** The channel's raw entry point, as the host received it. */
589
+ entryPoint: import("convex/values").VString<string | undefined, "optional">;
590
+ /** The bucket reports group by: `ctwa_ad` for any ad, else the entry point or `none`. */
591
+ originKey: import("convex/values").VString<string, "required">;
592
+ ad: import("convex/values").VObject<{
593
+ adId?: string | undefined;
594
+ ctwaClid?: string | undefined;
595
+ sourceApp?: string | undefined;
596
+ sourceUrl?: string | undefined;
597
+ title?: string | undefined;
598
+ } | undefined, {
599
+ adId: import("convex/values").VString<string | undefined, "optional">;
600
+ sourceApp: import("convex/values").VString<string | undefined, "optional">;
601
+ sourceUrl: import("convex/values").VString<string | undefined, "optional">;
602
+ ctwaClid: import("convex/values").VString<string | undefined, "optional">;
603
+ title: import("convex/values").VString<string | undefined, "optional">;
604
+ }, "optional", "adId" | "ctwaClid" | "sourceApp" | "sourceUrl" | "title">;
605
+ /** A short display name the host chooses to share, if any. */
606
+ label: import("convex/values").VString<string | undefined, "optional">;
607
+ /** The web visitor this lead came from, when a tracked link bridged them. */
608
+ visitorId: import("convex/values").VString<string | undefined, "optional">;
609
+ stage: import("convex/values").VUnion<"lead" | "lost" | "qualified" | "won", [import("convex/values").VLiteral<"lead", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">], "required", never>;
610
+ revenueCents: import("convex/values").VFloat64<number, "required">;
611
+ firstAt: import("convex/values").VFloat64<number, "required">;
612
+ /** UTC day of `firstAt`: the cohort every later stage is counted in. */
613
+ dayStart: import("convex/values").VFloat64<number, "required">;
614
+ stageAt: import("convex/values").VFloat64<number, "required">;
615
+ qualifiedAt: import("convex/values").VFloat64<number | undefined, "optional">;
616
+ wonAt: import("convex/values").VFloat64<number | undefined, "optional">;
617
+ updatedAt: import("convex/values").VFloat64<number, "required">;
618
+ }, "required", "ad" | "ad.adId" | "ad.ctwaClid" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "channel" | "dayStart" | "entryPoint" | "firstAt" | "label" | "leadKey" | "originKey" | "qualifiedAt" | "revenueCents" | "siteId" | "stage" | "stageAt" | "updatedAt" | "visitorId" | "wonAt">;
619
+ export declare const adCatalogFieldsValidator: import("convex/values").VObject<{
620
+ adId: string;
621
+ adName?: string | undefined;
622
+ adsetId?: string | undefined;
623
+ adsetName?: string | undefined;
624
+ campaignId?: string | undefined;
625
+ campaignName?: string | undefined;
626
+ siteId: import("convex/values").GenericId<"sites">;
627
+ thumbnailUrl?: string | undefined;
628
+ updatedAt: number;
629
+ }, {
630
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
631
+ adId: import("convex/values").VString<string, "required">;
632
+ adName: import("convex/values").VString<string | undefined, "optional">;
633
+ adsetId: import("convex/values").VString<string | undefined, "optional">;
634
+ adsetName: import("convex/values").VString<string | undefined, "optional">;
635
+ campaignId: import("convex/values").VString<string | undefined, "optional">;
636
+ campaignName: import("convex/values").VString<string | undefined, "optional">;
637
+ thumbnailUrl: import("convex/values").VString<string | undefined, "optional">;
638
+ updatedAt: import("convex/values").VFloat64<number, "required">;
639
+ }, "required", "adId" | "adName" | "adsetId" | "adsetName" | "campaignId" | "campaignName" | "siteId" | "thumbnailUrl" | "updatedAt">;
534
640
  export declare const ingestResultValidator: import("convex/values").VObject<{
535
641
  accepted: number;
536
642
  duplicates: number;
@@ -570,4 +676,593 @@ export type FunnelStep = Infer<typeof funnelStepValidator>;
570
676
  export type EventType = Infer<typeof eventTypeValidator>;
571
677
  export type Channel = Infer<typeof channelValidator>;
572
678
  export type Evidence = Infer<typeof evidenceValidator>;
679
+ export declare const leadAdRowValidator: import("convex/values").VObject<{
680
+ adId: string;
681
+ adName: string | null;
682
+ leads: number;
683
+ qualified: number;
684
+ revenueCents: number;
685
+ sourceApp: string | null;
686
+ sourceUrl: string | null;
687
+ thumbnailUrl: string | null;
688
+ title: string | null;
689
+ won: number;
690
+ }, {
691
+ leads: import("convex/values").VFloat64<number, "required">;
692
+ qualified: import("convex/values").VFloat64<number, "required">;
693
+ won: import("convex/values").VFloat64<number, "required">;
694
+ revenueCents: import("convex/values").VFloat64<number, "required">;
695
+ adId: import("convex/values").VString<string, "required">;
696
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
697
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
698
+ sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
699
+ title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
700
+ thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
701
+ }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">;
702
+ export declare const leadAdsetRowValidator: import("convex/values").VObject<{
703
+ ads: {
704
+ adId: string;
705
+ adName: string | null;
706
+ leads: number;
707
+ qualified: number;
708
+ revenueCents: number;
709
+ sourceApp: string | null;
710
+ sourceUrl: string | null;
711
+ thumbnailUrl: string | null;
712
+ title: string | null;
713
+ won: number;
714
+ }[];
715
+ adsetId: string | null;
716
+ adsetName: string | null;
717
+ leads: number;
718
+ qualified: number;
719
+ revenueCents: number;
720
+ won: number;
721
+ }, {
722
+ leads: import("convex/values").VFloat64<number, "required">;
723
+ qualified: import("convex/values").VFloat64<number, "required">;
724
+ won: import("convex/values").VFloat64<number, "required">;
725
+ revenueCents: import("convex/values").VFloat64<number, "required">;
726
+ adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
727
+ adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
728
+ ads: import("convex/values").VArray<{
729
+ adId: string;
730
+ adName: string | null;
731
+ leads: number;
732
+ qualified: number;
733
+ revenueCents: number;
734
+ sourceApp: string | null;
735
+ sourceUrl: string | null;
736
+ thumbnailUrl: string | null;
737
+ title: string | null;
738
+ won: number;
739
+ }[], import("convex/values").VObject<{
740
+ adId: string;
741
+ adName: string | null;
742
+ leads: number;
743
+ qualified: number;
744
+ revenueCents: number;
745
+ sourceApp: string | null;
746
+ sourceUrl: string | null;
747
+ thumbnailUrl: string | null;
748
+ title: string | null;
749
+ won: number;
750
+ }, {
751
+ leads: import("convex/values").VFloat64<number, "required">;
752
+ qualified: import("convex/values").VFloat64<number, "required">;
753
+ won: import("convex/values").VFloat64<number, "required">;
754
+ revenueCents: import("convex/values").VFloat64<number, "required">;
755
+ adId: import("convex/values").VString<string, "required">;
756
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
757
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
758
+ sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
759
+ title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
760
+ thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
761
+ }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
762
+ }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">;
763
+ export declare const leadCampaignRowValidator: import("convex/values").VObject<{
764
+ adsets: {
765
+ ads: {
766
+ adId: string;
767
+ adName: string | null;
768
+ leads: number;
769
+ qualified: number;
770
+ revenueCents: number;
771
+ sourceApp: string | null;
772
+ sourceUrl: string | null;
773
+ thumbnailUrl: string | null;
774
+ title: string | null;
775
+ won: number;
776
+ }[];
777
+ adsetId: string | null;
778
+ adsetName: string | null;
779
+ leads: number;
780
+ qualified: number;
781
+ revenueCents: number;
782
+ won: number;
783
+ }[];
784
+ campaignId: string | null;
785
+ campaignName: string | null;
786
+ leads: number;
787
+ qualified: number;
788
+ revenueCents: number;
789
+ won: number;
790
+ }, {
791
+ leads: import("convex/values").VFloat64<number, "required">;
792
+ qualified: import("convex/values").VFloat64<number, "required">;
793
+ won: import("convex/values").VFloat64<number, "required">;
794
+ revenueCents: import("convex/values").VFloat64<number, "required">;
795
+ campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
796
+ campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
797
+ adsets: import("convex/values").VArray<{
798
+ ads: {
799
+ adId: string;
800
+ adName: string | null;
801
+ leads: number;
802
+ qualified: number;
803
+ revenueCents: number;
804
+ sourceApp: string | null;
805
+ sourceUrl: string | null;
806
+ thumbnailUrl: string | null;
807
+ title: string | null;
808
+ won: number;
809
+ }[];
810
+ adsetId: string | null;
811
+ adsetName: string | null;
812
+ leads: number;
813
+ qualified: number;
814
+ revenueCents: number;
815
+ won: number;
816
+ }[], import("convex/values").VObject<{
817
+ ads: {
818
+ adId: string;
819
+ adName: string | null;
820
+ leads: number;
821
+ qualified: number;
822
+ revenueCents: number;
823
+ sourceApp: string | null;
824
+ sourceUrl: string | null;
825
+ thumbnailUrl: string | null;
826
+ title: string | null;
827
+ won: number;
828
+ }[];
829
+ adsetId: string | null;
830
+ adsetName: string | null;
831
+ leads: number;
832
+ qualified: number;
833
+ revenueCents: number;
834
+ won: number;
835
+ }, {
836
+ leads: import("convex/values").VFloat64<number, "required">;
837
+ qualified: import("convex/values").VFloat64<number, "required">;
838
+ won: import("convex/values").VFloat64<number, "required">;
839
+ revenueCents: import("convex/values").VFloat64<number, "required">;
840
+ adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
841
+ adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
842
+ ads: import("convex/values").VArray<{
843
+ adId: string;
844
+ adName: string | null;
845
+ leads: number;
846
+ qualified: number;
847
+ revenueCents: number;
848
+ sourceApp: string | null;
849
+ sourceUrl: string | null;
850
+ thumbnailUrl: string | null;
851
+ title: string | null;
852
+ won: number;
853
+ }[], import("convex/values").VObject<{
854
+ adId: string;
855
+ adName: string | null;
856
+ leads: number;
857
+ qualified: number;
858
+ revenueCents: number;
859
+ sourceApp: string | null;
860
+ sourceUrl: string | null;
861
+ thumbnailUrl: string | null;
862
+ title: string | null;
863
+ won: number;
864
+ }, {
865
+ leads: import("convex/values").VFloat64<number, "required">;
866
+ qualified: import("convex/values").VFloat64<number, "required">;
867
+ won: import("convex/values").VFloat64<number, "required">;
868
+ revenueCents: import("convex/values").VFloat64<number, "required">;
869
+ adId: import("convex/values").VString<string, "required">;
870
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
871
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
872
+ sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
873
+ title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
874
+ thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
875
+ }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
876
+ }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
877
+ }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">;
878
+ export declare const leadsReportValidator: import("convex/values").VObject<{
879
+ campaigns: {
880
+ adsets: {
881
+ ads: {
882
+ adId: string;
883
+ adName: string | null;
884
+ leads: number;
885
+ qualified: number;
886
+ revenueCents: number;
887
+ sourceApp: string | null;
888
+ sourceUrl: string | null;
889
+ thumbnailUrl: string | null;
890
+ title: string | null;
891
+ won: number;
892
+ }[];
893
+ adsetId: string | null;
894
+ adsetName: string | null;
895
+ leads: number;
896
+ qualified: number;
897
+ revenueCents: number;
898
+ won: number;
899
+ }[];
900
+ campaignId: string | null;
901
+ campaignName: string | null;
902
+ leads: number;
903
+ qualified: number;
904
+ revenueCents: number;
905
+ won: number;
906
+ }[];
907
+ currency: string | null;
908
+ from: number;
909
+ origins: {
910
+ key: string;
911
+ leads: number;
912
+ qualified: number;
913
+ revenueCents: number;
914
+ won: number;
915
+ }[];
916
+ to: number;
917
+ totals: {
918
+ leads: number;
919
+ qualified: number;
920
+ revenueCents: number;
921
+ won: number;
922
+ };
923
+ }, {
924
+ from: import("convex/values").VFloat64<number, "required">;
925
+ to: import("convex/values").VFloat64<number, "required">;
926
+ /** The sites' currency, or null when they differ (revenue then mixes). */
927
+ currency: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
928
+ totals: import("convex/values").VObject<{
929
+ leads: number;
930
+ qualified: number;
931
+ revenueCents: number;
932
+ won: number;
933
+ }, {
934
+ leads: import("convex/values").VFloat64<number, "required">;
935
+ qualified: import("convex/values").VFloat64<number, "required">;
936
+ won: import("convex/values").VFloat64<number, "required">;
937
+ revenueCents: import("convex/values").VFloat64<number, "required">;
938
+ }, "required", "leads" | "qualified" | "revenueCents" | "won">;
939
+ origins: import("convex/values").VArray<{
940
+ key: string;
941
+ leads: number;
942
+ qualified: number;
943
+ revenueCents: number;
944
+ won: number;
945
+ }[], import("convex/values").VObject<{
946
+ key: string;
947
+ leads: number;
948
+ qualified: number;
949
+ revenueCents: number;
950
+ won: number;
951
+ }, {
952
+ leads: import("convex/values").VFloat64<number, "required">;
953
+ qualified: import("convex/values").VFloat64<number, "required">;
954
+ won: import("convex/values").VFloat64<number, "required">;
955
+ revenueCents: import("convex/values").VFloat64<number, "required">;
956
+ key: import("convex/values").VString<string, "required">;
957
+ }, "required", "key" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
958
+ /**
959
+ * Campaign → ad set → ad, with ads the catalog does not name yet grouped
960
+ * under a null campaign and a null ad set.
961
+ */
962
+ campaigns: import("convex/values").VArray<{
963
+ adsets: {
964
+ ads: {
965
+ adId: string;
966
+ adName: string | null;
967
+ leads: number;
968
+ qualified: number;
969
+ revenueCents: number;
970
+ sourceApp: string | null;
971
+ sourceUrl: string | null;
972
+ thumbnailUrl: string | null;
973
+ title: string | null;
974
+ won: number;
975
+ }[];
976
+ adsetId: string | null;
977
+ adsetName: string | null;
978
+ leads: number;
979
+ qualified: number;
980
+ revenueCents: number;
981
+ won: number;
982
+ }[];
983
+ campaignId: string | null;
984
+ campaignName: string | null;
985
+ leads: number;
986
+ qualified: number;
987
+ revenueCents: number;
988
+ won: number;
989
+ }[], import("convex/values").VObject<{
990
+ adsets: {
991
+ ads: {
992
+ adId: string;
993
+ adName: string | null;
994
+ leads: number;
995
+ qualified: number;
996
+ revenueCents: number;
997
+ sourceApp: string | null;
998
+ sourceUrl: string | null;
999
+ thumbnailUrl: string | null;
1000
+ title: string | null;
1001
+ won: number;
1002
+ }[];
1003
+ adsetId: string | null;
1004
+ adsetName: string | null;
1005
+ leads: number;
1006
+ qualified: number;
1007
+ revenueCents: number;
1008
+ won: number;
1009
+ }[];
1010
+ campaignId: string | null;
1011
+ campaignName: string | null;
1012
+ leads: number;
1013
+ qualified: number;
1014
+ revenueCents: number;
1015
+ won: number;
1016
+ }, {
1017
+ leads: import("convex/values").VFloat64<number, "required">;
1018
+ qualified: import("convex/values").VFloat64<number, "required">;
1019
+ won: import("convex/values").VFloat64<number, "required">;
1020
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1021
+ campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1022
+ campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1023
+ adsets: import("convex/values").VArray<{
1024
+ ads: {
1025
+ adId: string;
1026
+ adName: string | null;
1027
+ leads: number;
1028
+ qualified: number;
1029
+ revenueCents: number;
1030
+ sourceApp: string | null;
1031
+ sourceUrl: string | null;
1032
+ thumbnailUrl: string | null;
1033
+ title: string | null;
1034
+ won: number;
1035
+ }[];
1036
+ adsetId: string | null;
1037
+ adsetName: string | null;
1038
+ leads: number;
1039
+ qualified: number;
1040
+ revenueCents: number;
1041
+ won: number;
1042
+ }[], import("convex/values").VObject<{
1043
+ ads: {
1044
+ adId: string;
1045
+ adName: string | null;
1046
+ leads: number;
1047
+ qualified: number;
1048
+ revenueCents: number;
1049
+ sourceApp: string | null;
1050
+ sourceUrl: string | null;
1051
+ thumbnailUrl: string | null;
1052
+ title: string | null;
1053
+ won: number;
1054
+ }[];
1055
+ adsetId: string | null;
1056
+ adsetName: string | null;
1057
+ leads: number;
1058
+ qualified: number;
1059
+ revenueCents: number;
1060
+ won: number;
1061
+ }, {
1062
+ leads: import("convex/values").VFloat64<number, "required">;
1063
+ qualified: import("convex/values").VFloat64<number, "required">;
1064
+ won: import("convex/values").VFloat64<number, "required">;
1065
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1066
+ adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1067
+ adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1068
+ ads: import("convex/values").VArray<{
1069
+ adId: string;
1070
+ adName: string | null;
1071
+ leads: number;
1072
+ qualified: number;
1073
+ revenueCents: number;
1074
+ sourceApp: string | null;
1075
+ sourceUrl: string | null;
1076
+ thumbnailUrl: string | null;
1077
+ title: string | null;
1078
+ won: number;
1079
+ }[], import("convex/values").VObject<{
1080
+ adId: string;
1081
+ adName: string | null;
1082
+ leads: number;
1083
+ qualified: number;
1084
+ revenueCents: number;
1085
+ sourceApp: string | null;
1086
+ sourceUrl: string | null;
1087
+ thumbnailUrl: string | null;
1088
+ title: string | null;
1089
+ won: number;
1090
+ }, {
1091
+ leads: import("convex/values").VFloat64<number, "required">;
1092
+ qualified: import("convex/values").VFloat64<number, "required">;
1093
+ won: import("convex/values").VFloat64<number, "required">;
1094
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1095
+ adId: import("convex/values").VString<string, "required">;
1096
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1097
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1098
+ sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1099
+ title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1100
+ thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1101
+ }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
1102
+ }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1103
+ }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1104
+ }, "required", "campaigns" | "currency" | "from" | "origins" | "to" | "totals" | "totals.leads" | "totals.qualified" | "totals.revenueCents" | "totals.won">;
1105
+ export declare const leadSummaryValidator: import("convex/values").VObject<{
1106
+ adId: string | null;
1107
+ channel: "whatsapp";
1108
+ entryPoint: string | null;
1109
+ firstAt: number;
1110
+ hasVisitor: boolean;
1111
+ label: string | null;
1112
+ leadId: string;
1113
+ originKey: string;
1114
+ revenueCents: number;
1115
+ siteId: string;
1116
+ sourceApp: string | null;
1117
+ stage: "lead" | "lost" | "qualified" | "won";
1118
+ stageAt: number;
1119
+ }, {
1120
+ leadId: import("convex/values").VString<string, "required">;
1121
+ siteId: import("convex/values").VString<string, "required">;
1122
+ label: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1123
+ channel: import("convex/values").VLiteral<"whatsapp", "required">;
1124
+ originKey: import("convex/values").VString<string, "required">;
1125
+ entryPoint: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1126
+ adId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1127
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1128
+ stage: import("convex/values").VUnion<"lead" | "lost" | "qualified" | "won", [import("convex/values").VLiteral<"lead", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">], "required", never>;
1129
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1130
+ firstAt: import("convex/values").VFloat64<number, "required">;
1131
+ stageAt: import("convex/values").VFloat64<number, "required">;
1132
+ /** Whether a web journey is linked, through a tracked link. */
1133
+ hasVisitor: import("convex/values").VBoolean<boolean, "required">;
1134
+ }, "required", "adId" | "channel" | "entryPoint" | "firstAt" | "hasVisitor" | "label" | "leadId" | "originKey" | "revenueCents" | "siteId" | "sourceApp" | "stage" | "stageAt">;
1135
+ export declare const leadJourneyValidator: import("convex/values").VUnion<{
1136
+ ad: {
1137
+ adId: string | null;
1138
+ adName: string | null;
1139
+ adsetName: string | null;
1140
+ campaignName: string | null;
1141
+ sourceApp: string | null;
1142
+ sourceUrl: string | null;
1143
+ title: string | null;
1144
+ } | null;
1145
+ events: {
1146
+ at: number;
1147
+ revenueCents: number | null;
1148
+ type: "created" | "lost" | "open" | "qualified" | "won";
1149
+ }[];
1150
+ lead: {
1151
+ adId: string | null;
1152
+ channel: "whatsapp";
1153
+ entryPoint: string | null;
1154
+ firstAt: number;
1155
+ hasVisitor: boolean;
1156
+ label: string | null;
1157
+ leadId: string;
1158
+ originKey: string;
1159
+ revenueCents: number;
1160
+ siteId: string;
1161
+ sourceApp: string | null;
1162
+ stage: "lead" | "lost" | "qualified" | "won";
1163
+ stageAt: number;
1164
+ };
1165
+ visitorId: string | null;
1166
+ } | null, [import("convex/values").VNull<null, "required">, import("convex/values").VObject<{
1167
+ ad: {
1168
+ adId: string | null;
1169
+ adName: string | null;
1170
+ adsetName: string | null;
1171
+ campaignName: string | null;
1172
+ sourceApp: string | null;
1173
+ sourceUrl: string | null;
1174
+ title: string | null;
1175
+ } | null;
1176
+ events: {
1177
+ at: number;
1178
+ revenueCents: number | null;
1179
+ type: "created" | "lost" | "open" | "qualified" | "won";
1180
+ }[];
1181
+ lead: {
1182
+ adId: string | null;
1183
+ channel: "whatsapp";
1184
+ entryPoint: string | null;
1185
+ firstAt: number;
1186
+ hasVisitor: boolean;
1187
+ label: string | null;
1188
+ leadId: string;
1189
+ originKey: string;
1190
+ revenueCents: number;
1191
+ siteId: string;
1192
+ sourceApp: string | null;
1193
+ stage: "lead" | "lost" | "qualified" | "won";
1194
+ stageAt: number;
1195
+ };
1196
+ visitorId: string | null;
1197
+ }, {
1198
+ lead: import("convex/values").VObject<{
1199
+ adId: string | null;
1200
+ channel: "whatsapp";
1201
+ entryPoint: string | null;
1202
+ firstAt: number;
1203
+ hasVisitor: boolean;
1204
+ label: string | null;
1205
+ leadId: string;
1206
+ originKey: string;
1207
+ revenueCents: number;
1208
+ siteId: string;
1209
+ sourceApp: string | null;
1210
+ stage: "lead" | "lost" | "qualified" | "won";
1211
+ stageAt: number;
1212
+ }, {
1213
+ leadId: import("convex/values").VString<string, "required">;
1214
+ siteId: import("convex/values").VString<string, "required">;
1215
+ label: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1216
+ channel: import("convex/values").VLiteral<"whatsapp", "required">;
1217
+ originKey: import("convex/values").VString<string, "required">;
1218
+ entryPoint: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1219
+ adId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1220
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1221
+ stage: import("convex/values").VUnion<"lead" | "lost" | "qualified" | "won", [import("convex/values").VLiteral<"lead", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">], "required", never>;
1222
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1223
+ firstAt: import("convex/values").VFloat64<number, "required">;
1224
+ stageAt: import("convex/values").VFloat64<number, "required">;
1225
+ /** Whether a web journey is linked, through a tracked link. */
1226
+ hasVisitor: import("convex/values").VBoolean<boolean, "required">;
1227
+ }, "required", "adId" | "channel" | "entryPoint" | "firstAt" | "hasVisitor" | "label" | "leadId" | "originKey" | "revenueCents" | "siteId" | "sourceApp" | "stage" | "stageAt">;
1228
+ ad: import("convex/values").VUnion<{
1229
+ adId: string | null;
1230
+ adName: string | null;
1231
+ adsetName: string | null;
1232
+ campaignName: string | null;
1233
+ sourceApp: string | null;
1234
+ sourceUrl: string | null;
1235
+ title: string | null;
1236
+ } | null, [import("convex/values").VNull<null, "required">, import("convex/values").VObject<{
1237
+ adId: string | null;
1238
+ adName: string | null;
1239
+ adsetName: string | null;
1240
+ campaignName: string | null;
1241
+ sourceApp: string | null;
1242
+ sourceUrl: string | null;
1243
+ title: string | null;
1244
+ }, {
1245
+ adId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1246
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1247
+ adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1248
+ campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1249
+ sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1250
+ sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1251
+ title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1252
+ }, "required", "adId" | "adName" | "adsetName" | "campaignName" | "sourceApp" | "sourceUrl" | "title">], "required", "adId" | "adName" | "adsetName" | "campaignName" | "sourceApp" | "sourceUrl" | "title">;
1253
+ visitorId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1254
+ events: import("convex/values").VArray<{
1255
+ at: number;
1256
+ revenueCents: number | null;
1257
+ type: "created" | "lost" | "open" | "qualified" | "won";
1258
+ }[], import("convex/values").VObject<{
1259
+ at: number;
1260
+ revenueCents: number | null;
1261
+ type: "created" | "lost" | "open" | "qualified" | "won";
1262
+ }, {
1263
+ type: import("convex/values").VUnion<"created" | "lost" | "open" | "qualified" | "won", [import("convex/values").VLiteral<"created", "required">, import("convex/values").VLiteral<"qualified", "required">, import("convex/values").VLiteral<"won", "required">, import("convex/values").VLiteral<"lost", "required">, import("convex/values").VLiteral<"open", "required">], "required", never>;
1264
+ at: import("convex/values").VFloat64<number, "required">;
1265
+ revenueCents: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1266
+ }, "required", "at" | "revenueCents" | "type">, "required">;
1267
+ }, "required", "ad" | "ad.adId" | "ad.adName" | "ad.adsetName" | "ad.campaignName" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "events" | "lead" | "lead.adId" | "lead.channel" | "lead.entryPoint" | "lead.firstAt" | "lead.hasVisitor" | "lead.label" | "lead.leadId" | "lead.originKey" | "lead.revenueCents" | "lead.siteId" | "lead.sourceApp" | "lead.stage" | "lead.stageAt" | "visitorId">], "required", "ad" | "ad.adId" | "ad.adName" | "ad.adsetName" | "ad.campaignName" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "events" | "lead" | "lead.adId" | "lead.channel" | "lead.entryPoint" | "lead.firstAt" | "lead.hasVisitor" | "lead.label" | "lead.leadId" | "lead.originKey" | "lead.revenueCents" | "lead.siteId" | "lead.sourceApp" | "lead.stage" | "lead.stageAt" | "visitorId">;
573
1268
  //# sourceMappingURL=validators.d.ts.map