@iann29/rastro 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) 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 +641 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +385 -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 +280 -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/ingest.d.ts.map +1 -1
  31. package/dist/component/ingest.js +5 -2
  32. package/dist/component/ingest.js.map +1 -1
  33. package/dist/component/leads.d.ts +69 -3
  34. package/dist/component/leads.d.ts.map +1 -1
  35. package/dist/component/leads.js +419 -16
  36. package/dist/component/leads.js.map +1 -1
  37. package/dist/component/meta.d.ts +352 -0
  38. package/dist/component/meta.d.ts.map +1 -0
  39. package/dist/component/meta.js +1239 -0
  40. package/dist/component/meta.js.map +1 -0
  41. package/dist/component/metaCapi.d.ts +162 -0
  42. package/dist/component/metaCapi.d.ts.map +1 -0
  43. package/dist/component/metaCapi.js +754 -0
  44. package/dist/component/metaCapi.js.map +1 -0
  45. package/dist/component/metaFake.d.ts +5 -0
  46. package/dist/component/metaFake.d.ts.map +1 -0
  47. package/dist/component/metaFake.js +225 -0
  48. package/dist/component/metaFake.js.map +1 -0
  49. package/dist/component/metaGraph.d.ts +165 -0
  50. package/dist/component/metaGraph.d.ts.map +1 -0
  51. package/dist/component/metaGraph.js +507 -0
  52. package/dist/component/metaGraph.js.map +1 -0
  53. package/dist/component/metaSync.d.ts +186 -0
  54. package/dist/component/metaSync.d.ts.map +1 -0
  55. package/dist/component/metaSync.js +961 -0
  56. package/dist/component/metaSync.js.map +1 -0
  57. package/dist/component/pipeline.d.ts +98 -0
  58. package/dist/component/pipeline.d.ts.map +1 -0
  59. package/dist/component/pipeline.js +324 -0
  60. package/dist/component/pipeline.js.map +1 -0
  61. package/dist/component/sanitize.d.ts +8 -0
  62. package/dist/component/sanitize.d.ts.map +1 -1
  63. package/dist/component/sanitize.js +36 -0
  64. package/dist/component/sanitize.js.map +1 -1
  65. package/dist/component/schema.d.ts +407 -3
  66. package/dist/component/schema.d.ts.map +1 -1
  67. package/dist/component/schema.js +168 -2
  68. package/dist/component/schema.js.map +1 -1
  69. package/dist/component/secrets.d.ts +15 -0
  70. package/dist/component/secrets.d.ts.map +1 -0
  71. package/dist/component/secrets.js +67 -0
  72. package/dist/component/secrets.js.map +1 -0
  73. package/dist/component/sites.d.ts +3 -0
  74. package/dist/component/sites.d.ts.map +1 -1
  75. package/dist/component/sites.js +7 -1
  76. package/dist/component/sites.js.map +1 -1
  77. package/dist/component/validators.d.ts +1060 -16
  78. package/dist/component/validators.d.ts.map +1 -1
  79. package/dist/component/validators.js +313 -3
  80. package/dist/component/validators.js.map +1 -1
  81. package/dist/tracker/generated.d.ts +1 -1
  82. package/dist/tracker/generated.d.ts.map +1 -1
  83. package/dist/tracker/generated.js +1 -1
  84. package/dist/tracker/generated.js.map +1 -1
  85. package/dist/ui/campaigns/CampaignsView.d.ts +48 -0
  86. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -0
  87. package/dist/ui/campaigns/CampaignsView.js +47 -0
  88. package/dist/ui/campaigns/CampaignsView.js.map +1 -0
  89. package/dist/ui/campaigns/Conversions.d.ts +16 -0
  90. package/dist/ui/campaigns/Conversions.d.ts.map +1 -0
  91. package/dist/ui/campaigns/Conversions.js +40 -0
  92. package/dist/ui/campaigns/Conversions.js.map +1 -0
  93. package/dist/ui/campaigns/Drawer.d.ts +24 -0
  94. package/dist/ui/campaigns/Drawer.d.ts.map +1 -0
  95. package/dist/ui/campaigns/Drawer.js +120 -0
  96. package/dist/ui/campaigns/Drawer.js.map +1 -0
  97. package/dist/ui/campaigns/Icons.d.ts +35 -0
  98. package/dist/ui/campaigns/Icons.d.ts.map +1 -0
  99. package/dist/ui/campaigns/Icons.js +41 -0
  100. package/dist/ui/campaigns/Icons.js.map +1 -0
  101. package/dist/ui/campaigns/Summary.d.ts +21 -0
  102. package/dist/ui/campaigns/Summary.d.ts.map +1 -0
  103. package/dist/ui/campaigns/Summary.js +56 -0
  104. package/dist/ui/campaigns/Summary.js.map +1 -0
  105. package/dist/ui/campaigns/Thumbnail.d.ts +11 -0
  106. package/dist/ui/campaigns/Thumbnail.d.ts.map +1 -0
  107. package/dist/ui/campaigns/Thumbnail.js +23 -0
  108. package/dist/ui/campaigns/Thumbnail.js.map +1 -0
  109. package/dist/ui/campaigns/Tree.d.ts +12 -0
  110. package/dist/ui/campaigns/Tree.d.ts.map +1 -0
  111. package/dist/ui/campaigns/Tree.js +105 -0
  112. package/dist/ui/campaigns/Tree.js.map +1 -0
  113. package/dist/ui/campaigns/glyphs.d.ts +20 -0
  114. package/dist/ui/campaigns/glyphs.d.ts.map +1 -0
  115. package/dist/ui/campaigns/glyphs.js +19 -0
  116. package/dist/ui/campaigns/glyphs.js.map +1 -0
  117. package/dist/ui/campaigns/index.d.ts +4 -0
  118. package/dist/ui/campaigns/index.d.ts.map +1 -0
  119. package/dist/ui/campaigns/index.js +3 -0
  120. package/dist/ui/campaigns/index.js.map +1 -0
  121. package/dist/ui/campaigns/labels.d.ts +53 -0
  122. package/dist/ui/campaigns/labels.d.ts.map +1 -0
  123. package/dist/ui/campaigns/labels.js +169 -0
  124. package/dist/ui/campaigns/labels.js.map +1 -0
  125. package/dist/ui/campaigns/model.d.ts +99 -0
  126. package/dist/ui/campaigns/model.d.ts.map +1 -0
  127. package/dist/ui/campaigns/model.js +230 -0
  128. package/dist/ui/campaigns/model.js.map +1 -0
  129. package/dist/ui/campaigns/modes.d.ts +18 -0
  130. package/dist/ui/campaigns/modes.d.ts.map +1 -0
  131. package/dist/ui/campaigns/modes.js +7 -0
  132. package/dist/ui/campaigns/modes.js.map +1 -0
  133. package/dist/ui/index.d.ts +21 -0
  134. package/dist/ui/index.d.ts.map +1 -0
  135. package/dist/ui/index.js +19 -0
  136. package/dist/ui/index.js.map +1 -0
  137. package/dist/ui/integrations/AccountPicker.d.ts +26 -0
  138. package/dist/ui/integrations/AccountPicker.d.ts.map +1 -0
  139. package/dist/ui/integrations/AccountPicker.js +97 -0
  140. package/dist/ui/integrations/AccountPicker.js.map +1 -0
  141. package/dist/ui/integrations/ClientCards.d.ts +17 -0
  142. package/dist/ui/integrations/ClientCards.d.ts.map +1 -0
  143. package/dist/ui/integrations/ClientCards.js +38 -0
  144. package/dist/ui/integrations/ClientCards.js.map +1 -0
  145. package/dist/ui/integrations/ClientsTable.d.ts +36 -0
  146. package/dist/ui/integrations/ClientsTable.d.ts.map +1 -0
  147. package/dist/ui/integrations/ClientsTable.js +127 -0
  148. package/dist/ui/integrations/ClientsTable.js.map +1 -0
  149. package/dist/ui/integrations/Connect.d.ts +29 -0
  150. package/dist/ui/integrations/Connect.d.ts.map +1 -0
  151. package/dist/ui/integrations/Connect.js +49 -0
  152. package/dist/ui/integrations/Connect.js.map +1 -0
  153. package/dist/ui/integrations/Connection.d.ts +37 -0
  154. package/dist/ui/integrations/Connection.d.ts.map +1 -0
  155. package/dist/ui/integrations/Connection.js +94 -0
  156. package/dist/ui/integrations/Connection.js.map +1 -0
  157. package/dist/ui/integrations/Dialogs.d.ts +18 -0
  158. package/dist/ui/integrations/Dialogs.d.ts.map +1 -0
  159. package/dist/ui/integrations/Dialogs.js +25 -0
  160. package/dist/ui/integrations/Dialogs.js.map +1 -0
  161. package/dist/ui/integrations/EventsFeed.d.ts +15 -0
  162. package/dist/ui/integrations/EventsFeed.d.ts.map +1 -0
  163. package/dist/ui/integrations/EventsFeed.js +57 -0
  164. package/dist/ui/integrations/EventsFeed.js.map +1 -0
  165. package/dist/ui/integrations/EventsSheet.d.ts +28 -0
  166. package/dist/ui/integrations/EventsSheet.d.ts.map +1 -0
  167. package/dist/ui/integrations/EventsSheet.js +121 -0
  168. package/dist/ui/integrations/EventsSheet.js.map +1 -0
  169. package/dist/ui/integrations/Icons.d.ts +36 -0
  170. package/dist/ui/integrations/Icons.d.ts.map +1 -0
  171. package/dist/ui/integrations/Icons.js +38 -0
  172. package/dist/ui/integrations/Icons.js.map +1 -0
  173. package/dist/ui/integrations/IntegrationsView.d.ts +14 -0
  174. package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -0
  175. package/dist/ui/integrations/IntegrationsView.js +113 -0
  176. package/dist/ui/integrations/IntegrationsView.js.map +1 -0
  177. package/dist/ui/integrations/Overlay.d.ts +18 -0
  178. package/dist/ui/integrations/Overlay.d.ts.map +1 -0
  179. package/dist/ui/integrations/Overlay.js +36 -0
  180. package/dist/ui/integrations/Overlay.js.map +1 -0
  181. package/dist/ui/integrations/RowMenu.d.ts +15 -0
  182. package/dist/ui/integrations/RowMenu.d.ts.map +1 -0
  183. package/dist/ui/integrations/RowMenu.js +47 -0
  184. package/dist/ui/integrations/RowMenu.js.map +1 -0
  185. package/dist/ui/integrations/UnlinkDialog.d.ts +18 -0
  186. package/dist/ui/integrations/UnlinkDialog.d.ts.map +1 -0
  187. package/dist/ui/integrations/UnlinkDialog.js +29 -0
  188. package/dist/ui/integrations/UnlinkDialog.js.map +1 -0
  189. package/dist/ui/integrations/format.d.ts +28 -0
  190. package/dist/ui/integrations/format.d.ts.map +1 -0
  191. package/dist/ui/integrations/format.js +101 -0
  192. package/dist/ui/integrations/format.js.map +1 -0
  193. package/dist/ui/integrations/index.d.ts +5 -0
  194. package/dist/ui/integrations/index.d.ts.map +1 -0
  195. package/dist/ui/integrations/index.js +3 -0
  196. package/dist/ui/integrations/index.js.map +1 -0
  197. package/dist/ui/integrations/model.d.ts +84 -0
  198. package/dist/ui/integrations/model.d.ts.map +1 -0
  199. package/dist/ui/integrations/model.js +131 -0
  200. package/dist/ui/integrations/model.js.map +1 -0
  201. package/dist/ui/integrations/overlay.d.ts +10 -0
  202. package/dist/ui/integrations/overlay.d.ts.map +1 -0
  203. package/dist/ui/integrations/overlay.js +77 -0
  204. package/dist/ui/integrations/overlay.js.map +1 -0
  205. package/dist/ui/integrations/parts.d.ts +36 -0
  206. package/dist/ui/integrations/parts.d.ts.map +1 -0
  207. package/dist/ui/integrations/parts.js +85 -0
  208. package/dist/ui/integrations/parts.js.map +1 -0
  209. package/dist/ui/integrations/types.d.ts +96 -0
  210. package/dist/ui/integrations/types.d.ts.map +1 -0
  211. package/dist/ui/integrations/types.js +2 -0
  212. package/dist/ui/integrations/types.js.map +1 -0
  213. package/dist/ui/metrics.d.ts +106 -0
  214. package/dist/ui/metrics.d.ts.map +1 -0
  215. package/dist/ui/metrics.js +166 -0
  216. package/dist/ui/metrics.js.map +1 -0
  217. package/dist/ui/portfolio/PortfolioView.d.ts +26 -0
  218. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -0
  219. package/dist/ui/portfolio/PortfolioView.js +216 -0
  220. package/dist/ui/portfolio/PortfolioView.js.map +1 -0
  221. package/dist/ui/portfolio/SpendChart.d.ts +10 -0
  222. package/dist/ui/portfolio/SpendChart.d.ts.map +1 -0
  223. package/dist/ui/portfolio/SpendChart.js +196 -0
  224. package/dist/ui/portfolio/SpendChart.js.map +1 -0
  225. package/dist/ui/portfolio/alerts.d.ts +74 -0
  226. package/dist/ui/portfolio/alerts.d.ts.map +1 -0
  227. package/dist/ui/portfolio/alerts.js +291 -0
  228. package/dist/ui/portfolio/alerts.js.map +1 -0
  229. package/dist/ui/portfolio/figures.d.ts +79 -0
  230. package/dist/ui/portfolio/figures.d.ts.map +1 -0
  231. package/dist/ui/portfolio/figures.js +103 -0
  232. package/dist/ui/portfolio/figures.js.map +1 -0
  233. package/dist/ui/portfolio/format.d.ts +8 -0
  234. package/dist/ui/portfolio/format.d.ts.map +1 -0
  235. package/dist/ui/portfolio/format.js +28 -0
  236. package/dist/ui/portfolio/format.js.map +1 -0
  237. package/dist/ui/sample.d.ts +474 -0
  238. package/dist/ui/sample.d.ts.map +1 -0
  239. package/dist/ui/sample.js +553 -0
  240. package/dist/ui/sample.js.map +1 -0
  241. package/dist/ui/seed.d.ts +188 -0
  242. package/dist/ui/seed.d.ts.map +1 -0
  243. package/dist/ui/seed.js +563 -0
  244. package/dist/ui/seed.js.map +1 -0
  245. package/dist/ui/ui.css +3356 -0
  246. package/docs/federation.md +46 -1
  247. package/docs/meta-ads.md +746 -0
  248. package/docs/upgrading.md +110 -0
  249. package/llms.txt +3 -0
  250. package/package.json +15 -3
  251. package/src/component/_generated/api.ts +14 -0
  252. package/src/component/_generated/component.ts +326 -1
  253. package/src/component/_generated/server.ts +4 -0
  254. package/src/component/constants.ts +10 -0
  255. package/src/component/convex.config.ts +9 -0
  256. package/src/component/errors.ts +5 -1
  257. package/src/component/ingest.ts +5 -1
  258. package/src/component/leads.ts +517 -17
  259. package/src/component/meta.ts +1461 -0
  260. package/src/component/metaCapi.ts +921 -0
  261. package/src/component/metaFake.ts +277 -0
  262. package/src/component/metaGraph.ts +722 -0
  263. package/src/component/metaSync.ts +1164 -0
  264. package/src/component/pipeline.ts +392 -0
  265. package/src/component/sanitize.ts +45 -0
  266. package/src/component/schema.ts +197 -1
  267. package/src/component/secrets.ts +98 -0
  268. package/src/component/sites.ts +8 -0
  269. package/src/component/validators.ts +382 -3
  270. package/src/tracker/generated.ts +1 -1
  271. package/src/ui/seed.ts +755 -0
