@iann29/rastro 0.9.0 → 0.10.1

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 (265) hide show
  1. package/README.md +9 -1
  2. package/agent/integration.md +23 -1
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +114 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +54 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +642 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +391 -9
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +14 -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 +278 -1
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/_generated/server.d.ts +4 -0
  18. package/dist/component/_generated/server.d.ts.map +1 -1
  19. package/dist/component/_generated/server.js.map +1 -1
  20. package/dist/component/constants.d.ts +5 -0
  21. package/dist/component/constants.d.ts.map +1 -1
  22. package/dist/component/constants.js +10 -0
  23. package/dist/component/constants.js.map +1 -1
  24. package/dist/component/convex.config.d.ts +4 -0
  25. package/dist/component/convex.config.js +9 -0
  26. package/dist/component/convex.config.js.map +1 -1
  27. package/dist/component/errors.d.ts +1 -1
  28. package/dist/component/errors.d.ts.map +1 -1
  29. package/dist/component/errors.js.map +1 -1
  30. package/dist/component/leads.d.ts +69 -3
  31. package/dist/component/leads.d.ts.map +1 -1
  32. package/dist/component/leads.js +419 -16
  33. package/dist/component/leads.js.map +1 -1
  34. package/dist/component/meta.d.ts +358 -0
  35. package/dist/component/meta.d.ts.map +1 -0
  36. package/dist/component/meta.js +1295 -0
  37. package/dist/component/meta.js.map +1 -0
  38. package/dist/component/metaCapi.d.ts +162 -0
  39. package/dist/component/metaCapi.d.ts.map +1 -0
  40. package/dist/component/metaCapi.js +754 -0
  41. package/dist/component/metaCapi.js.map +1 -0
  42. package/dist/component/metaFake.d.ts +5 -0
  43. package/dist/component/metaFake.d.ts.map +1 -0
  44. package/dist/component/metaFake.js +225 -0
  45. package/dist/component/metaFake.js.map +1 -0
  46. package/dist/component/metaGraph.d.ts +165 -0
  47. package/dist/component/metaGraph.d.ts.map +1 -0
  48. package/dist/component/metaGraph.js +507 -0
  49. package/dist/component/metaGraph.js.map +1 -0
  50. package/dist/component/metaSync.d.ts +186 -0
  51. package/dist/component/metaSync.d.ts.map +1 -0
  52. package/dist/component/metaSync.js +961 -0
  53. package/dist/component/metaSync.js.map +1 -0
  54. package/dist/component/pipeline.d.ts +99 -0
  55. package/dist/component/pipeline.d.ts.map +1 -0
  56. package/dist/component/pipeline.js +337 -0
  57. package/dist/component/pipeline.js.map +1 -0
  58. package/dist/component/schema.d.ts +404 -2
  59. package/dist/component/schema.d.ts.map +1 -1
  60. package/dist/component/schema.js +168 -2
  61. package/dist/component/schema.js.map +1 -1
  62. package/dist/component/secrets.d.ts +15 -0
  63. package/dist/component/secrets.d.ts.map +1 -0
  64. package/dist/component/secrets.js +67 -0
  65. package/dist/component/secrets.js.map +1 -0
  66. package/dist/component/validators.d.ts +1052 -15
  67. package/dist/component/validators.d.ts.map +1 -1
  68. package/dist/component/validators.js +307 -3
  69. package/dist/component/validators.js.map +1 -1
  70. package/dist/tracker/generated.d.ts +1 -1
  71. package/dist/tracker/generated.d.ts.map +1 -1
  72. package/dist/tracker/generated.js +1 -1
  73. package/dist/tracker/generated.js.map +1 -1
  74. package/dist/ui/campaigns/CampaignsView.d.ts +48 -0
  75. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -0
  76. package/dist/ui/campaigns/CampaignsView.js +47 -0
  77. package/dist/ui/campaigns/CampaignsView.js.map +1 -0
  78. package/dist/ui/campaigns/Conversions.d.ts +16 -0
  79. package/dist/ui/campaigns/Conversions.d.ts.map +1 -0
  80. package/dist/ui/campaigns/Conversions.js +40 -0
  81. package/dist/ui/campaigns/Conversions.js.map +1 -0
  82. package/dist/ui/campaigns/Drawer.d.ts +24 -0
  83. package/dist/ui/campaigns/Drawer.d.ts.map +1 -0
  84. package/dist/ui/campaigns/Drawer.js +120 -0
  85. package/dist/ui/campaigns/Drawer.js.map +1 -0
  86. package/dist/ui/campaigns/Icons.d.ts +35 -0
  87. package/dist/ui/campaigns/Icons.d.ts.map +1 -0
  88. package/dist/ui/campaigns/Icons.js +41 -0
  89. package/dist/ui/campaigns/Icons.js.map +1 -0
  90. package/dist/ui/campaigns/Summary.d.ts +21 -0
  91. package/dist/ui/campaigns/Summary.d.ts.map +1 -0
  92. package/dist/ui/campaigns/Summary.js +56 -0
  93. package/dist/ui/campaigns/Summary.js.map +1 -0
  94. package/dist/ui/campaigns/Thumbnail.d.ts +11 -0
  95. package/dist/ui/campaigns/Thumbnail.d.ts.map +1 -0
  96. package/dist/ui/campaigns/Thumbnail.js +23 -0
  97. package/dist/ui/campaigns/Thumbnail.js.map +1 -0
  98. package/dist/ui/campaigns/Tree.d.ts +12 -0
  99. package/dist/ui/campaigns/Tree.d.ts.map +1 -0
  100. package/dist/ui/campaigns/Tree.js +105 -0
  101. package/dist/ui/campaigns/Tree.js.map +1 -0
  102. package/dist/ui/campaigns/glyphs.d.ts +20 -0
  103. package/dist/ui/campaigns/glyphs.d.ts.map +1 -0
  104. package/dist/ui/campaigns/glyphs.js +19 -0
  105. package/dist/ui/campaigns/glyphs.js.map +1 -0
  106. package/dist/ui/campaigns/index.d.ts +4 -0
  107. package/dist/ui/campaigns/index.d.ts.map +1 -0
  108. package/dist/ui/campaigns/index.js +3 -0
  109. package/dist/ui/campaigns/index.js.map +1 -0
  110. package/dist/ui/campaigns/labels.d.ts +53 -0
  111. package/dist/ui/campaigns/labels.d.ts.map +1 -0
  112. package/dist/ui/campaigns/labels.js +169 -0
  113. package/dist/ui/campaigns/labels.js.map +1 -0
  114. package/dist/ui/campaigns/model.d.ts +99 -0
  115. package/dist/ui/campaigns/model.d.ts.map +1 -0
  116. package/dist/ui/campaigns/model.js +230 -0
  117. package/dist/ui/campaigns/model.js.map +1 -0
  118. package/dist/ui/campaigns/modes.d.ts +18 -0
  119. package/dist/ui/campaigns/modes.d.ts.map +1 -0
  120. package/dist/ui/campaigns/modes.js +7 -0
  121. package/dist/ui/campaigns/modes.js.map +1 -0
  122. package/dist/ui/index.d.ts +21 -0
  123. package/dist/ui/index.d.ts.map +1 -0
  124. package/dist/ui/index.js +20 -0
  125. package/dist/ui/index.js.map +1 -0
  126. package/dist/ui/integrations/AccountPicker.d.ts +26 -0
  127. package/dist/ui/integrations/AccountPicker.d.ts.map +1 -0
  128. package/dist/ui/integrations/AccountPicker.js +101 -0
  129. package/dist/ui/integrations/AccountPicker.js.map +1 -0
  130. package/dist/ui/integrations/ClientCards.d.ts +17 -0
  131. package/dist/ui/integrations/ClientCards.d.ts.map +1 -0
  132. package/dist/ui/integrations/ClientCards.js +42 -0
  133. package/dist/ui/integrations/ClientCards.js.map +1 -0
  134. package/dist/ui/integrations/ClientsTable.d.ts +36 -0
  135. package/dist/ui/integrations/ClientsTable.d.ts.map +1 -0
  136. package/dist/ui/integrations/ClientsTable.js +143 -0
  137. package/dist/ui/integrations/ClientsTable.js.map +1 -0
  138. package/dist/ui/integrations/Connect.d.ts +35 -0
  139. package/dist/ui/integrations/Connect.d.ts.map +1 -0
  140. package/dist/ui/integrations/Connect.js +62 -0
  141. package/dist/ui/integrations/Connect.js.map +1 -0
  142. package/dist/ui/integrations/Connection.d.ts +37 -0
  143. package/dist/ui/integrations/Connection.d.ts.map +1 -0
  144. package/dist/ui/integrations/Connection.js +108 -0
  145. package/dist/ui/integrations/Connection.js.map +1 -0
  146. package/dist/ui/integrations/Dialogs.d.ts +21 -0
  147. package/dist/ui/integrations/Dialogs.d.ts.map +1 -0
  148. package/dist/ui/integrations/Dialogs.js +34 -0
  149. package/dist/ui/integrations/Dialogs.js.map +1 -0
  150. package/dist/ui/integrations/EventsFeed.d.ts +15 -0
  151. package/dist/ui/integrations/EventsFeed.d.ts.map +1 -0
  152. package/dist/ui/integrations/EventsFeed.js +61 -0
  153. package/dist/ui/integrations/EventsFeed.js.map +1 -0
  154. package/dist/ui/integrations/EventsSheet.d.ts +34 -0
  155. package/dist/ui/integrations/EventsSheet.d.ts.map +1 -0
  156. package/dist/ui/integrations/EventsSheet.js +136 -0
  157. package/dist/ui/integrations/EventsSheet.js.map +1 -0
  158. package/dist/ui/integrations/Icons.d.ts +38 -0
  159. package/dist/ui/integrations/Icons.d.ts.map +1 -0
  160. package/dist/ui/integrations/Icons.js +40 -0
  161. package/dist/ui/integrations/Icons.js.map +1 -0
  162. package/dist/ui/integrations/IntegrationsView.d.ts +15 -0
  163. package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -0
  164. package/dist/ui/integrations/IntegrationsView.js +141 -0
  165. package/dist/ui/integrations/IntegrationsView.js.map +1 -0
  166. package/dist/ui/integrations/Overlay.d.ts +18 -0
  167. package/dist/ui/integrations/Overlay.d.ts.map +1 -0
  168. package/dist/ui/integrations/Overlay.js +36 -0
  169. package/dist/ui/integrations/Overlay.js.map +1 -0
  170. package/dist/ui/integrations/Partner.d.ts +14 -0
  171. package/dist/ui/integrations/Partner.d.ts.map +1 -0
  172. package/dist/ui/integrations/Partner.js +38 -0
  173. package/dist/ui/integrations/Partner.js.map +1 -0
  174. package/dist/ui/integrations/RowMenu.d.ts +15 -0
  175. package/dist/ui/integrations/RowMenu.d.ts.map +1 -0
  176. package/dist/ui/integrations/RowMenu.js +47 -0
  177. package/dist/ui/integrations/RowMenu.js.map +1 -0
  178. package/dist/ui/integrations/UnlinkDialog.d.ts +18 -0
  179. package/dist/ui/integrations/UnlinkDialog.d.ts.map +1 -0
  180. package/dist/ui/integrations/UnlinkDialog.js +29 -0
  181. package/dist/ui/integrations/UnlinkDialog.js.map +1 -0
  182. package/dist/ui/integrations/audience.d.ts +12 -0
  183. package/dist/ui/integrations/audience.d.ts.map +1 -0
  184. package/dist/ui/integrations/audience.js +12 -0
  185. package/dist/ui/integrations/audience.js.map +1 -0
  186. package/dist/ui/integrations/format.d.ts +28 -0
  187. package/dist/ui/integrations/format.d.ts.map +1 -0
  188. package/dist/ui/integrations/format.js +101 -0
  189. package/dist/ui/integrations/format.js.map +1 -0
  190. package/dist/ui/integrations/index.d.ts +5 -0
  191. package/dist/ui/integrations/index.d.ts.map +1 -0
  192. package/dist/ui/integrations/index.js +3 -0
  193. package/dist/ui/integrations/index.js.map +1 -0
  194. package/dist/ui/integrations/modal.d.ts +10 -0
  195. package/dist/ui/integrations/modal.d.ts.map +1 -0
  196. package/dist/ui/integrations/modal.js +77 -0
  197. package/dist/ui/integrations/modal.js.map +1 -0
  198. package/dist/ui/integrations/model.d.ts +99 -0
  199. package/dist/ui/integrations/model.d.ts.map +1 -0
  200. package/dist/ui/integrations/model.js +164 -0
  201. package/dist/ui/integrations/model.js.map +1 -0
  202. package/dist/ui/integrations/parts.d.ts +36 -0
  203. package/dist/ui/integrations/parts.d.ts.map +1 -0
  204. package/dist/ui/integrations/parts.js +85 -0
  205. package/dist/ui/integrations/parts.js.map +1 -0
  206. package/dist/ui/integrations/types.d.ts +146 -0
  207. package/dist/ui/integrations/types.d.ts.map +1 -0
  208. package/dist/ui/integrations/types.js +2 -0
  209. package/dist/ui/integrations/types.js.map +1 -0
  210. package/dist/ui/metrics.d.ts +106 -0
  211. package/dist/ui/metrics.d.ts.map +1 -0
  212. package/dist/ui/metrics.js +166 -0
  213. package/dist/ui/metrics.js.map +1 -0
  214. package/dist/ui/portfolio/PortfolioView.d.ts +26 -0
  215. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -0
  216. package/dist/ui/portfolio/PortfolioView.js +216 -0
  217. package/dist/ui/portfolio/PortfolioView.js.map +1 -0
  218. package/dist/ui/portfolio/SpendChart.d.ts +10 -0
  219. package/dist/ui/portfolio/SpendChart.d.ts.map +1 -0
  220. package/dist/ui/portfolio/SpendChart.js +196 -0
  221. package/dist/ui/portfolio/SpendChart.js.map +1 -0
  222. package/dist/ui/portfolio/alerts.d.ts +74 -0
  223. package/dist/ui/portfolio/alerts.d.ts.map +1 -0
  224. package/dist/ui/portfolio/alerts.js +291 -0
  225. package/dist/ui/portfolio/alerts.js.map +1 -0
  226. package/dist/ui/portfolio/figures.d.ts +79 -0
  227. package/dist/ui/portfolio/figures.d.ts.map +1 -0
  228. package/dist/ui/portfolio/figures.js +103 -0
  229. package/dist/ui/portfolio/figures.js.map +1 -0
  230. package/dist/ui/portfolio/format.d.ts +8 -0
  231. package/dist/ui/portfolio/format.d.ts.map +1 -0
  232. package/dist/ui/portfolio/format.js +28 -0
  233. package/dist/ui/portfolio/format.js.map +1 -0
  234. package/dist/ui/sample.d.ts +536 -0
  235. package/dist/ui/sample.d.ts.map +1 -0
  236. package/dist/ui/sample.js +574 -0
  237. package/dist/ui/sample.js.map +1 -0
  238. package/dist/ui/seed.d.ts +188 -0
  239. package/dist/ui/seed.d.ts.map +1 -0
  240. package/dist/ui/seed.js +563 -0
  241. package/dist/ui/seed.js.map +1 -0
  242. package/dist/ui/ui.css +3424 -0
  243. package/docs/federation.md +46 -1
  244. package/docs/meta-ads.md +795 -0
  245. package/docs/upgrading.md +116 -0
  246. package/llms.txt +3 -0
  247. package/package.json +15 -3
  248. package/src/component/_generated/api.ts +14 -0
  249. package/src/component/_generated/component.ts +324 -1
  250. package/src/component/_generated/server.ts +4 -0
  251. package/src/component/constants.ts +10 -0
  252. package/src/component/convex.config.ts +9 -0
  253. package/src/component/errors.ts +5 -1
  254. package/src/component/leads.ts +517 -17
  255. package/src/component/meta.ts +1525 -0
  256. package/src/component/metaCapi.ts +921 -0
  257. package/src/component/metaFake.ts +277 -0
  258. package/src/component/metaGraph.ts +722 -0
  259. package/src/component/metaSync.ts +1164 -0
  260. package/src/component/pipeline.ts +410 -0
  261. package/src/component/schema.ts +197 -1
  262. package/src/component/secrets.ts +98 -0
  263. package/src/component/validators.ts +376 -3
  264. package/src/tracker/generated.ts +1 -1
  265. package/src/ui/seed.ts +755 -0