@@ -180,6 +180,7 @@ export declare const siteFieldsValidator: import("convex/values").VObject<{
180
180
  ownerId: string;
181
181
  routePatterns?: string[] | undefined;
182
182
  timezone?: string | undefined;
183
+ trackedPaths?: string[] | undefined;
183
184
  updatedAt: number;
184
185
  }, {
185
186
  ownerId: import("convex/values").VString<string, "required">;
@@ -190,9 +191,15 @@ export declare const siteFieldsValidator: import("convex/values").VObject<{
190
191
  currency: import("convex/values").VString<string | undefined, "optional">;
191
192
  cookieless: import("convex/values").VBoolean<boolean, "required">;
192
193
  routePatterns: import("convex/values").VArray<string[] | undefined, import("convex/values").VString<string, "required">, "optional">;
194
+ /**
195
+ * Since 0.9.0: the only paths this site records. Absent or empty records
196
+ * every path. Enforced at ingestion, so a stale tab or a script loaded where
197
+ * it should not be cannot put another page's activity in the site.
198
+ */
199
+ trackedPaths: import("convex/values").VArray<string[] | undefined, import("convex/values").VString<string, "required">, "optional">;
193
200
  createdAt: import("convex/values").VFloat64<number, "required">;
194
201
  updatedAt: import("convex/values").VFloat64<number, "required">;
195
- }, "required", "cookieless" | "createdAt" | "currency" | "domains" | "name" | "networkId" | "ownerId" | "routePatterns" | "timezone" | "updatedAt">;
202
+ }, "required", "cookieless" | "createdAt" | "currency" | "domains" | "name" | "networkId" | "ownerId" | "routePatterns" | "timezone" | "trackedPaths" | "updatedAt">;
196
203
  export declare const sessionFieldsValidator: import("convex/values").VObject<{
197
204
  affiliateAttributedAt?: number | undefined;
198
205
  affiliateExpiresAt?: number | undefined;
@@ -566,6 +573,8 @@ export declare const leadFieldsValidator: import("convex/values").VObject<{
566
573
  title?: string | undefined;
567
574
  } | undefined;
568
575
  channel: "whatsapp";
576
+ column?: string | undefined;
577
+ columnAt?: number | undefined;
569
578
  dayStart: number;
570
579
  entryPoint?: string | undefined;
571
580
  firstAt: number;
@@ -614,16 +623,23 @@ export declare const leadFieldsValidator: import("convex/values").VObject<{
614
623
  stageAt: import("convex/values").VFloat64<number, "required">;
615
624
  qualifiedAt: import("convex/values").VFloat64<number | undefined, "optional">;
616
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">;
617
629
  updatedAt: import("convex/values").VFloat64<number, "required">;
618
- }, "required", "ad" | "ad.adId" | "ad.ctwaClid" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "channel" | "dayStart" | "entryPoint" | "firstAt" | "label" | "leadKey" | "originKey" | "qualifiedAt" | "revenueCents" | "siteId" | "stage" | "stageAt" | "updatedAt" | "visitorId" | "wonAt">;
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">;
619
631
  export declare const adCatalogFieldsValidator: import("convex/values").VObject<{
632
+ adAccountId?: string | undefined;
620
633
  adId: string;
621
634
  adName?: string | undefined;
635
+ adStatus?: string | undefined;
622
636
  adsetId?: string | undefined;
623
637
  adsetName?: string | undefined;
624
638
  campaignId?: string | undefined;
625
639
  campaignName?: string | undefined;
640
+ creativeType?: "carousel" | "image" | "other" | "video" | undefined;
626
641
  siteId: import("convex/values").GenericId<"sites">;
642
+ thumbnailStorageId?: import("convex/values").GenericId<"_storage"> | undefined;
627
643
  thumbnailUrl?: string | undefined;
628
644
  updatedAt: number;
629
645
  }, {
@@ -635,8 +651,213 @@ export declare const adCatalogFieldsValidator: import("convex/values").VObject<{
635
651
  campaignId: import("convex/values").VString<string | undefined, "optional">;
636
652
  campaignName: import("convex/values").VString<string | undefined, "optional">;
637
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">;
659
+ updatedAt: import("convex/values").VFloat64<number, "required">;
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">;
638
771
  updatedAt: import("convex/values").VFloat64<number, "required">;
639
- }, "required", "adId" | "adName" | "adsetId" | "adsetName" | "campaignId" | "campaignName" | "siteId" | "thumbnailUrl" | "updatedAt">;
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">;
640
861
  export declare const ingestResultValidator: import("convex/values").VObject<{
641
862
  accepted: number;
642
863
  duplicates: number;
@@ -679,11 +900,17 @@ export type Evidence = Infer<typeof evidenceValidator>;
679
900
  export declare const leadAdRowValidator: import("convex/values").VObject<{
680
901
  adId: string;
681
902
  adName: string | null;
903
+ adStatus?: string | null | undefined;
904
+ clicks?: number | null | undefined;
905
+ creativeType?: string | null | undefined;
906
+ impressions?: number | null | undefined;
682
907
  leads: number;
683
908
  qualified: number;
684
909
  revenueCents: number;
910
+ siteId?: string | undefined;
685
911
  sourceApp: string | null;
686
912
  sourceUrl: string | null;
913
+ spendCents?: number | null | undefined;
687
914
  thumbnailUrl: string | null;
688
915
  title: string | null;
689
916
  won: number;
@@ -692,58 +919,91 @@ export declare const leadAdRowValidator: import("convex/values").VObject<{
692
919
  qualified: import("convex/values").VFloat64<number, "required">;
693
920
  won: import("convex/values").VFloat64<number, "required">;
694
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>;
695
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">;
696
928
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
697
929
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
698
930
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
699
931
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
700
932
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
701
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">;
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">;
702
938
  export declare const leadAdsetRowValidator: import("convex/values").VObject<{
703
939
  ads: {
704
940
  adId: string;
705
941
  adName: string | null;
942
+ adStatus?: string | null | undefined;
943
+ clicks?: number | null | undefined;
944
+ creativeType?: string | null | undefined;
945
+ impressions?: number | null | undefined;
706
946
  leads: number;
707
947
  qualified: number;
708
948
  revenueCents: number;
949
+ siteId?: string | undefined;
709
950
  sourceApp: string | null;
710
951
  sourceUrl: string | null;
952
+ spendCents?: number | null | undefined;
711
953
  thumbnailUrl: string | null;
712
954
  title: string | null;
713
955
  won: number;
714
956
  }[];
715
957
  adsetId: string | null;
716
958
  adsetName: string | null;
959
+ clicks?: number | null | undefined;
960
+ impressions?: number | null | undefined;
717
961
  leads: number;
718
962
  qualified: number;
719
963
  revenueCents: number;
964
+ spendCents?: number | null | undefined;
720
965
  won: number;
721
966
  }, {
722
967
  leads: import("convex/values").VFloat64<number, "required">;
723
968
  qualified: import("convex/values").VFloat64<number, "required">;
724
969
  won: import("convex/values").VFloat64<number, "required">;
725
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>;
726
974
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
727
975
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
728
976
  ads: import("convex/values").VArray<{
729
977
  adId: string;
730
978
  adName: string | null;
979
+ adStatus?: string | null | undefined;
980
+ clicks?: number | null | undefined;
981
+ creativeType?: string | null | undefined;
982
+ impressions?: number | null | undefined;
731
983
  leads: number;
732
984
  qualified: number;
733
985
  revenueCents: number;
986
+ siteId?: string | undefined;
734
987
  sourceApp: string | null;
735
988
  sourceUrl: string | null;
989
+ spendCents?: number | null | undefined;
736
990
  thumbnailUrl: string | null;
737
991
  title: string | null;
738
992
  won: number;
739
993
  }[], import("convex/values").VObject<{
740
994
  adId: string;
741
995
  adName: string | null;
996
+ adStatus?: string | null | undefined;
997
+ clicks?: number | null | undefined;
998
+ creativeType?: string | null | undefined;
999
+ impressions?: number | null | undefined;
742
1000
  leads: number;
743
1001
  qualified: number;
744
1002
  revenueCents: number;
1003
+ siteId?: string | undefined;
745
1004
  sourceApp: string | null;
746
1005
  sourceUrl: string | null;
1006
+ spendCents?: number | null | undefined;
747
1007
  thumbnailUrl: string | null;
748
1008
  title: string | null;
749
1009
  won: number;
@@ -752,112 +1012,169 @@ export declare const leadAdsetRowValidator: import("convex/values").VObject<{
752
1012
  qualified: import("convex/values").VFloat64<number, "required">;
753
1013
  won: import("convex/values").VFloat64<number, "required">;
754
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>;
755
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">;
756
1021
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
757
1022
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
758
1023
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
759
1024
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
760
1025
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
761
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
762
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">;
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">;
763
1032
  export declare const leadCampaignRowValidator: import("convex/values").VObject<{
764
1033
  adsets: {
765
1034
  ads: {
766
1035
  adId: string;
767
1036
  adName: string | null;
1037
+ adStatus?: string | null | undefined;
1038
+ clicks?: number | null | undefined;
1039
+ creativeType?: string | null | undefined;
1040
+ impressions?: number | null | undefined;
768
1041
  leads: number;
769
1042
  qualified: number;
770
1043
  revenueCents: number;
1044
+ siteId?: string | undefined;
771
1045
  sourceApp: string | null;
772
1046
  sourceUrl: string | null;
1047
+ spendCents?: number | null | undefined;
773
1048
  thumbnailUrl: string | null;
774
1049
  title: string | null;
775
1050
  won: number;
776
1051
  }[];
777
1052
  adsetId: string | null;
778
1053
  adsetName: string | null;
1054
+ clicks?: number | null | undefined;
1055
+ impressions?: number | null | undefined;
779
1056
  leads: number;
780
1057
  qualified: number;
781
1058
  revenueCents: number;
1059
+ spendCents?: number | null | undefined;
782
1060
  won: number;
783
1061
  }[];
784
1062
  campaignId: string | null;
785
1063
  campaignName: string | null;
1064
+ clicks?: number | null | undefined;
1065
+ impressions?: number | null | undefined;
786
1066
  leads: number;
787
1067
  qualified: number;
788
1068
  revenueCents: number;
1069
+ spendCents?: number | null | undefined;
789
1070
  won: number;
790
1071
  }, {
791
1072
  leads: import("convex/values").VFloat64<number, "required">;
792
1073
  qualified: import("convex/values").VFloat64<number, "required">;
793
1074
  won: import("convex/values").VFloat64<number, "required">;
794
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>;
795
1079
  campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
796
1080
  campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
797
1081
  adsets: import("convex/values").VArray<{
798
1082
  ads: {
799
1083
  adId: string;
800
1084
  adName: string | null;
1085
+ adStatus?: string | null | undefined;
1086
+ clicks?: number | null | undefined;
1087
+ creativeType?: string | null | undefined;
1088
+ impressions?: number | null | undefined;
801
1089
  leads: number;
802
1090
  qualified: number;
803
1091
  revenueCents: number;
1092
+ siteId?: string | undefined;
804
1093
  sourceApp: string | null;
805
1094
  sourceUrl: string | null;
1095
+ spendCents?: number | null | undefined;
806
1096
  thumbnailUrl: string | null;
807
1097
  title: string | null;
808
1098
  won: number;
809
1099
  }[];
810
1100
  adsetId: string | null;
811
1101
  adsetName: string | null;
1102
+ clicks?: number | null | undefined;
1103
+ impressions?: number | null | undefined;
812
1104
  leads: number;
813
1105
  qualified: number;
814
1106
  revenueCents: number;
1107
+ spendCents?: number | null | undefined;
815
1108
  won: number;
816
1109
  }[], import("convex/values").VObject<{
817
1110
  ads: {
818
1111
  adId: string;
819
1112
  adName: string | null;
1113
+ adStatus?: string | null | undefined;
1114
+ clicks?: number | null | undefined;
1115
+ creativeType?: string | null | undefined;
1116
+ impressions?: number | null | undefined;
820
1117
  leads: number;
821
1118
  qualified: number;
822
1119
  revenueCents: number;
1120
+ siteId?: string | undefined;
823
1121
  sourceApp: string | null;
824
1122
  sourceUrl: string | null;
1123
+ spendCents?: number | null | undefined;
825
1124
  thumbnailUrl: string | null;
826
1125
  title: string | null;
827
1126
  won: number;
828
1127
  }[];
829
1128
  adsetId: string | null;
830
1129
  adsetName: string | null;
1130
+ clicks?: number | null | undefined;
1131
+ impressions?: number | null | undefined;
831
1132
  leads: number;
832
1133
  qualified: number;
833
1134
  revenueCents: number;
1135
+ spendCents?: number | null | undefined;
834
1136
  won: number;
835
1137
  }, {
836
1138
  leads: import("convex/values").VFloat64<number, "required">;
837
1139
  qualified: import("convex/values").VFloat64<number, "required">;
838
1140
  won: import("convex/values").VFloat64<number, "required">;
839
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>;
840
1145
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
841
1146
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
842
1147
  ads: import("convex/values").VArray<{
843
1148
  adId: string;
844
1149
  adName: string | null;
1150
+ adStatus?: string | null | undefined;
1151
+ clicks?: number | null | undefined;
1152
+ creativeType?: string | null | undefined;
1153
+ impressions?: number | null | undefined;
845
1154
  leads: number;
846
1155
  qualified: number;
847
1156
  revenueCents: number;
1157
+ siteId?: string | undefined;
848
1158
  sourceApp: string | null;
849
1159
  sourceUrl: string | null;
1160
+ spendCents?: number | null | undefined;
850
1161
  thumbnailUrl: string | null;
851
1162
  title: string | null;
852
1163
  won: number;
853
1164
  }[], import("convex/values").VObject<{
854
1165
  adId: string;
855
1166
  adName: string | null;
1167
+ adStatus?: string | null | undefined;
1168
+ clicks?: number | null | undefined;
1169
+ creativeType?: string | null | undefined;
1170
+ impressions?: number | null | undefined;
856
1171
  leads: number;
857
1172
  qualified: number;
858
1173
  revenueCents: number;
1174
+ siteId?: string | undefined;
859
1175
  sourceApp: string | null;
860
1176
  sourceUrl: string | null;
1177
+ spendCents?: number | null | undefined;
861
1178
  thumbnailUrl: string | null;
862
1179
  title: string | null;
863
1180
  won: number;
@@ -866,58 +1183,150 @@ export declare const leadCampaignRowValidator: import("convex/values").VObject<{
866
1183
  qualified: import("convex/values").VFloat64<number, "required">;
867
1184
  won: import("convex/values").VFloat64<number, "required">;
868
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>;
869
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">;
870
1192
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
871
1193
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
872
1194
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
873
1195
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
874
1196
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
875
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
876
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
877
- }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">;
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">;
878
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;
879
1267
  campaigns: {
880
1268
  adsets: {
881
1269
  ads: {
882
1270
  adId: string;
883
1271
  adName: string | null;
1272
+ adStatus?: string | null | undefined;
1273
+ clicks?: number | null | undefined;
1274
+ creativeType?: string | null | undefined;
1275
+ impressions?: number | null | undefined;
884
1276
  leads: number;
885
1277
  qualified: number;
886
1278
  revenueCents: number;
1279
+ siteId?: string | undefined;
887
1280
  sourceApp: string | null;
888
1281
  sourceUrl: string | null;
1282
+ spendCents?: number | null | undefined;
889
1283
  thumbnailUrl: string | null;
890
1284
  title: string | null;
891
1285
  won: number;
892
1286
  }[];
893
1287
  adsetId: string | null;
894
1288
  adsetName: string | null;
1289
+ clicks?: number | null | undefined;
1290
+ impressions?: number | null | undefined;
895
1291
  leads: number;
896
1292
  qualified: number;
897
1293
  revenueCents: number;
1294
+ spendCents?: number | null | undefined;
898
1295
  won: number;
899
1296
  }[];
900
1297
  campaignId: string | null;
901
1298
  campaignName: string | null;
1299
+ clicks?: number | null | undefined;
1300
+ impressions?: number | null | undefined;
902
1301
  leads: number;
903
1302
  qualified: number;
904
1303
  revenueCents: number;
1304
+ spendCents?: number | null | undefined;
905
1305
  won: number;
906
1306
  }[];
907
1307
  currency: string | null;
1308
+ currencyMismatch?: boolean | undefined;
908
1309
  from: number;
909
1310
  origins: {
1311
+ clicks?: number | null | undefined;
1312
+ impressions?: number | null | undefined;
910
1313
  key: string;
911
1314
  leads: number;
912
1315
  qualified: number;
913
1316
  revenueCents: number;
1317
+ spendCents?: number | null | undefined;
914
1318
  won: number;
915
1319
  }[];
1320
+ spendCurrency?: string | null | undefined;
1321
+ spendIncomplete?: boolean | undefined;
916
1322
  to: number;
917
1323
  totals: {
1324
+ clicks?: number | null | undefined;
1325
+ impressions?: number | null | undefined;
918
1326
  leads: number;
919
1327
  qualified: number;
920
1328
  revenueCents: number;
1329
+ spendCents?: number | null | undefined;
921
1330
  won: number;
922
1331
  };
923
1332
  }, {
@@ -926,164 +1335,240 @@ export declare const leadsReportValidator: import("convex/values").VObject<{
926
1335
  /** The sites' currency, or null when they differ (revenue then mixes). */
927
1336
  currency: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
928
1337
  totals: import("convex/values").VObject<{
1338
+ clicks?: number | null | undefined;
1339
+ impressions?: number | null | undefined;
929
1340
  leads: number;
930
1341
  qualified: number;
931
1342
  revenueCents: number;
1343
+ spendCents?: number | null | undefined;
932
1344
  won: number;
933
1345
  }, {
934
1346
  leads: import("convex/values").VFloat64<number, "required">;
935
1347
  qualified: import("convex/values").VFloat64<number, "required">;
936
1348
  won: import("convex/values").VFloat64<number, "required">;
937
1349
  revenueCents: import("convex/values").VFloat64<number, "required">;
938
- }, "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">;
939
1354
  origins: import("convex/values").VArray<{
1355
+ clicks?: number | null | undefined;
1356
+ impressions?: number | null | undefined;
940
1357
  key: string;
941
1358
  leads: number;
942
1359
  qualified: number;
943
1360
  revenueCents: number;
1361
+ spendCents?: number | null | undefined;
944
1362
  won: number;
945
1363
  }[], import("convex/values").VObject<{
1364
+ clicks?: number | null | undefined;
1365
+ impressions?: number | null | undefined;
946
1366
  key: string;
947
1367
  leads: number;
948
1368
  qualified: number;
949
1369
  revenueCents: number;
1370
+ spendCents?: number | null | undefined;
950
1371
  won: number;
951
1372
  }, {
952
1373
  leads: import("convex/values").VFloat64<number, "required">;
953
1374
  qualified: import("convex/values").VFloat64<number, "required">;
954
1375
  won: import("convex/values").VFloat64<number, "required">;
955
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>;
956
1380
  key: import("convex/values").VString<string, "required">;
957
- }, "required", "key" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1381
+ }, "required", "clicks" | "impressions" | "key" | "leads" | "qualified" | "revenueCents" | "spendCents" | "won">, "required">;
958
1382
  /**
959
1383
  * Campaign → ad set → ad, with ads the catalog does not name yet grouped
960
- * 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.
961
1386
  */
962
1387
  campaigns: import("convex/values").VArray<{
963
1388
  adsets: {
964
1389
  ads: {
965
1390
  adId: string;
966
1391
  adName: string | null;
1392
+ adStatus?: string | null | undefined;
1393
+ clicks?: number | null | undefined;
1394
+ creativeType?: string | null | undefined;
1395
+ impressions?: number | null | undefined;
967
1396
  leads: number;
968
1397
  qualified: number;
969
1398
  revenueCents: number;
1399
+ siteId?: string | undefined;
970
1400
  sourceApp: string | null;
971
1401
  sourceUrl: string | null;
1402
+ spendCents?: number | null | undefined;
972
1403
  thumbnailUrl: string | null;
973
1404
  title: string | null;
974
1405
  won: number;
975
1406
  }[];
976
1407
  adsetId: string | null;
977
1408
  adsetName: string | null;
1409
+ clicks?: number | null | undefined;
1410
+ impressions?: number | null | undefined;
978
1411
  leads: number;
979
1412
  qualified: number;
980
1413
  revenueCents: number;
1414
+ spendCents?: number | null | undefined;
981
1415
  won: number;
982
1416
  }[];
983
1417
  campaignId: string | null;
984
1418
  campaignName: string | null;
1419
+ clicks?: number | null | undefined;
1420
+ impressions?: number | null | undefined;
985
1421
  leads: number;
986
1422
  qualified: number;
987
1423
  revenueCents: number;
1424
+ spendCents?: number | null | undefined;
988
1425
  won: number;
989
1426
  }[], import("convex/values").VObject<{
990
1427
  adsets: {
991
1428
  ads: {
992
1429
  adId: string;
993
1430
  adName: string | null;
1431
+ adStatus?: string | null | undefined;
1432
+ clicks?: number | null | undefined;
1433
+ creativeType?: string | null | undefined;
1434
+ impressions?: number | null | undefined;
994
1435
  leads: number;
995
1436
  qualified: number;
996
1437
  revenueCents: number;
1438
+ siteId?: string | undefined;
997
1439
  sourceApp: string | null;
998
1440
  sourceUrl: string | null;
1441
+ spendCents?: number | null | undefined;
999
1442
  thumbnailUrl: string | null;
1000
1443
  title: string | null;
1001
1444
  won: number;
1002
1445
  }[];
1003
1446
  adsetId: string | null;
1004
1447
  adsetName: string | null;
1448
+ clicks?: number | null | undefined;
1449
+ impressions?: number | null | undefined;
1005
1450
  leads: number;
1006
1451
  qualified: number;
1007
1452
  revenueCents: number;
1453
+ spendCents?: number | null | undefined;
1008
1454
  won: number;
1009
1455
  }[];
1010
1456
  campaignId: string | null;
1011
1457
  campaignName: string | null;
1458
+ clicks?: number | null | undefined;
1459
+ impressions?: number | null | undefined;
1012
1460
  leads: number;
1013
1461
  qualified: number;
1014
1462
  revenueCents: number;
1463
+ spendCents?: number | null | undefined;
1015
1464
  won: number;
1016
1465
  }, {
1017
1466
  leads: import("convex/values").VFloat64<number, "required">;
1018
1467
  qualified: import("convex/values").VFloat64<number, "required">;
1019
1468
  won: import("convex/values").VFloat64<number, "required">;
1020
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>;
1021
1473
  campaignId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1022
1474
  campaignName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1023
1475
  adsets: import("convex/values").VArray<{
1024
1476
  ads: {
1025
1477
  adId: string;
1026
1478
  adName: string | null;
1479
+ adStatus?: string | null | undefined;
1480
+ clicks?: number | null | undefined;
1481
+ creativeType?: string | null | undefined;
1482
+ impressions?: number | null | undefined;
1027
1483
  leads: number;
1028
1484
  qualified: number;
1029
1485
  revenueCents: number;
1486
+ siteId?: string | undefined;
1030
1487
  sourceApp: string | null;
1031
1488
  sourceUrl: string | null;
1489
+ spendCents?: number | null | undefined;
1032
1490
  thumbnailUrl: string | null;
1033
1491
  title: string | null;
1034
1492
  won: number;
1035
1493
  }[];
1036
1494
  adsetId: string | null;
1037
1495
  adsetName: string | null;
1496
+ clicks?: number | null | undefined;
1497
+ impressions?: number | null | undefined;
1038
1498
  leads: number;
1039
1499
  qualified: number;
1040
1500
  revenueCents: number;
1501
+ spendCents?: number | null | undefined;
1041
1502
  won: number;
1042
1503
  }[], import("convex/values").VObject<{
1043
1504
  ads: {
1044
1505
  adId: string;
1045
1506
  adName: string | null;
1507
+ adStatus?: string | null | undefined;
1508
+ clicks?: number | null | undefined;
1509
+ creativeType?: string | null | undefined;
1510
+ impressions?: number | null | undefined;
1046
1511
  leads: number;
1047
1512
  qualified: number;
1048
1513
  revenueCents: number;
1514
+ siteId?: string | undefined;
1049
1515
  sourceApp: string | null;
1050
1516
  sourceUrl: string | null;
1517
+ spendCents?: number | null | undefined;
1051
1518
  thumbnailUrl: string | null;
1052
1519
  title: string | null;
1053
1520
  won: number;
1054
1521
  }[];
1055
1522
  adsetId: string | null;
1056
1523
  adsetName: string | null;
1524
+ clicks?: number | null | undefined;
1525
+ impressions?: number | null | undefined;
1057
1526
  leads: number;
1058
1527
  qualified: number;
1059
1528
  revenueCents: number;
1529
+ spendCents?: number | null | undefined;
1060
1530
  won: number;
1061
1531
  }, {
1062
1532
  leads: import("convex/values").VFloat64<number, "required">;
1063
1533
  qualified: import("convex/values").VFloat64<number, "required">;
1064
1534
  won: import("convex/values").VFloat64<number, "required">;
1065
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>;
1066
1539
  adsetId: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1067
1540
  adsetName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1068
1541
  ads: import("convex/values").VArray<{
1069
1542
  adId: string;
1070
1543
  adName: string | null;
1544
+ adStatus?: string | null | undefined;
1545
+ clicks?: number | null | undefined;
1546
+ creativeType?: string | null | undefined;
1547
+ impressions?: number | null | undefined;
1071
1548
  leads: number;
1072
1549
  qualified: number;
1073
1550
  revenueCents: number;
1551
+ siteId?: string | undefined;
1074
1552
  sourceApp: string | null;
1075
1553
  sourceUrl: string | null;
1554
+ spendCents?: number | null | undefined;
1076
1555
  thumbnailUrl: string | null;
1077
1556
  title: string | null;
1078
1557
  won: number;
1079
1558
  }[], import("convex/values").VObject<{
1080
1559
  adId: string;
1081
1560
  adName: string | null;
1561
+ adStatus?: string | null | undefined;
1562
+ clicks?: number | null | undefined;
1563
+ creativeType?: string | null | undefined;
1564
+ impressions?: number | null | undefined;
1082
1565
  leads: number;
1083
1566
  qualified: number;
1084
1567
  revenueCents: number;
1568
+ siteId?: string | undefined;
1085
1569
  sourceApp: string | null;
1086
1570
  sourceUrl: string | null;
1571
+ spendCents?: number | null | undefined;
1087
1572
  thumbnailUrl: string | null;
1088
1573
  title: string | null;
1089
1574
  won: number;
@@ -1092,16 +1577,352 @@ export declare const leadsReportValidator: import("convex/values").VObject<{
1092
1577
  qualified: import("convex/values").VFloat64<number, "required">;
1093
1578
  won: import("convex/values").VFloat64<number, "required">;
1094
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>;
1095
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">;
1096
1586
  adName: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1097
1587
  sourceApp: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1098
1588
  sourceUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1099
1589
  title: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1100
1590
  thumbnailUrl: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1101
- }, "required", "adId" | "adName" | "leads" | "qualified" | "revenueCents" | "sourceApp" | "sourceUrl" | "thumbnailUrl" | "title" | "won">, "required">;
1102
- }, "required", "ads" | "adsetId" | "adsetName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1103
- }, "required", "adsets" | "campaignId" | "campaignName" | "leads" | "qualified" | "revenueCents" | "won">, "required">;
1104
- }, "required", "campaigns" | "currency" | "from" | "origins" | "to" | "totals" | "totals.leads" | "totals.qualified" | "totals.revenueCents" | "totals.won">;
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">;
1105
1926
  export declare const leadSummaryValidator: import("convex/values").VObject<{
1106
1927
  adId: string | null;
1107
1928
  channel: "whatsapp";
@@ -1265,4 +2086,227 @@ export declare const leadJourneyValidator: import("convex/values").VUnion<{
1265
2086
  revenueCents: import("convex/values").VUnion<number | null, [import("convex/values").VFloat64<number, "required">, import("convex/values").VNull<null, "required">], "required", never>;
1266
2087
  }, "required", "at" | "revenueCents" | "type">, "required">;
1267
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">;
1268
2312
  //# sourceMappingURL=validators.d.ts.map