@@ -573,6 +573,8 @@ export declare const leadFieldsValidator: import("convex/values").VObject<{
573
573
  title?: string | undefined;
574
574
  } | undefined;
575
575
  channel: "whatsapp";
576
+ column?: string | undefined;
577
+ columnAt?: number | undefined;
576
578
  dayStart: number;
577
579
  entryPoint?: string | undefined;
578
580
  firstAt: number;
@@ -621,16 +623,23 @@ export declare const leadFieldsValidator: import("convex/values").VObject<{
621
623
  stageAt: import("convex/values").VFloat64<number, "required">;
622
624
  qualifiedAt: import("convex/values").VFloat64<number | undefined, "optional">;
623
625
  wonAt: import("convex/values").VFloat64<number | undefined, "optional">;
626
+ /** The host's board column the lead is in now (see `setPipeline`). */
627
+ column: import("convex/values").VString<string | undefined, "optional">;
628
+ columnAt: import("convex/values").VFloat64<number | undefined, "optional">;
624
629
  updatedAt: import("convex/values").VFloat64<number, "required">;
625
- }, "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">;
630
+ }, "required", "ad" | "ad.adId" | "ad.ctwaClid" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "channel" | "column" | "columnAt" | "dayStart" | "entryPoint" | "firstAt" | "label" | "leadKey" | "originKey" | "qualifiedAt" | "revenueCents" | "siteId" | "stage" | "stageAt" | "updatedAt" | "visitorId" | "wonAt">;
626
631
  export declare const adCatalogFieldsValidator: import("convex/values").VObject<{
632
+ adAccountId?: string | undefined;
627
633
  adId: string;
628
634
  adName?: string | undefined;
635
+ adStatus?: string | undefined;
629
636
  adsetId?: string | undefined;
630
637
  adsetName?: string | undefined;
631
638
  campaignId?: string | undefined;
632
639
  campaignName?: string | undefined;
640
+ creativeType?: "carousel" | "image" | "other" | "video" | undefined;
633
641
  siteId: import("convex/values").GenericId<"sites">;
642
+ thumbnailStorageId?: import("convex/values").GenericId<"_storage"> | undefined;
634
643
  thumbnailUrl?: string | undefined;
635
644
  updatedAt: number;
636
645
  }, {
@@ -642,8 +651,213 @@ export declare const adCatalogFieldsValidator: import("convex/values").VObject<{
642
651
  campaignId: import("convex/values").VString<string | undefined, "optional">;
643
652
  campaignName: import("convex/values").VString<string | undefined, "optional">;
644
653
  thumbnailUrl: import("convex/values").VString<string | undefined, "optional">;
654
+ adAccountId: import("convex/values").VString<string | undefined, "optional">;
655
+ adStatus: import("convex/values").VString<string | undefined, "optional">;
656
+ creativeType: import("convex/values").VUnion<"carousel" | "image" | "other" | "video" | undefined, [import("convex/values").VLiteral<"video", "required">, import("convex/values").VLiteral<"image", "required">, import("convex/values").VLiteral<"carousel", "required">, import("convex/values").VLiteral<"other", "required">], "optional", never>;
657
+ /** The creative's thumbnail copied into storage: Meta's URLs expire. */
658
+ thumbnailStorageId: import("convex/values").VId<import("convex/values").GenericId<"_storage"> | undefined, "optional">;
645
659
  updatedAt: import("convex/values").VFloat64<number, "required">;
646
- }, "required", "adId" | "adName" | "adsetId" | "adsetName" | "campaignId" | "campaignName" | "siteId" | "thumbnailUrl" | "updatedAt">;
660
+ }, "required", "adAccountId" | "adId" | "adName" | "adStatus" | "adsetId" | "adsetName" | "campaignId" | "campaignName" | "creativeType" | "siteId" | "thumbnailStorageId" | "thumbnailUrl" | "updatedAt">;
661
+ export declare const metaAdAccountSyncStateValidator: import("convex/values").VUnion<"backfill" | "error" | "live", [import("convex/values").VLiteral<"backfill", "required">, import("convex/values").VLiteral<"live", "required">, import("convex/values").VLiteral<"error", "required">], "required", never>;
662
+ /** An ad account as Meta lists it for a connection's token. */
663
+ export declare const metaAdAccountValidator: import("convex/values").VObject<{
664
+ adAccountId: string;
665
+ currency: string;
666
+ name: string;
667
+ timezone: string;
668
+ }, {
669
+ adAccountId: import("convex/values").VString<string, "required">;
670
+ name: import("convex/values").VString<string, "required">;
671
+ currency: import("convex/values").VString<string, "required">;
672
+ timezone: import("convex/values").VString<string, "required">;
673
+ }, "required", "adAccountId" | "currency" | "name" | "timezone">;
674
+ /** A pixel (dataset) a connection's token can send conversions to. */
675
+ export declare const metaPixelValidator: import("convex/values").VObject<{
676
+ name: string;
677
+ pixelId: string;
678
+ }, {
679
+ pixelId: import("convex/values").VString<string, "required">;
680
+ name: import("convex/values").VString<string, "required">;
681
+ }, "required", "name" | "pixelId">;
682
+ /** Who authorized a Facebook Login for Business connection, as Meta named them. */
683
+ export declare const metaAuthorizerValidator: import("convex/values").VObject<{
684
+ id: string;
685
+ name: string | null;
686
+ }, {
687
+ id: import("convex/values").VString<string, "required">;
688
+ name: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
689
+ }, "required", "id" | "name">;
690
+ export declare const metaConnectionFieldsValidator: import("convex/values").VObject<{
691
+ adAccounts: {
692
+ adAccountId: string;
693
+ currency: string;
694
+ name: string;
695
+ timezone: string;
696
+ }[];
697
+ authorizedAt?: number | undefined;
698
+ authorizedBy?: {
699
+ id: string;
700
+ name: string | null;
701
+ } | undefined;
702
+ businessName?: string | undefined;
703
+ createdAt: number;
704
+ expiringSoon?: boolean | undefined;
705
+ invalidSince?: number | undefined;
706
+ lastCheckedAt: number;
707
+ lastError?: string | undefined;
708
+ ownerKey: string;
709
+ pixels?: {
710
+ name: string;
711
+ pixelId: string;
712
+ }[] | undefined;
713
+ status: "active" | "invalid";
714
+ tokenCipher: string;
715
+ tokenExpiresAt?: number | undefined;
716
+ tokenIv: string;
717
+ updatedAt: number;
718
+ }, {
719
+ /** The host's opaque owner, such as `uzeai:affiliate:<id>`. */
720
+ ownerKey: import("convex/values").VString<string, "required">;
721
+ tokenCipher: import("convex/values").VString<string, "required">;
722
+ tokenIv: import("convex/values").VString<string, "required">;
723
+ businessName: import("convex/values").VString<string | undefined, "optional">;
724
+ status: import("convex/values").VUnion<"active" | "invalid", [import("convex/values").VLiteral<"active", "required">, import("convex/values").VLiteral<"invalid", "required">], "required", never>;
725
+ /** The token's ad accounts as last listed: what a site may link. */
726
+ adAccounts: import("convex/values").VArray<{
727
+ adAccountId: string;
728
+ currency: string;
729
+ name: string;
730
+ timezone: string;
731
+ }[], import("convex/values").VObject<{
732
+ adAccountId: string;
733
+ currency: string;
734
+ name: string;
735
+ timezone: string;
736
+ }, {
737
+ adAccountId: import("convex/values").VString<string, "required">;
738
+ name: import("convex/values").VString<string, "required">;
739
+ currency: import("convex/values").VString<string, "required">;
740
+ timezone: import("convex/values").VString<string, "required">;
741
+ }, "required", "adAccountId" | "currency" | "name" | "timezone">, "required">;
742
+ /** The pixels the listed accounts own, deduplicated: what a site may pick. */
743
+ pixels: import("convex/values").VArray<{
744
+ name: string;
745
+ pixelId: string;
746
+ }[] | undefined, import("convex/values").VObject<{
747
+ name: string;
748
+ pixelId: string;
749
+ }, {
750
+ pixelId: import("convex/values").VString<string, "required">;
751
+ name: import("convex/values").VString<string, "required">;
752
+ }, "required", "name" | "pixelId">, "optional">;
753
+ /** Facebook Login for Business only: who granted the token, and when. */
754
+ authorizedBy: import("convex/values").VObject<{
755
+ id: string;
756
+ name: string | null;
757
+ } | undefined, {
758
+ id: import("convex/values").VString<string, "required">;
759
+ name: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
760
+ }, "optional", "id" | "name">;
761
+ authorizedAt: import("convex/values").VFloat64<number | undefined, "optional">;
762
+ /** When Meta first refused the token; cleared by a new one. */
763
+ invalidSince: import("convex/values").VFloat64<number | undefined, "optional">;
764
+ /** When the token expires, as Meta said at login; absent for never. */
765
+ tokenExpiresAt: import("convex/values").VFloat64<number | undefined, "optional">;
766
+ /** Set 7 days before `tokenExpiresAt` by a scheduled run. */
767
+ expiringSoon: import("convex/values").VBoolean<boolean | undefined, "optional">;
768
+ lastCheckedAt: import("convex/values").VFloat64<number, "required">;
769
+ lastError: import("convex/values").VString<string | undefined, "optional">;
770
+ createdAt: import("convex/values").VFloat64<number, "required">;
771
+ updatedAt: import("convex/values").VFloat64<number, "required">;
772
+ }, "required", "adAccounts" | "authorizedAt" | "authorizedBy" | "authorizedBy.id" | "authorizedBy.name" | "businessName" | "createdAt" | "expiringSoon" | "invalidSince" | "lastCheckedAt" | "lastError" | "ownerKey" | "pixels" | "status" | "tokenCipher" | "tokenExpiresAt" | "tokenIv" | "updatedAt">;
773
+ export declare const siteAdAccountFieldsValidator: import("convex/values").VObject<{
774
+ adAccountId: string;
775
+ backfillFrom?: string | undefined;
776
+ connectionId: import("convex/values").GenericId<"metaConnections">;
777
+ createdAt: number;
778
+ currency: string;
779
+ failures?: number | undefined;
780
+ lastDailyResyncAt?: number | undefined;
781
+ lastError?: string | undefined;
782
+ lastFullResyncAt?: number | undefined;
783
+ lastSyncAt?: number | undefined;
784
+ name: string;
785
+ nextSyncAt: number;
786
+ runId?: string | undefined;
787
+ siteId: import("convex/values").GenericId<"sites">;
788
+ syncRequested?: boolean | undefined;
789
+ syncState: "backfill" | "error" | "live";
790
+ timezone: string;
791
+ }, {
792
+ adAccountId: import("convex/values").VString<string, "required">;
793
+ name: import("convex/values").VString<string, "required">;
794
+ currency: import("convex/values").VString<string, "required">;
795
+ timezone: import("convex/values").VString<string, "required">;
796
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
797
+ connectionId: import("convex/values").VId<import("convex/values").GenericId<"metaConnections">, "required">;
798
+ syncState: import("convex/values").VUnion<"backfill" | "error" | "live", [import("convex/values").VLiteral<"backfill", "required">, import("convex/values").VLiteral<"live", "required">, import("convex/values").VLiteral<"error", "required">], "required", never>;
799
+ lastSyncAt: import("convex/values").VFloat64<number | undefined, "optional">;
800
+ /** The last resync of the trailing 7 days (daily, 04:00 account-local). */
801
+ lastDailyResyncAt: import("convex/values").VFloat64<number | undefined, "optional">;
802
+ /** The last resync of the trailing 28 days (weekly). */
803
+ lastFullResyncAt: import("convex/values").VFloat64<number | undefined, "optional">;
804
+ lastError: import("convex/values").VString<string | undefined, "optional">;
805
+ nextSyncAt: import("convex/values").VFloat64<number, "required">;
806
+ /** The run that holds the account now; a write from any other is dropped. */
807
+ runId: import("convex/values").VString<string | undefined, "optional">;
808
+ /** `syncNow` asked while a run held the account: run again right after. */
809
+ syncRequested: import("convex/values").VBoolean<boolean | undefined, "optional">;
810
+ /**
811
+ * While backfilling, the next account-local date to read (`YYYY-MM-DD`):
812
+ * one 30-day block per run, so a failed block resumes where it stopped.
813
+ */
814
+ backfillFrom: import("convex/values").VString<string | undefined, "optional">;
815
+ /** Consecutive failed runs, for the growing retry delay. */
816
+ failures: import("convex/values").VFloat64<number | undefined, "optional">;
817
+ createdAt: import("convex/values").VFloat64<number, "required">;
818
+ }, "required", "adAccountId" | "backfillFrom" | "connectionId" | "createdAt" | "currency" | "failures" | "lastDailyResyncAt" | "lastError" | "lastFullResyncAt" | "lastSyncAt" | "name" | "nextSyncAt" | "runId" | "siteId" | "syncRequested" | "syncState" | "timezone">;
819
+ export declare const metaPixelSourceValidator: import("convex/values").VUnion<"connection" | "token", [import("convex/values").VLiteral<"connection", "required">, import("convex/values").VLiteral<"token", "required">], "required", never>;
820
+ export declare const sitePixelFieldsValidator: import("convex/values").VObject<{
821
+ connectionId?: import("convex/values").GenericId<"metaConnections"> | undefined;
822
+ enabled: boolean;
823
+ invalidSince?: number | undefined;
824
+ lastError?: string | undefined;
825
+ name?: string | undefined;
826
+ pixelId: string;
827
+ sendLeadEvent?: boolean | undefined;
828
+ setBy?: string | undefined;
829
+ siteId: import("convex/values").GenericId<"sites">;
830
+ source?: "connection" | "token" | undefined;
831
+ testEventCode?: string | undefined;
832
+ tokenCipher?: string | undefined;
833
+ tokenIv?: string | undefined;
834
+ updatedAt: number;
835
+ }, {
836
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
837
+ pixelId: import("convex/values").VString<string, "required">;
838
+ /**
839
+ * `token`: a Conversions API token pasted for this pixel, sealed below.
840
+ * `connection`: the pixel was picked from a connection's listing and sends
841
+ * with that connection's token (no token here). Absent on rows from before
842
+ * the choice existed, which are all `token`.
843
+ */
844
+ source: import("convex/values").VUnion<"connection" | "token" | undefined, [import("convex/values").VLiteral<"connection", "required">, import("convex/values").VLiteral<"token", "required">], "optional", never>;
845
+ connectionId: import("convex/values").VId<import("convex/values").GenericId<"metaConnections"> | undefined, "optional">;
846
+ /** The pixel's name in Meta, when it came from a listing. */
847
+ name: import("convex/values").VString<string | undefined, "optional">;
848
+ /** The host owner that set the pixel, when the host named one. */
849
+ setBy: import("convex/values").VString<string | undefined, "optional">;
850
+ tokenCipher: import("convex/values").VString<string | undefined, "optional">;
851
+ tokenIv: import("convex/values").VString<string | undefined, "optional">;
852
+ enabled: import("convex/values").VBoolean<boolean, "required">;
853
+ testEventCode: import("convex/values").VString<string | undefined, "optional">;
854
+ /** Whether a new lead is sent as `Lead` (off by default). */
855
+ sendLeadEvent: import("convex/values").VBoolean<boolean | undefined, "optional">;
856
+ updatedAt: import("convex/values").VFloat64<number, "required">;
857
+ /** When Meta refused the pixel's own token; a new token clears it. */
858
+ invalidSince: import("convex/values").VFloat64<number | undefined, "optional">;
859
+ lastError: import("convex/values").VString<string | undefined, "optional">;
860
+ }, "required", "connectionId" | "enabled" | "invalidSince" | "lastError" | "name" | "pixelId" | "sendLeadEvent" | "setBy" | "siteId" | "source" | "testEventCode" | "tokenCipher" | "tokenIv" | "updatedAt">;
647
861
  export declare const ingestResultValidator: import("convex/values").VObject<{
648
862
  accepted: number;
649
863
  duplicates: number;
@@ -686,11 +900,17 @@ export type Evidence = Infer<typeof evidenceValidator>;
686
900
  export declare const leadAdRowValidator: import("convex/values").VObject<{
687
901
  adId: string;
688
902
  adName: string | null;
903
+ adStatus?: string | null | undefined;
904
+ clicks?: number | null | undefined;
905
+ creativeType?: string | null | undefined;
906
+ impressions?: number | null | undefined;
689
907
  leads: number;
690
908
  qualified: number;
691
909
  revenueCents: number;
910
+ siteId?: string | undefined;
692
911
  sourceApp: string | null;
693
912
  sourceUrl: string | null;
913
+ spendCents?: number | null | undefined;
694
914
  thumbnailUrl: string | null;
695
915
  title: string | null;
696
916
  won: number;
@@ -699,58 +919,91 @@ export declare const leadAdRowValidator: import("convex/values").VObject<{
699
919
  qualified: import("convex/values").VFloat64<number, "required">;
700
920
  won: import("convex/values").VFloat64<number, "required">;
701
921
  revenueCents: import("convex/values").VFloat64<number, "required">;
922
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
923
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
924
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
702
925
  adId: import("convex/values").VString<string, "required">;
926
+ /** Since 0.10.0: the site the ad brought leads to, for multi-site reports. */
927
+ siteId: import("convex/values").VString<string | undefined, "optional">;
703
928
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
704
929
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
705
930
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
706
931
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
707
932
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
708
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">;
933
+ /** Since 0.10.0: "video" | "image" | "carousel" | "other", from Meta. */
934
+ creativeType: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
935
+ /** Since 0.10.0: the ad's effective status at Meta ("ACTIVE", "PAUSED"…). */
936
+ adStatus: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
937
+ }, "required", "adId" | "adName" | "adStatus" | "clicks" | "creativeType" | "impressions" | "leads" | "qualified" | "revenueCents" | "siteId" | "sourceApp" | "sourceUrl" | "spendCents" | "thumbnailUrl" | "title" | "won">;
709
938
  export declare const leadAdsetRowValidator: import("convex/values").VObject<{
710
939
  ads: {
711
940
  adId: string;
712
941
  adName: string | null;
942
+ adStatus?: string | null | undefined;
943
+ clicks?: number | null | undefined;
944
+ creativeType?: string | null | undefined;
945
+ impressions?: number | null | undefined;
713
946
  leads: number;
714
947
  qualified: number;
715
948
  revenueCents: number;
949
+ siteId?: string | undefined;
716
950
  sourceApp: string | null;
717
951
  sourceUrl: string | null;
952
+ spendCents?: number | null | undefined;
718
953
  thumbnailUrl: string | null;
719
954
  title: string | null;
720
955
  won: number;
721
956
  }[];
722
957
  adsetId: string | null;
723
958
  adsetName: string | null;
959
+ clicks?: number | null | undefined;
960
+ impressions?: number | null | undefined;
724
961
  leads: number;
725
962
  qualified: number;
726
963
  revenueCents: number;
964
+ spendCents?: number | null | undefined;
727
965
  won: number;
728
966
  }, {
729
967
  leads: import("convex/values").VFloat64<number, "required">;
730
968
  qualified: import("convex/values").VFloat64<number, "required">;
731
969
  won: import("convex/values").VFloat64<number, "required">;
732
970
  revenueCents: import("convex/values").VFloat64<number, "required">;
971
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
972
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
973
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
733
974
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
734
975
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
735
976
  ads: import("convex/values").VArray<{
736
977
  adId: string;
737
978
  adName: string | null;
979
+ adStatus?: string | null | undefined;
980
+ clicks?: number | null | undefined;
981
+ creativeType?: string | null | undefined;
982
+ impressions?: number | null | undefined;
738
983
  leads: number;
739
984
  qualified: number;
740
985
  revenueCents: number;
986
+ siteId?: string | undefined;
741
987
  sourceApp: string | null;
742
988
  sourceUrl: string | null;
989
+ spendCents?: number | null | undefined;
743
990
  thumbnailUrl: string | null;
744
991
  title: string | null;
745
992
  won: number;
746
993
  }[], import("convex/values").VObject<{
747
994
  adId: string;
748
995
  adName: string | null;
996
+ adStatus?: string | null | undefined;
997
+ clicks?: number | null | undefined;
998
+ creativeType?: string | null | undefined;
999
+ impressions?: number | null | undefined;
749
1000
  leads: number;
750
1001
  qualified: number;
751
1002
  revenueCents: number;
1003
+ siteId?: string | undefined;
752
1004
  sourceApp: string | null;
753
1005
  sourceUrl: string | null;
1006
+ spendCents?: number | null | undefined;
754
1007
  thumbnailUrl: string | null;
755
1008
  title: string | null;
756
1009
  won: number;
@@ -759,112 +1012,169 @@ export declare const leadAdsetRowValidator: import("convex/values").VObject<{
759
1012
  qualified: import("convex/values").VFloat64<number, "required">;
760
1013
  won: import("convex/values").VFloat64<number, "required">;
761
1014
  revenueCents: import("convex/values").VFloat64<number, "required">;
1015
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1016
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1017
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
762
1018
  adId: import("convex/values").VString<string, "required">;
1019
+ /** Since 0.10.0: the site the ad brought leads to, for multi-site reports. */
1020
+ siteId: import("convex/values").VString<string | undefined, "optional">;
763
1021
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
764
1022
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
765
1023
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
766
1024
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
767
1025
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
768
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
769
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">;
1026
+ /** Since 0.10.0: "video" | "image" | "carousel" | "other", from Meta. */
1027
+ creativeType: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1028
+ /** Since 0.10.0: the ad's effective status at Meta ("ACTIVE", "PAUSED"…). */
1029
+ adStatus: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1030
+ }, "required", "adId" | "adName" | "adStatus" | "clicks" | "creativeType" | "impressions" | "leads" | "qualified" | "revenueCents" | "siteId" | "sourceApp" | "sourceUrl" | "spendCents" | "thumbnailUrl" | "title" | "won">, "required">;
1031
+ }, "required", "ads" | "adsetId" | "adsetName" | "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">;
770
1032
  export declare const leadCampaignRowValidator: import("convex/values").VObject<{
771
1033
  adsets: {
772
1034
  ads: {
773
1035
  adId: string;
774
1036
  adName: string | null;
1037
+ adStatus?: string | null | undefined;
1038
+ clicks?: number | null | undefined;
1039
+ creativeType?: string | null | undefined;
1040
+ impressions?: number | null | undefined;
775
1041
  leads: number;
776
1042
  qualified: number;
777
1043
  revenueCents: number;
1044
+ siteId?: string | undefined;
778
1045
  sourceApp: string | null;
779
1046
  sourceUrl: string | null;
1047
+ spendCents?: number | null | undefined;
780
1048
  thumbnailUrl: string | null;
781
1049
  title: string | null;
782
1050
  won: number;
783
1051
  }[];
784
1052
  adsetId: string | null;
785
1053
  adsetName: string | null;
1054
+ clicks?: number | null | undefined;
1055
+ impressions?: number | null | undefined;
786
1056
  leads: number;
787
1057
  qualified: number;
788
1058
  revenueCents: number;
1059
+ spendCents?: number | null | undefined;
789
1060
  won: number;
790
1061
  }[];
791
1062
  campaignId: string | null;
792
1063
  campaignName: string | null;
1064
+ clicks?: number | null | undefined;
1065
+ impressions?: number | null | undefined;
793
1066
  leads: number;
794
1067
  qualified: number;
795
1068
  revenueCents: number;
1069
+ spendCents?: number | null | undefined;
796
1070
  won: number;
797
1071
  }, {
798
1072
  leads: import("convex/values").VFloat64<number, "required">;
799
1073
  qualified: import("convex/values").VFloat64<number, "required">;
800
1074
  won: import("convex/values").VFloat64<number, "required">;
801
1075
  revenueCents: import("convex/values").VFloat64<number, "required">;
1076
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1077
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1078
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
802
1079
  campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
803
1080
  campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
804
1081
  adsets: import("convex/values").VArray<{
805
1082
  ads: {
806
1083
  adId: string;
807
1084
  adName: string | null;
1085
+ adStatus?: string | null | undefined;
1086
+ clicks?: number | null | undefined;
1087
+ creativeType?: string | null | undefined;
1088
+ impressions?: number | null | undefined;
808
1089
  leads: number;
809
1090
  qualified: number;
810
1091
  revenueCents: number;
1092
+ siteId?: string | undefined;
811
1093
  sourceApp: string | null;
812
1094
  sourceUrl: string | null;
1095
+ spendCents?: number | null | undefined;
813
1096
  thumbnailUrl: string | null;
814
1097
  title: string | null;
815
1098
  won: number;
816
1099
  }[];
817
1100
  adsetId: string | null;
818
1101
  adsetName: string | null;
1102
+ clicks?: number | null | undefined;
1103
+ impressions?: number | null | undefined;
819
1104
  leads: number;
820
1105
  qualified: number;
821
1106
  revenueCents: number;
1107
+ spendCents?: number | null | undefined;
822
1108
  won: number;
823
1109
  }[], import("convex/values").VObject<{
824
1110
  ads: {
825
1111
  adId: string;
826
1112
  adName: string | null;
1113
+ adStatus?: string | null | undefined;
1114
+ clicks?: number | null | undefined;
1115
+ creativeType?: string | null | undefined;
1116
+ impressions?: number | null | undefined;
827
1117
  leads: number;
828
1118
  qualified: number;
829
1119
  revenueCents: number;
1120
+ siteId?: string | undefined;
830
1121
  sourceApp: string | null;
831
1122
  sourceUrl: string | null;
1123
+ spendCents?: number | null | undefined;
832
1124
  thumbnailUrl: string | null;
833
1125
  title: string | null;
834
1126
  won: number;
835
1127
  }[];
836
1128
  adsetId: string | null;
837
1129
  adsetName: string | null;
1130
+ clicks?: number | null | undefined;
1131
+ impressions?: number | null | undefined;
838
1132
  leads: number;
839
1133
  qualified: number;
840
1134
  revenueCents: number;
1135
+ spendCents?: number | null | undefined;
841
1136
  won: number;
842
1137
  }, {
843
1138
  leads: import("convex/values").VFloat64<number, "required">;
844
1139
  qualified: import("convex/values").VFloat64<number, "required">;
845
1140
  won: import("convex/values").VFloat64<number, "required">;
846
1141
  revenueCents: import("convex/values").VFloat64<number, "required">;
1142
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1143
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1144
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
847
1145
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
848
1146
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
849
1147
  ads: import("convex/values").VArray<{
850
1148
  adId: string;
851
1149
  adName: string | null;
1150
+ adStatus?: string | null | undefined;
1151
+ clicks?: number | null | undefined;
1152
+ creativeType?: string | null | undefined;
1153
+ impressions?: number | null | undefined;
852
1154
  leads: number;
853
1155
  qualified: number;
854
1156
  revenueCents: number;
1157
+ siteId?: string | undefined;
855
1158
  sourceApp: string | null;
856
1159
  sourceUrl: string | null;
1160
+ spendCents?: number | null | undefined;
857
1161
  thumbnailUrl: string | null;
858
1162
  title: string | null;
859
1163
  won: number;
860
1164
  }[], import("convex/values").VObject<{
861
1165
  adId: string;
862
1166
  adName: string | null;
1167
+ adStatus?: string | null | undefined;
1168
+ clicks?: number | null | undefined;
1169
+ creativeType?: string | null | undefined;
1170
+ impressions?: number | null | undefined;
863
1171
  leads: number;
864
1172
  qualified: number;
865
1173
  revenueCents: number;
1174
+ siteId?: string | undefined;
866
1175
  sourceApp: string | null;
867
1176
  sourceUrl: string | null;
1177
+ spendCents?: number | null | undefined;
868
1178
  thumbnailUrl: string | null;
869
1179
  title: string | null;
870
1180
  won: number;
@@ -873,58 +1183,150 @@ export declare const leadCampaignRowValidator: import("convex/values").VObject<{
873
1183
  qualified: import("convex/values").VFloat64<number, "required">;
874
1184
  won: import("convex/values").VFloat64<number, "required">;
875
1185
  revenueCents: import("convex/values").VFloat64<number, "required">;
1186
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1187
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1188
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
876
1189
  adId: import("convex/values").VString<string, "required">;
1190
+ /** Since 0.10.0: the site the ad brought leads to, for multi-site reports. */
1191
+ siteId: import("convex/values").VString<string | undefined, "optional">;
877
1192
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
878
1193
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
879
1194
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
880
1195
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
881
1196
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
882
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
883
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
884
- }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">;
1197
+ /** Since 0.10.0: "video" | "image" | "carousel" | "other", from Meta. */
1198
+ creativeType: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1199
+ /** Since 0.10.0: the ad's effective status at Meta ("ACTIVE", "PAUSED"…). */
1200
+ adStatus: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1201
+ }, "required", "adId" | "adName" | "adStatus" | "clicks" | "creativeType" | "impressions" | "leads" | "qualified" | "revenueCents" | "siteId" | "sourceApp" | "sourceUrl" | "spendCents" | "thumbnailUrl" | "title" | "won">, "required">;
1202
+ }, "required", "ads" | "adsetId" | "adsetName" | "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
1203
+ }, "required", "adsets" | "campaignId" | "campaignName" | "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">;
1204
+ export declare const leadSiteRowValidator: import("convex/values").VObject<{
1205
+ currencyMismatch?: boolean | undefined;
1206
+ leads: number;
1207
+ paid: {
1208
+ leads: number;
1209
+ qualified: number;
1210
+ revenueCents: number;
1211
+ won: number;
1212
+ };
1213
+ qualified: number;
1214
+ revenueCents: number;
1215
+ siteId: string;
1216
+ spendCents?: number | null | undefined;
1217
+ spendCurrency?: string | null | undefined;
1218
+ won: number;
1219
+ }, {
1220
+ leads: import("convex/values").VFloat64<number, "required">;
1221
+ qualified: import("convex/values").VFloat64<number, "required">;
1222
+ won: import("convex/values").VFloat64<number, "required">;
1223
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1224
+ siteId: import("convex/values").VString<string, "required">;
1225
+ /**
1226
+ * The site's leads that came from an ad (origin `ctwa_ad`): what spend buys,
1227
+ * so cost per lead and return use these and never the organic leads.
1228
+ */
1229
+ paid: import("convex/values").VObject<{
1230
+ leads: number;
1231
+ qualified: number;
1232
+ revenueCents: number;
1233
+ won: number;
1234
+ }, {
1235
+ leads: import("convex/values").VFloat64<number, "required">;
1236
+ qualified: import("convex/values").VFloat64<number, "required">;
1237
+ won: import("convex/values").VFloat64<number, "required">;
1238
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1239
+ }, "required", "leads" | "qualified" | "revenueCents" | "won">;
1240
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1241
+ /** The site's synced ad accounts' currency; null without one or with two. */
1242
+ spendCurrency: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1243
+ /**
1244
+ * True when the site's spend is not comparable with its revenue: an account
1245
+ * bills in another currency than the site's, or its accounts in two (its
1246
+ * spend is then null).
1247
+ */
1248
+ currencyMismatch: import("convex/values").VBoolean<boolean | undefined, "optional">;
1249
+ }, "required", "currencyMismatch" | "leads" | "paid" | "paid.leads" | "paid.qualified" | "paid.revenueCents" | "paid.won" | "qualified" | "revenueCents" | "siteId" | "spendCents" | "spendCurrency" | "won">;
885
1250
  export declare const leadsReportValidator: import("convex/values").VObject<{
1251
+ bySite?: {
1252
+ currencyMismatch?: boolean | undefined;
1253
+ leads: number;
1254
+ paid: {
1255
+ leads: number;
1256
+ qualified: number;
1257
+ revenueCents: number;
1258
+ won: number;
1259
+ };
1260
+ qualified: number;
1261
+ revenueCents: number;
1262
+ siteId: string;
1263
+ spendCents?: number | null | undefined;
1264
+ spendCurrency?: string | null | undefined;
1265
+ won: number;
1266
+ }[] | undefined;
886
1267
  campaigns: {
887
1268
  adsets: {
888
1269
  ads: {
889
1270
  adId: string;
890
1271
  adName: string | null;
1272
+ adStatus?: string | null | undefined;
1273
+ clicks?: number | null | undefined;
1274
+ creativeType?: string | null | undefined;
1275
+ impressions?: number | null | undefined;
891
1276
  leads: number;
892
1277
  qualified: number;
893
1278
  revenueCents: number;
1279
+ siteId?: string | undefined;
894
1280
  sourceApp: string | null;
895
1281
  sourceUrl: string | null;
1282
+ spendCents?: number | null | undefined;
896
1283
  thumbnailUrl: string | null;
897
1284
  title: string | null;
898
1285
  won: number;
899
1286
  }[];
900
1287
  adsetId: string | null;
901
1288
  adsetName: string | null;
1289
+ clicks?: number | null | undefined;
1290
+ impressions?: number | null | undefined;
902
1291
  leads: number;
903
1292
  qualified: number;
904
1293
  revenueCents: number;
1294
+ spendCents?: number | null | undefined;
905
1295
  won: number;
906
1296
  }[];
907
1297
  campaignId: string | null;
908
1298
  campaignName: string | null;
1299
+ clicks?: number | null | undefined;
1300
+ impressions?: number | null | undefined;
909
1301
  leads: number;
910
1302
  qualified: number;
911
1303
  revenueCents: number;
1304
+ spendCents?: number | null | undefined;
912
1305
  won: number;
913
1306
  }[];
914
1307
  currency: string | null;
1308
+ currencyMismatch?: boolean | undefined;
915
1309
  from: number;
916
1310
  origins: {
1311
+ clicks?: number | null | undefined;
1312
+ impressions?: number | null | undefined;
917
1313
  key: string;
918
1314
  leads: number;
919
1315
  qualified: number;
920
1316
  revenueCents: number;
1317
+ spendCents?: number | null | undefined;
921
1318
  won: number;
922
1319
  }[];
1320
+ spendCurrency?: string | null | undefined;
1321
+ spendIncomplete?: boolean | undefined;
923
1322
  to: number;
924
1323
  totals: {
1324
+ clicks?: number | null | undefined;
1325
+ impressions?: number | null | undefined;
925
1326
  leads: number;
926
1327
  qualified: number;
927
1328
  revenueCents: number;
1329
+ spendCents?: number | null | undefined;
928
1330
  won: number;
929
1331
  };
930
1332
  }, {
@@ -933,164 +1335,240 @@ export declare const leadsReportValidator: import("convex/values").VObject<{
933
1335
  /** The sites' currency, or null when they differ (revenue then mixes). */
934
1336
  currency: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
935
1337
  totals: import("convex/values").VObject<{
1338
+ clicks?: number | null | undefined;
1339
+ impressions?: number | null | undefined;
936
1340
  leads: number;
937
1341
  qualified: number;
938
1342
  revenueCents: number;
1343
+ spendCents?: number | null | undefined;
939
1344
  won: number;
940
1345
  }, {
941
1346
  leads: import("convex/values").VFloat64<number, "required">;
942
1347
  qualified: import("convex/values").VFloat64<number, "required">;
943
1348
  won: import("convex/values").VFloat64<number, "required">;
944
1349
  revenueCents: import("convex/values").VFloat64<number, "required">;
945
- }, "required", "leads" | "qualified" | "revenueCents" | "won">;
1350
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1351
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1352
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1353
+ }, "required", "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">;
946
1354
  origins: import("convex/values").VArray<{
1355
+ clicks?: number | null | undefined;
1356
+ impressions?: number | null | undefined;
947
1357
  key: string;
948
1358
  leads: number;
949
1359
  qualified: number;
950
1360
  revenueCents: number;
1361
+ spendCents?: number | null | undefined;
951
1362
  won: number;
952
1363
  }[], import("convex/values").VObject<{
1364
+ clicks?: number | null | undefined;
1365
+ impressions?: number | null | undefined;
953
1366
  key: string;
954
1367
  leads: number;
955
1368
  qualified: number;
956
1369
  revenueCents: number;
1370
+ spendCents?: number | null | undefined;
957
1371
  won: number;
958
1372
  }, {
959
1373
  leads: import("convex/values").VFloat64<number, "required">;
960
1374
  qualified: import("convex/values").VFloat64<number, "required">;
961
1375
  won: import("convex/values").VFloat64<number, "required">;
962
1376
  revenueCents: import("convex/values").VFloat64<number, "required">;
1377
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1378
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1379
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
963
1380
  key: import("convex/values").VString<string, "required">;
964
- }, "required", "key" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1381
+ }, "required", "clicks" | "impressions" | "key" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
965
1382
  /**
966
1383
  * Campaign → ad set → ad, with ads the catalog does not name yet grouped
967
- * under a null campaign and a null ad set.
1384
+ * under a null campaign and a null ad set. Since 0.10.0 an ad that spent
1385
+ * without bringing a lead is listed too, with zero leads.
968
1386
  */
969
1387
  campaigns: import("convex/values").VArray<{
970
1388
  adsets: {
971
1389
  ads: {
972
1390
  adId: string;
973
1391
  adName: string | null;
1392
+ adStatus?: string | null | undefined;
1393
+ clicks?: number | null | undefined;
1394
+ creativeType?: string | null | undefined;
1395
+ impressions?: number | null | undefined;
974
1396
  leads: number;
975
1397
  qualified: number;
976
1398
  revenueCents: number;
1399
+ siteId?: string | undefined;
977
1400
  sourceApp: string | null;
978
1401
  sourceUrl: string | null;
1402
+ spendCents?: number | null | undefined;
979
1403
  thumbnailUrl: string | null;
980
1404
  title: string | null;
981
1405
  won: number;
982
1406
  }[];
983
1407
  adsetId: string | null;
984
1408
  adsetName: string | null;
1409
+ clicks?: number | null | undefined;
1410
+ impressions?: number | null | undefined;
985
1411
  leads: number;
986
1412
  qualified: number;
987
1413
  revenueCents: number;
1414
+ spendCents?: number | null | undefined;
988
1415
  won: number;
989
1416
  }[];
990
1417
  campaignId: string | null;
991
1418
  campaignName: string | null;
1419
+ clicks?: number | null | undefined;
1420
+ impressions?: number | null | undefined;
992
1421
  leads: number;
993
1422
  qualified: number;
994
1423
  revenueCents: number;
1424
+ spendCents?: number | null | undefined;
995
1425
  won: number;
996
1426
  }[], import("convex/values").VObject<{
997
1427
  adsets: {
998
1428
  ads: {
999
1429
  adId: string;
1000
1430
  adName: string | null;
1431
+ adStatus?: string | null | undefined;
1432
+ clicks?: number | null | undefined;
1433
+ creativeType?: string | null | undefined;
1434
+ impressions?: number | null | undefined;
1001
1435
  leads: number;
1002
1436
  qualified: number;
1003
1437
  revenueCents: number;
1438
+ siteId?: string | undefined;
1004
1439
  sourceApp: string | null;
1005
1440
  sourceUrl: string | null;
1441
+ spendCents?: number | null | undefined;
1006
1442
  thumbnailUrl: string | null;
1007
1443
  title: string | null;
1008
1444
  won: number;
1009
1445
  }[];
1010
1446
  adsetId: string | null;
1011
1447
  adsetName: string | null;
1448
+ clicks?: number | null | undefined;
1449
+ impressions?: number | null | undefined;
1012
1450
  leads: number;
1013
1451
  qualified: number;
1014
1452
  revenueCents: number;
1453
+ spendCents?: number | null | undefined;
1015
1454
  won: number;
1016
1455
  }[];
1017
1456
  campaignId: string | null;
1018
1457
  campaignName: string | null;
1458
+ clicks?: number | null | undefined;
1459
+ impressions?: number | null | undefined;
1019
1460
  leads: number;
1020
1461
  qualified: number;
1021
1462
  revenueCents: number;
1463
+ spendCents?: number | null | undefined;
1022
1464
  won: number;
1023
1465
  }, {
1024
1466
  leads: import("convex/values").VFloat64<number, "required">;
1025
1467
  qualified: import("convex/values").VFloat64<number, "required">;
1026
1468
  won: import("convex/values").VFloat64<number, "required">;
1027
1469
  revenueCents: import("convex/values").VFloat64<number, "required">;
1470
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1471
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1472
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1028
1473
  campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1029
1474
  campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1030
1475
  adsets: import("convex/values").VArray<{
1031
1476
  ads: {
1032
1477
  adId: string;
1033
1478
  adName: string | null;
1479
+ adStatus?: string | null | undefined;
1480
+ clicks?: number | null | undefined;
1481
+ creativeType?: string | null | undefined;
1482
+ impressions?: number | null | undefined;
1034
1483
  leads: number;
1035
1484
  qualified: number;
1036
1485
  revenueCents: number;
1486
+ siteId?: string | undefined;
1037
1487
  sourceApp: string | null;
1038
1488
  sourceUrl: string | null;
1489
+ spendCents?: number | null | undefined;
1039
1490
  thumbnailUrl: string | null;
1040
1491
  title: string | null;
1041
1492
  won: number;
1042
1493
  }[];
1043
1494
  adsetId: string | null;
1044
1495
  adsetName: string | null;
1496
+ clicks?: number | null | undefined;
1497
+ impressions?: number | null | undefined;
1045
1498
  leads: number;
1046
1499
  qualified: number;
1047
1500
  revenueCents: number;
1501
+ spendCents?: number | null | undefined;
1048
1502
  won: number;
1049
1503
  }[], import("convex/values").VObject<{
1050
1504
  ads: {
1051
1505
  adId: string;
1052
1506
  adName: string | null;
1507
+ adStatus?: string | null | undefined;
1508
+ clicks?: number | null | undefined;
1509
+ creativeType?: string | null | undefined;
1510
+ impressions?: number | null | undefined;
1053
1511
  leads: number;
1054
1512
  qualified: number;
1055
1513
  revenueCents: number;
1514
+ siteId?: string | undefined;
1056
1515
  sourceApp: string | null;
1057
1516
  sourceUrl: string | null;
1517
+ spendCents?: number | null | undefined;
1058
1518
  thumbnailUrl: string | null;
1059
1519
  title: string | null;
1060
1520
  won: number;
1061
1521
  }[];
1062
1522
  adsetId: string | null;
1063
1523
  adsetName: string | null;
1524
+ clicks?: number | null | undefined;
1525
+ impressions?: number | null | undefined;
1064
1526
  leads: number;
1065
1527
  qualified: number;
1066
1528
  revenueCents: number;
1529
+ spendCents?: number | null | undefined;
1067
1530
  won: number;
1068
1531
  }, {
1069
1532
  leads: import("convex/values").VFloat64<number, "required">;
1070
1533
  qualified: import("convex/values").VFloat64<number, "required">;
1071
1534
  won: import("convex/values").VFloat64<number, "required">;
1072
1535
  revenueCents: import("convex/values").VFloat64<number, "required">;
1536
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1537
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1538
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1073
1539
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1074
1540
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1075
1541
  ads: import("convex/values").VArray<{
1076
1542
  adId: string;
1077
1543
  adName: string | null;
1544
+ adStatus?: string | null | undefined;
1545
+ clicks?: number | null | undefined;
1546
+ creativeType?: string | null | undefined;
1547
+ impressions?: number | null | undefined;
1078
1548
  leads: number;
1079
1549
  qualified: number;
1080
1550
  revenueCents: number;
1551
+ siteId?: string | undefined;
1081
1552
  sourceApp: string | null;
1082
1553
  sourceUrl: string | null;
1554
+ spendCents?: number | null | undefined;
1083
1555
  thumbnailUrl: string | null;
1084
1556
  title: string | null;
1085
1557
  won: number;
1086
1558
  }[], import("convex/values").VObject<{
1087
1559
  adId: string;
1088
1560
  adName: string | null;
1561
+ adStatus?: string | null | undefined;
1562
+ clicks?: number | null | undefined;
1563
+ creativeType?: string | null | undefined;
1564
+ impressions?: number | null | undefined;
1089
1565
  leads: number;
1090
1566
  qualified: number;
1091
1567
  revenueCents: number;
1568
+ siteId?: string | undefined;
1092
1569
  sourceApp: string | null;
1093
1570
  sourceUrl: string | null;
1571
+ spendCents?: number | null | undefined;
1094
1572
  thumbnailUrl: string | null;
1095
1573
  title: string | null;
1096
1574
  won: number;
@@ -1099,16 +1577,352 @@ export declare const leadsReportValidator: import("convex/values").VObject<{
1099
1577
  qualified: import("convex/values").VFloat64<number, "required">;
1100
1578
  won: import("convex/values").VFloat64<number, "required">;
1101
1579
  revenueCents: import("convex/values").VFloat64<number, "required">;
1580
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1581
+ impressions: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1582
+ clicks: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1102
1583
  adId: import("convex/values").VString<string, "required">;
1584
+ /** Since 0.10.0: the site the ad brought leads to, for multi-site reports. */
1585
+ siteId: import("convex/values").VString<string | undefined, "optional">;
1103
1586
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1104
1587
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1105
1588
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1106
1589
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1107
1590
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1108
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
1109
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1110
- }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1111
- }, "required", "campaigns" | "currency" | "from" | "origins" | "to" | "totals" | "totals.leads" | "totals.qualified" | "totals.revenueCents" | "totals.won">;
1591
+ /** Since 0.10.0: "video" | "image" | "carousel" | "other", from Meta. */
1592
+ creativeType: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1593
+ /** Since 0.10.0: the ad's effective status at Meta ("ACTIVE", "PAUSED"…). */
1594
+ adStatus: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1595
+ }, "required", "adId" | "adName" | "adStatus" | "clicks" | "creativeType" | "impressions" | "leads" | "qualified" | "revenueCents" | "siteId" | "sourceApp" | "sourceUrl" | "spendCents" | "thumbnailUrl" | "title" | "won">, "required">;
1596
+ }, "required", "ads" | "adsetId" | "adsetName" | "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
1597
+ }, "required", "adsets" | "campaignId" | "campaignName" | "clicks" | "impressions" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
1598
+ /** Since 0.10.0: the same counters per requested site. */
1599
+ bySite: import("convex/values").VArray<{
1600
+ currencyMismatch?: boolean | undefined;
1601
+ leads: number;
1602
+ paid: {
1603
+ leads: number;
1604
+ qualified: number;
1605
+ revenueCents: number;
1606
+ won: number;
1607
+ };
1608
+ qualified: number;
1609
+ revenueCents: number;
1610
+ siteId: string;
1611
+ spendCents?: number | null | undefined;
1612
+ spendCurrency?: string | null | undefined;
1613
+ won: number;
1614
+ }[] | undefined, import("convex/values").VObject<{
1615
+ currencyMismatch?: boolean | undefined;
1616
+ leads: number;
1617
+ paid: {
1618
+ leads: number;
1619
+ qualified: number;
1620
+ revenueCents: number;
1621
+ won: number;
1622
+ };
1623
+ qualified: number;
1624
+ revenueCents: number;
1625
+ siteId: string;
1626
+ spendCents?: number | null | undefined;
1627
+ spendCurrency?: string | null | undefined;
1628
+ won: number;
1629
+ }, {
1630
+ leads: import("convex/values").VFloat64<number, "required">;
1631
+ qualified: import("convex/values").VFloat64<number, "required">;
1632
+ won: import("convex/values").VFloat64<number, "required">;
1633
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1634
+ siteId: import("convex/values").VString<string, "required">;
1635
+ /**
1636
+ * The site's leads that came from an ad (origin `ctwa_ad`): what spend buys,
1637
+ * so cost per lead and return use these and never the organic leads.
1638
+ */
1639
+ paid: import("convex/values").VObject<{
1640
+ leads: number;
1641
+ qualified: number;
1642
+ revenueCents: number;
1643
+ won: number;
1644
+ }, {
1645
+ leads: import("convex/values").VFloat64<number, "required">;
1646
+ qualified: import("convex/values").VFloat64<number, "required">;
1647
+ won: import("convex/values").VFloat64<number, "required">;
1648
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1649
+ }, "required", "leads" | "qualified" | "revenueCents" | "won">;
1650
+ spendCents: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1651
+ /** The site's synced ad accounts' currency; null without one or with two. */
1652
+ spendCurrency: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1653
+ /**
1654
+ * True when the site's spend is not comparable with its revenue: an account
1655
+ * bills in another currency than the site's, or its accounts in two (its
1656
+ * spend is then null).
1657
+ */
1658
+ currencyMismatch: import("convex/values").VBoolean<boolean | undefined, "optional">;
1659
+ }, "required", "currencyMismatch" | "leads" | "paid" | "paid.leads" | "paid.qualified" | "paid.revenueCents" | "paid.won" | "qualified" | "revenueCents" | "siteId" | "spendCents" | "spendCurrency" | "won">, "optional">;
1660
+ /** Since 0.10.0: the linked ad accounts' currency, null without spend. */
1661
+ spendCurrency: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1662
+ /**
1663
+ * Since 0.10.0: true when an ad account bills in another currency than the
1664
+ * site's revenue; spend is then not comparable with revenue.
1665
+ */
1666
+ currencyMismatch: import("convex/values").VBoolean<boolean | undefined, "optional">;
1667
+ /**
1668
+ * True when the spend rows ran past their read budget: the campaign tree's
1669
+ * spend (or, rarer, all spend) is then null. Leads and revenue stay exact.
1670
+ */
1671
+ spendIncomplete: import("convex/values").VBoolean<boolean | undefined, "optional">;
1672
+ }, "required", "bySite" | "campaigns" | "currency" | "currencyMismatch" | "from" | "origins" | "spendCurrency" | "spendIncomplete" | "to" | "totals" | "totals.clicks" | "totals.impressions" | "totals.leads" | "totals.qualified" | "totals.revenueCents" | "totals.spendCents" | "totals.won">;
1673
+ /** One cohort day of the lead funnel, with that day's spend (since 0.10.0). */
1674
+ export declare const leadsDailyValidator: import("convex/values").VArray<{
1675
+ dayStart: number;
1676
+ leads: number;
1677
+ qualified: number;
1678
+ revenueCents: number;
1679
+ spendCents: number | null;
1680
+ won: number;
1681
+ }[], import("convex/values").VObject<{
1682
+ dayStart: number;
1683
+ leads: number;
1684
+ qualified: number;
1685
+ revenueCents: number;
1686
+ spendCents: number | null;
1687
+ won: number;
1688
+ }, {
1689
+ leads: import("convex/values").VFloat64<number, "required">;
1690
+ qualified: import("convex/values").VFloat64<number, "required">;
1691
+ won: import("convex/values").VFloat64<number, "required">;
1692
+ revenueCents: import("convex/values").VFloat64<number, "required">;
1693
+ dayStart: import("convex/values").VFloat64<number, "required">;
1694
+ spendCents: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1695
+ }, "required", "dayStart" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
1696
+ /** Where a site stands with Meta (since 0.10.0). Never carries a token. */
1697
+ export declare const metaStatusValidator: import("convex/values").VArray<{
1698
+ adAccounts: {
1699
+ adAccountId: string;
1700
+ backfill?: {
1701
+ done: number;
1702
+ total: number;
1703
+ } | null | undefined;
1704
+ currency: string;
1705
+ lastError: string | null;
1706
+ lastSyncAt: number | null;
1707
+ name: string;
1708
+ own?: boolean | undefined;
1709
+ syncState: "backfill" | "error" | "live";
1710
+ timezone: string;
1711
+ }[];
1712
+ conversions: {
1713
+ failed: number;
1714
+ last30d?: {
1715
+ Lead: number;
1716
+ Purchase: number;
1717
+ QualifiedLead: number;
1718
+ Schedule: number;
1719
+ } | null | undefined;
1720
+ pending: number;
1721
+ sent: number;
1722
+ sentToday?: number | null | undefined;
1723
+ };
1724
+ linked: boolean;
1725
+ pixel: {
1726
+ enabled: boolean;
1727
+ lastError?: string | null | undefined;
1728
+ name?: string | null | undefined;
1729
+ own?: boolean | undefined;
1730
+ pixelId: string | null;
1731
+ source?: "connection" | "token" | null | undefined;
1732
+ testMode?: boolean | undefined;
1733
+ };
1734
+ siteId: string;
1735
+ }[], import("convex/values").VObject<{
1736
+ adAccounts: {
1737
+ adAccountId: string;
1738
+ backfill?: {
1739
+ done: number;
1740
+ total: number;
1741
+ } | null | undefined;
1742
+ currency: string;
1743
+ lastError: string | null;
1744
+ lastSyncAt: number | null;
1745
+ name: string;
1746
+ own?: boolean | undefined;
1747
+ syncState: "backfill" | "error" | "live";
1748
+ timezone: string;
1749
+ }[];
1750
+ conversions: {
1751
+ failed: number;
1752
+ last30d?: {
1753
+ Lead: number;
1754
+ Purchase: number;
1755
+ QualifiedLead: number;
1756
+ Schedule: number;
1757
+ } | null | undefined;
1758
+ pending: number;
1759
+ sent: number;
1760
+ sentToday?: number | null | undefined;
1761
+ };
1762
+ linked: boolean;
1763
+ pixel: {
1764
+ enabled: boolean;
1765
+ lastError?: string | null | undefined;
1766
+ name?: string | null | undefined;
1767
+ own?: boolean | undefined;
1768
+ pixelId: string | null;
1769
+ source?: "connection" | "token" | null | undefined;
1770
+ testMode?: boolean | undefined;
1771
+ };
1772
+ siteId: string;
1773
+ }, {
1774
+ siteId: import("convex/values").VString<string, "required">;
1775
+ linked: import("convex/values").VBoolean<boolean, "required">;
1776
+ adAccounts: import("convex/values").VArray<{
1777
+ adAccountId: string;
1778
+ backfill?: {
1779
+ done: number;
1780
+ total: number;
1781
+ } | null | undefined;
1782
+ currency: string;
1783
+ lastError: string | null;
1784
+ lastSyncAt: number | null;
1785
+ name: string;
1786
+ own?: boolean | undefined;
1787
+ syncState: "backfill" | "error" | "live";
1788
+ timezone: string;
1789
+ }[], import("convex/values").VObject<{
1790
+ adAccountId: string;
1791
+ backfill?: {
1792
+ done: number;
1793
+ total: number;
1794
+ } | null | undefined;
1795
+ currency: string;
1796
+ lastError: string | null;
1797
+ lastSyncAt: number | null;
1798
+ name: string;
1799
+ own?: boolean | undefined;
1800
+ syncState: "backfill" | "error" | "live";
1801
+ timezone: string;
1802
+ }, {
1803
+ adAccountId: import("convex/values").VString<string, "required">;
1804
+ name: import("convex/values").VString<string, "required">;
1805
+ currency: import("convex/values").VString<string, "required">;
1806
+ timezone: import("convex/values").VString<string, "required">;
1807
+ syncState: import("convex/values").VUnion<"backfill" | "error" | "live", [import("convex/values").VLiteral<"backfill", "required">, import("convex/values").VLiteral<"live", "required">, import("convex/values").VLiteral<"error", "required">], "required", never>;
1808
+ lastSyncAt: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1809
+ lastError: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1810
+ /** Asked with an owner: whether that owner made this link. */
1811
+ own: import("convex/values").VBoolean<boolean | undefined, "optional">;
1812
+ /**
1813
+ * The first backfill's 30-day blocks read (`done`) of `total` (3 for
1814
+ * 90 days); null once the account is live. Optional for older hosts.
1815
+ */
1816
+ backfill: import("convex/values").VUnion<{
1817
+ done: number;
1818
+ total: number;
1819
+ } | null | undefined, [import("convex/values").VObject<{
1820
+ done: number;
1821
+ total: number;
1822
+ }, {
1823
+ done: import("convex/values").VFloat64<number, "required">;
1824
+ total: import("convex/values").VFloat64<number, "required">;
1825
+ }, "required", "done" | "total">, import("convex/values").VNull<null, "required">], "optional", "done" | "total">;
1826
+ }, "required", "adAccountId" | "backfill" | "backfill.done" | "backfill.total" | "currency" | "lastError" | "lastSyncAt" | "name" | "own" | "syncState" | "timezone">, "required">;
1827
+ pixel: import("convex/values").VObject<{
1828
+ enabled: boolean;
1829
+ lastError?: string | null | undefined;
1830
+ name?: string | null | undefined;
1831
+ own?: boolean | undefined;
1832
+ pixelId: string | null;
1833
+ source?: "connection" | "token" | null | undefined;
1834
+ testMode?: boolean | undefined;
1835
+ }, {
1836
+ enabled: import("convex/values").VBoolean<boolean, "required">;
1837
+ pixelId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1838
+ source: import("convex/values").VUnion<"connection" | "token" | null | undefined, [import("convex/values").VUnion<"connection" | "token", [import("convex/values").VLiteral<"connection", "required">, import("convex/values").VLiteral<"token", "required">], "required", never>, import("convex/values").VNull<null, "required">], "optional", never>;
1839
+ name: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1840
+ lastError: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1841
+ /** Asked with an owner: whether that owner set the pixel. */
1842
+ own: import("convex/values").VBoolean<boolean | undefined, "optional">;
1843
+ /**
1844
+ * A `testEventCode` is set: the pixel's events go to Events Manager's
1845
+ * Test Events only, never to the ads. Optional for older hosts.
1846
+ */
1847
+ testMode: import("convex/values").VBoolean<boolean | undefined, "optional">;
1848
+ }, "required", "enabled" | "lastError" | "name" | "own" | "pixelId" | "source" | "testMode">;
1849
+ conversions: import("convex/values").VObject<{
1850
+ failed: number;
1851
+ last30d?: {
1852
+ Lead: number;
1853
+ Purchase: number;
1854
+ QualifiedLead: number;
1855
+ Schedule: number;
1856
+ } | null | undefined;
1857
+ pending: number;
1858
+ sent: number;
1859
+ sentToday?: number | null | undefined;
1860
+ }, {
1861
+ pending: import("convex/values").VFloat64<number, "required">;
1862
+ sent: import("convex/values").VFloat64<number, "required">;
1863
+ failed: import("convex/values").VFloat64<number, "required">;
1864
+ /**
1865
+ * Accepted by Meta in the last 30 UTC days, by event, and today. Null
1866
+ * unless the reader passed `now`; optional for older hosts.
1867
+ */
1868
+ last30d: import("convex/values").VUnion<{
1869
+ Lead: number;
1870
+ Purchase: number;
1871
+ QualifiedLead: number;
1872
+ Schedule: number;
1873
+ } | null | undefined, [import("convex/values").VObject<{
1874
+ Lead: number;
1875
+ Purchase: number;
1876
+ QualifiedLead: number;
1877
+ Schedule: number;
1878
+ }, {
1879
+ Purchase: import("convex/values").VFloat64<number, "required">;
1880
+ QualifiedLead: import("convex/values").VFloat64<number, "required">;
1881
+ Lead: import("convex/values").VFloat64<number, "required">;
1882
+ Schedule: import("convex/values").VFloat64<number, "required">;
1883
+ }, "required", "Lead" | "Purchase" | "QualifiedLead" | "Schedule">, import("convex/values").VNull<null, "required">], "optional", "Lead" | "Purchase" | "QualifiedLead" | "Schedule">;
1884
+ sentToday: import("convex/values").VUnion<number | null | undefined, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "optional", never>;
1885
+ }, "required", "failed" | "last30d" | "last30d.Lead" | "last30d.Purchase" | "last30d.QualifiedLead" | "last30d.Schedule" | "pending" | "sent" | "sentToday">;
1886
+ }, "required", "adAccounts" | "conversions" | "conversions.failed" | "conversions.last30d" | "conversions.last30d.Lead" | "conversions.last30d.Purchase" | "conversions.last30d.QualifiedLead" | "conversions.last30d.Schedule" | "conversions.pending" | "conversions.sent" | "conversions.sentToday" | "linked" | "pixel" | "pixel.enabled" | "pixel.lastError" | "pixel.name" | "pixel.own" | "pixel.pixelId" | "pixel.source" | "pixel.testMode" | "siteId">, "required">;
1887
+ export declare const metaConversionEventNameValidator: import("convex/values").VUnion<"Lead" | "Purchase" | "QualifiedLead" | "Schedule", [import("convex/values").VLiteral<"Lead", "required">, import("convex/values").VLiteral<"QualifiedLead", "required">, import("convex/values").VLiteral<"Schedule", "required">, import("convex/values").VLiteral<"Purchase", "required">], "required", never>;
1888
+ /**
1889
+ * What the host knows of the person behind a lead, every value already a
1890
+ * SHA-256 hex digest: `ph` the normalized phone numbers, `externalId` the
1891
+ * host's own id for the contact. Kept only until the conversion is sent.
1892
+ */
1893
+ export declare const metaUserDataValidator: import("convex/values").VObject<{
1894
+ externalId?: string | undefined;
1895
+ ph: string[];
1896
+ }, {
1897
+ ph: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
1898
+ externalId: import("convex/values").VString<string | undefined, "optional">;
1899
+ }, "required", "externalId" | "ph">;
1900
+ /** A conversion sent (or queued) to the site's Meta pixel. No user data. */
1901
+ export declare const metaConversionValidator: import("convex/values").VObject<{
1902
+ adId: string | null;
1903
+ adName: string | null;
1904
+ createdAt: number;
1905
+ eventId: string;
1906
+ eventName: "Lead" | "Purchase" | "QualifiedLead" | "Schedule";
1907
+ leadId: string | null;
1908
+ leadLabel: string | null;
1909
+ sentAt: number | null;
1910
+ status: "failed" | "pending" | "sent";
1911
+ valueCents: number | null;
1912
+ }, {
1913
+ eventId: import("convex/values").VString<string, "required">;
1914
+ eventName: import("convex/values").VUnion<"Lead" | "Purchase" | "QualifiedLead" | "Schedule", [import("convex/values").VLiteral<"Lead", "required">, import("convex/values").VLiteral<"QualifiedLead", "required">, import("convex/values").VLiteral<"Schedule", "required">, import("convex/values").VLiteral<"Purchase", "required">], "required", never>;
1915
+ /** The lead the conversion reports, so a journey can show it was sent. */
1916
+ leadId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1917
+ leadLabel: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1918
+ adId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1919
+ /** The ad's name from the catalog, when the sync or the host named it. */
1920
+ adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1921
+ valueCents: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1922
+ status: import("convex/values").VUnion<"failed" | "pending" | "sent", [import("convex/values").VLiteral<"pending", "required">, import("convex/values").VLiteral<"sent", "required">, import("convex/values").VLiteral<"failed", "required">], "required", never>;
1923
+ createdAt: import("convex/values").VFloat64<number, "required">;
1924
+ sentAt: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1925
+ }, "required", "adId" | "adName" | "createdAt" | "eventId" | "eventName" | "leadId" | "leadLabel" | "sentAt" | "status" | "valueCents">;
1112
1926
  export declare const leadSummaryValidator: import("convex/values").VObject<{
1113
1927
  adId: string | null;
1114
1928
  channel: "whatsapp";
@@ -1272,4 +2086,227 @@ export declare const leadJourneyValidator: import("convex/values").VUnion<{
1272
2086
  revenueCents: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1273
2087
  }, "required", "at" | "revenueCents" | "type">, "required">;
1274
2088
  }, "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">;
2089
+ /**
2090
+ * The events a board column may send to Meta. `Purchase` never comes from a
2091
+ * column: it goes when the host records the sale (`won` with a value).
2092
+ */
2093
+ export declare const metaColumnEventValidator: import("convex/values").VUnion<"Lead" | "QualifiedLead" | "Schedule", [import("convex/values").VLiteral<"Lead", "required">, import("convex/values").VLiteral<"QualifiedLead", "required">, import("convex/values").VLiteral<"Schedule", "required">], "required", never>;
2094
+ /** One column of the host's board, as `setPipeline` declares it. */
2095
+ export declare const pipelineColumnValidator: import("convex/values").VObject<{
2096
+ color?: string | undefined;
2097
+ group?: string | undefined;
2098
+ key: string;
2099
+ name: string;
2100
+ }, {
2101
+ key: import("convex/values").VString<string, "required">;
2102
+ name: import("convex/values").VString<string, "required">;
2103
+ color: import("convex/values").VString<string | undefined, "optional">;
2104
+ /** The block the board shows the column in, such as "Prospecção". */
2105
+ group: import("convex/values").VString<string | undefined, "optional">;
2106
+ }, "required", "color" | "group" | "key" | "name">;
2107
+ /** A connection as a screen shows it. Never a token. */
2108
+ export declare const metaConnectionValidator: import("convex/values").VUnion<{
2109
+ adAccounts: {
2110
+ adAccountId: string;
2111
+ currency: string;
2112
+ linkedOutsideScope?: boolean | undefined;
2113
+ linkedSiteId: string | null;
2114
+ name: string;
2115
+ timezone: string;
2116
+ }[];
2117
+ authorizedAt: number | null;
2118
+ authorizedBy: {
2119
+ name: string | null;
2120
+ } | null;
2121
+ businessName: string | null;
2122
+ expiresAt: number | null;
2123
+ expiringSoon: boolean;
2124
+ invalidSince: number | null;
2125
+ lastError: string | null;
2126
+ pixels: {
2127
+ name: string;
2128
+ pixelId: string;
2129
+ }[];
2130
+ status: "active" | "invalid";
2131
+ } | null, [import("convex/values").VNull<null, "required">, import("convex/values").VObject<{
2132
+ adAccounts: {
2133
+ adAccountId: string;
2134
+ currency: string;
2135
+ linkedOutsideScope?: boolean | undefined;
2136
+ linkedSiteId: string | null;
2137
+ name: string;
2138
+ timezone: string;
2139
+ }[];
2140
+ authorizedAt: number | null;
2141
+ authorizedBy: {
2142
+ name: string | null;
2143
+ } | null;
2144
+ businessName: string | null;
2145
+ expiresAt: number | null;
2146
+ expiringSoon: boolean;
2147
+ invalidSince: number | null;
2148
+ lastError: string | null;
2149
+ pixels: {
2150
+ name: string;
2151
+ pixelId: string;
2152
+ }[];
2153
+ status: "active" | "invalid";
2154
+ }, {
2155
+ status: import("convex/values").VUnion<"active" | "invalid", [import("convex/values").VLiteral<"active", "required">, import("convex/values").VLiteral<"invalid", "required">], "required", never>;
2156
+ businessName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2157
+ authorizedBy: import("convex/values").VUnion<{
2158
+ name: string | null;
2159
+ } | null, [import("convex/values").VObject<{
2160
+ name: string | null;
2161
+ }, {
2162
+ name: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2163
+ }, "required", "name">, import("convex/values").VNull<null, "required">], "required", "name">;
2164
+ authorizedAt: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2165
+ invalidSince: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2166
+ lastError: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2167
+ /** When the token expires; null when it never does (or is not known). */
2168
+ expiresAt: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2169
+ /** Fewer than 7 days left: the screen asks for a new login. */
2170
+ expiringSoon: import("convex/values").VBoolean<boolean, "required">;
2171
+ adAccounts: import("convex/values").VArray<{
2172
+ adAccountId: string;
2173
+ currency: string;
2174
+ linkedOutsideScope?: boolean | undefined;
2175
+ linkedSiteId: string | null;
2176
+ name: string;
2177
+ timezone: string;
2178
+ }[], import("convex/values").VObject<{
2179
+ adAccountId: string;
2180
+ currency: string;
2181
+ linkedOutsideScope?: boolean | undefined;
2182
+ linkedSiteId: string | null;
2183
+ name: string;
2184
+ timezone: string;
2185
+ }, {
2186
+ adAccountId: import("convex/values").VString<string, "required">;
2187
+ name: import("convex/values").VString<string, "required">;
2188
+ currency: import("convex/values").VString<string, "required">;
2189
+ timezone: import("convex/values").VString<string, "required">;
2190
+ /** The site the account feeds, whoever linked it; null when free. */
2191
+ linkedSiteId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2192
+ /**
2193
+ * Federated reads only: the account feeds a site outside the
2194
+ * caller's grant, whose id is withheld (`linkedSiteId` is null).
2195
+ */
2196
+ linkedOutsideScope: import("convex/values").VBoolean<boolean | undefined, "optional">;
2197
+ }, "required", "adAccountId" | "currency" | "linkedOutsideScope" | "linkedSiteId" | "name" | "timezone">, "required">;
2198
+ pixels: import("convex/values").VArray<{
2199
+ name: string;
2200
+ pixelId: string;
2201
+ }[], import("convex/values").VObject<{
2202
+ name: string;
2203
+ pixelId: string;
2204
+ }, {
2205
+ pixelId: import("convex/values").VString<string, "required">;
2206
+ name: import("convex/values").VString<string, "required">;
2207
+ }, "required", "name" | "pixelId">, "required">;
2208
+ }, "required", "adAccounts" | "authorizedAt" | "authorizedBy" | "authorizedBy.name" | "businessName" | "expiresAt" | "expiringSoon" | "invalidSince" | "lastError" | "pixels" | "status">], "required", "adAccounts" | "authorizedAt" | "authorizedBy" | "authorizedBy.name" | "businessName" | "expiresAt" | "expiringSoon" | "invalidSince" | "lastError" | "pixels" | "status">;
2209
+ export declare const metaEventMapValidator: import("convex/values").VObject<{
2210
+ columns: {
2211
+ color: string | null;
2212
+ event: "Lead" | "QualifiedLead" | "Schedule" | null;
2213
+ group: string | null;
2214
+ key: string;
2215
+ monthCount: number | null;
2216
+ name: string;
2217
+ }[];
2218
+ purchase: {
2219
+ enabled: boolean;
2220
+ };
2221
+ sendLeadEvent: boolean;
2222
+ }, {
2223
+ columns: import("convex/values").VArray<{
2224
+ color: string | null;
2225
+ event: "Lead" | "QualifiedLead" | "Schedule" | null;
2226
+ group: string | null;
2227
+ key: string;
2228
+ monthCount: number | null;
2229
+ name: string;
2230
+ }[], import("convex/values").VObject<{
2231
+ color: string | null;
2232
+ event: "Lead" | "QualifiedLead" | "Schedule" | null;
2233
+ group: string | null;
2234
+ key: string;
2235
+ monthCount: number | null;
2236
+ name: string;
2237
+ }, {
2238
+ key: import("convex/values").VString<string, "required">;
2239
+ name: import("convex/values").VString<string, "required">;
2240
+ color: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2241
+ group: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2242
+ event: import("convex/values").VUnion<"Lead" | "QualifiedLead" | "Schedule" | null, [import("convex/values").VUnion<"Lead" | "QualifiedLead" | "Schedule", [import("convex/values").VLiteral<"Lead", "required">, import("convex/values").VLiteral<"QualifiedLead", "required">, import("convex/values").VLiteral<"Schedule", "required">], "required", never>, import("convex/values").VNull<null, "required">], "required", never>;
2243
+ /** Leads that entered the column in the 30 days before `now`. */
2244
+ monthCount: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2245
+ }, "required", "color" | "event" | "group" | "key" | "monthCount" | "name">, "required">;
2246
+ sendLeadEvent: import("convex/values").VBoolean<boolean, "required">;
2247
+ purchase: import("convex/values").VObject<{
2248
+ enabled: boolean;
2249
+ }, {
2250
+ enabled: import("convex/values").VBoolean<boolean, "required">;
2251
+ }, "required", "enabled">;
2252
+ }, "required", "columns" | "purchase" | "purchase.enabled" | "sendLeadEvent">;
2253
+ export declare const metaUnlinkPreviewValidator: import("convex/values").VObject<{
2254
+ campaigns: number;
2255
+ currency: string;
2256
+ days: number;
2257
+ partial: boolean;
2258
+ spendCents: number;
2259
+ }, {
2260
+ spendCents: import("convex/values").VFloat64<number, "required">;
2261
+ currency: import("convex/values").VString<string, "required">;
2262
+ /** Days from the account's first to its last day with spend, inclusive. */
2263
+ days: import("convex/values").VFloat64<number, "required">;
2264
+ campaigns: import("convex/values").VFloat64<number, "required">;
2265
+ /** A read cap was hit: the figures are at least these. */
2266
+ partial: import("convex/values").VBoolean<boolean, "required">;
2267
+ }, "required", "campaigns" | "currency" | "days" | "partial" | "spendCents">;
2268
+ /** What connecting a Meta token answers: its accounts and their pixels. */
2269
+ export declare const metaConnectResultValidator: import("convex/values").VObject<{
2270
+ adAccounts: {
2271
+ adAccountId: string;
2272
+ currency: string;
2273
+ name: string;
2274
+ timezone: string;
2275
+ }[];
2276
+ businessName: string | null;
2277
+ connectionId: string;
2278
+ pixels: {
2279
+ name: string;
2280
+ pixelId: string;
2281
+ }[];
2282
+ }, {
2283
+ connectionId: import("convex/values").VString<string, "required">;
2284
+ businessName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2285
+ adAccounts: import("convex/values").VArray<{
2286
+ adAccountId: string;
2287
+ currency: string;
2288
+ name: string;
2289
+ timezone: string;
2290
+ }[], import("convex/values").VObject<{
2291
+ adAccountId: string;
2292
+ currency: string;
2293
+ name: string;
2294
+ timezone: string;
2295
+ }, {
2296
+ adAccountId: import("convex/values").VString<string, "required">;
2297
+ name: import("convex/values").VString<string, "required">;
2298
+ currency: import("convex/values").VString<string, "required">;
2299
+ timezone: import("convex/values").VString<string, "required">;
2300
+ }, "required", "adAccountId" | "currency" | "name" | "timezone">, "required">;
2301
+ pixels: import("convex/values").VArray<{
2302
+ name: string;
2303
+ pixelId: string;
2304
+ }[], import("convex/values").VObject<{
2305
+ name: string;
2306
+ pixelId: string;
2307
+ }, {
2308
+ pixelId: import("convex/values").VString<string, "required">;
2309
+ name: import("convex/values").VString<string, "required">;
2310
+ }, "required", "name" | "pixelId">, "required">;
2311
+ }, "required", "adAccounts" | "businessName" | "connectionId" | "pixels">;
1275
2312
  //# sourceMappingURL=validators.d.ts.map