@iann29/rastro 0.10.9 → 0.11.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 (178) hide show
  1. package/README.md +8 -0
  2. package/agent/integration.md +45 -0
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +82 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +40 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +464 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +259 -7
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +10 -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 +273 -21
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/_generated/server.d.ts +2 -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 +31 -0
  21. package/dist/component/constants.d.ts.map +1 -1
  22. package/dist/component/constants.js +31 -0
  23. package/dist/component/constants.js.map +1 -1
  24. package/dist/component/convex.config.d.ts +2 -0
  25. package/dist/component/convex.config.js +7 -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/http.d.ts.map +1 -1
  31. package/dist/component/http.js +64 -0
  32. package/dist/component/http.js.map +1 -1
  33. package/dist/component/leadAdsValidators.d.ts +1092 -0
  34. package/dist/component/leadAdsValidators.d.ts.map +1 -0
  35. package/dist/component/leadAdsValidators.js +304 -0
  36. package/dist/component/leadAdsValidators.js.map +1 -0
  37. package/dist/component/leadFormRules.d.ts +60 -0
  38. package/dist/component/leadFormRules.d.ts.map +1 -0
  39. package/dist/component/leadFormRules.js +140 -0
  40. package/dist/component/leadFormRules.js.map +1 -0
  41. package/dist/component/leadFormStore.d.ts +16 -0
  42. package/dist/component/leadFormStore.d.ts.map +1 -0
  43. package/dist/component/leadFormStore.js +92 -0
  44. package/dist/component/leadFormStore.js.map +1 -0
  45. package/dist/component/leadgenToken.d.ts +56 -0
  46. package/dist/component/leadgenToken.d.ts.map +1 -0
  47. package/dist/component/leadgenToken.js +262 -0
  48. package/dist/component/leadgenToken.js.map +1 -0
  49. package/dist/component/leads.d.ts +76 -7
  50. package/dist/component/leads.d.ts.map +1 -1
  51. package/dist/component/leads.js +112 -78
  52. package/dist/component/leads.js.map +1 -1
  53. package/dist/component/meta.d.ts.map +1 -1
  54. package/dist/component/meta.js +21 -1
  55. package/dist/component/meta.js.map +1 -1
  56. package/dist/component/metaFake.d.ts +44 -0
  57. package/dist/component/metaFake.d.ts.map +1 -1
  58. package/dist/component/metaFake.js +400 -1
  59. package/dist/component/metaFake.js.map +1 -1
  60. package/dist/component/metaGraph.d.ts +91 -0
  61. package/dist/component/metaGraph.d.ts.map +1 -1
  62. package/dist/component/metaGraph.js +217 -0
  63. package/dist/component/metaGraph.js.map +1 -1
  64. package/dist/component/metaLeads.d.ts +681 -0
  65. package/dist/component/metaLeads.d.ts.map +1 -0
  66. package/dist/component/metaLeads.js +2634 -0
  67. package/dist/component/metaLeads.js.map +1 -0
  68. package/dist/component/schema.d.ts +414 -5
  69. package/dist/component/schema.d.ts.map +1 -1
  70. package/dist/component/schema.js +169 -1
  71. package/dist/component/schema.js.map +1 -1
  72. package/dist/component/validators.d.ts +235 -11
  73. package/dist/component/validators.d.ts.map +1 -1
  74. package/dist/component/validators.js +14 -1
  75. package/dist/component/validators.js.map +1 -1
  76. package/dist/tracker/generated.d.ts +1 -1
  77. package/dist/tracker/generated.js +1 -1
  78. package/dist/ui/campaigns/CampaignsView.d.ts +5 -1
  79. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -1
  80. package/dist/ui/campaigns/CampaignsView.js.map +1 -1
  81. package/dist/ui/campaigns/Drawer.d.ts.map +1 -1
  82. package/dist/ui/campaigns/Drawer.js +8 -26
  83. package/dist/ui/campaigns/Drawer.js.map +1 -1
  84. package/dist/ui/campaigns/labels.d.ts +29 -1
  85. package/dist/ui/campaigns/labels.d.ts.map +1 -1
  86. package/dist/ui/campaigns/labels.js +77 -2
  87. package/dist/ui/campaigns/labels.js.map +1 -1
  88. package/dist/ui/campaigns/model.js +2 -2
  89. package/dist/ui/campaigns/model.js.map +1 -1
  90. package/dist/ui/forms/FirstContact.d.ts +19 -0
  91. package/dist/ui/forms/FirstContact.d.ts.map +1 -0
  92. package/dist/ui/forms/FirstContact.js +81 -0
  93. package/dist/ui/forms/FirstContact.js.map +1 -0
  94. package/dist/ui/forms/FormLead.d.ts +28 -0
  95. package/dist/ui/forms/FormLead.d.ts.map +1 -0
  96. package/dist/ui/forms/FormLead.js +199 -0
  97. package/dist/ui/forms/FormLead.js.map +1 -0
  98. package/dist/ui/forms/FormRulesDrawer.d.ts +49 -0
  99. package/dist/ui/forms/FormRulesDrawer.d.ts.map +1 -0
  100. package/dist/ui/forms/FormRulesDrawer.js +149 -0
  101. package/dist/ui/forms/FormRulesDrawer.js.map +1 -0
  102. package/dist/ui/forms/FormsView.d.ts +10 -0
  103. package/dist/ui/forms/FormsView.d.ts.map +1 -0
  104. package/dist/ui/forms/FormsView.js +215 -0
  105. package/dist/ui/forms/FormsView.js.map +1 -0
  106. package/dist/ui/forms/Icons.d.ts +46 -0
  107. package/dist/ui/forms/Icons.d.ts.map +1 -0
  108. package/dist/ui/forms/Icons.js +45 -0
  109. package/dist/ui/forms/Icons.js.map +1 -0
  110. package/dist/ui/forms/RuleRow.d.ts +37 -0
  111. package/dist/ui/forms/RuleRow.d.ts.map +1 -0
  112. package/dist/ui/forms/RuleRow.js +80 -0
  113. package/dist/ui/forms/RuleRow.js.map +1 -0
  114. package/dist/ui/forms/WhatsAppButtonGuide.d.ts +33 -0
  115. package/dist/ui/forms/WhatsAppButtonGuide.d.ts.map +1 -0
  116. package/dist/ui/forms/WhatsAppButtonGuide.js +90 -0
  117. package/dist/ui/forms/WhatsAppButtonGuide.js.map +1 -0
  118. package/dist/ui/forms/index.d.ts +11 -0
  119. package/dist/ui/forms/index.d.ts.map +1 -0
  120. package/dist/ui/forms/index.js +7 -0
  121. package/dist/ui/forms/index.js.map +1 -0
  122. package/dist/ui/forms/journey.d.ts +19 -0
  123. package/dist/ui/forms/journey.d.ts.map +1 -0
  124. package/dist/ui/forms/journey.js +54 -0
  125. package/dist/ui/forms/journey.js.map +1 -0
  126. package/dist/ui/forms/model.d.ts +239 -0
  127. package/dist/ui/forms/model.d.ts.map +1 -0
  128. package/dist/ui/forms/model.js +556 -0
  129. package/dist/ui/forms/model.js.map +1 -0
  130. package/dist/ui/forms/sample.d.ts +36 -0
  131. package/dist/ui/forms/sample.d.ts.map +1 -0
  132. package/dist/ui/forms/sample.js +444 -0
  133. package/dist/ui/forms/sample.js.map +1 -0
  134. package/dist/ui/forms/types.d.ts +454 -0
  135. package/dist/ui/forms/types.d.ts.map +1 -0
  136. package/dist/ui/forms/types.js +2 -0
  137. package/dist/ui/forms/types.js.map +1 -0
  138. package/dist/ui/index.d.ts +2 -0
  139. package/dist/ui/index.d.ts.map +1 -1
  140. package/dist/ui/index.js +4 -0
  141. package/dist/ui/index.js.map +1 -1
  142. package/dist/ui/integrations/Overlay.d.ts +3 -1
  143. package/dist/ui/integrations/Overlay.d.ts.map +1 -1
  144. package/dist/ui/integrations/Overlay.js +2 -2
  145. package/dist/ui/integrations/Overlay.js.map +1 -1
  146. package/dist/ui/portfolio/PortfolioView.d.ts +4 -1
  147. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -1
  148. package/dist/ui/portfolio/PortfolioView.js.map +1 -1
  149. package/dist/ui/sample.d.ts +3 -1
  150. package/dist/ui/sample.d.ts.map +1 -1
  151. package/dist/ui/sample.js +2 -0
  152. package/dist/ui/sample.js.map +1 -1
  153. package/dist/ui/seed.d.ts +1 -1
  154. package/dist/ui/ui.css +2301 -0
  155. package/docs/federation.md +19 -0
  156. package/docs/meta-ads.md +713 -7
  157. package/docs/upgrading.md +70 -0
  158. package/llms.txt +1 -0
  159. package/package.json +1 -1
  160. package/src/component/_generated/api.ts +10 -0
  161. package/src/component/_generated/component.ts +289 -20
  162. package/src/component/_generated/server.ts +2 -0
  163. package/src/component/constants.ts +33 -0
  164. package/src/component/convex.config.ts +7 -0
  165. package/src/component/errors.ts +3 -1
  166. package/src/component/http.ts +75 -0
  167. package/src/component/leadAdsValidators.ts +365 -0
  168. package/src/component/leadFormRules.ts +202 -0
  169. package/src/component/leadFormStore.ts +129 -0
  170. package/src/component/leadgenToken.ts +348 -0
  171. package/src/component/leads.ts +136 -84
  172. package/src/component/meta.ts +21 -1
  173. package/src/component/metaFake.ts +485 -1
  174. package/src/component/metaGraph.ts +327 -0
  175. package/src/component/metaLeads.ts +3101 -0
  176. package/src/component/schema.ts +187 -1
  177. package/src/component/validators.ts +17 -1
  178. package/src/tracker/generated.ts +1 -1
@@ -1186,12 +1186,16 @@ declare const _default: import("convex/server").SchemaDefinition<{
1186
1186
  sourceUrl?: string | undefined;
1187
1187
  title?: string | undefined;
1188
1188
  } | undefined;
1189
- channel: "whatsapp";
1189
+ channel: "form" | "whatsapp";
1190
1190
  column?: string | undefined;
1191
1191
  columnAt?: number | undefined;
1192
1192
  dayStart: number;
1193
1193
  entryPoint?: string | undefined;
1194
1194
  firstAt: number;
1195
+ form?: {
1196
+ formId: string;
1197
+ pageId: string;
1198
+ } | undefined;
1195
1199
  label?: string | undefined;
1196
1200
  leadKey: string;
1197
1201
  originKey: string;
@@ -1206,7 +1210,7 @@ declare const _default: import("convex/server").SchemaDefinition<{
1206
1210
  }, {
1207
1211
  siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
1208
1212
  leadKey: import("convex/values").VString<string, "required">;
1209
- channel: import("convex/values").VLiteral<"whatsapp", "required">;
1213
+ channel: import("convex/values").VUnion<"form" | "whatsapp", [import("convex/values").VLiteral<"whatsapp", "required">, import("convex/values").VLiteral<"form", "required">], "required", never>;
1210
1214
  entryPoint: import("convex/values").VString<string | undefined, "optional">;
1211
1215
  originKey: import("convex/values").VString<string, "required">;
1212
1216
  ad: import("convex/values").VObject<{
@@ -1233,8 +1237,15 @@ declare const _default: import("convex/server").SchemaDefinition<{
1233
1237
  wonAt: import("convex/values").VFloat64<number | undefined, "optional">;
1234
1238
  column: import("convex/values").VString<string | undefined, "optional">;
1235
1239
  columnAt: import("convex/values").VFloat64<number | undefined, "optional">;
1240
+ form: import("convex/values").VObject<{
1241
+ formId: string;
1242
+ pageId: string;
1243
+ } | undefined, {
1244
+ formId: import("convex/values").VString<string, "required">;
1245
+ pageId: import("convex/values").VString<string, "required">;
1246
+ }, "optional", "formId" | "pageId">;
1236
1247
  updatedAt: import("convex/values").VFloat64<number, "required">;
1237
- }, "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">, {
1248
+ }, "required", "ad" | "ad.adId" | "ad.ctwaClid" | "ad.sourceApp" | "ad.sourceUrl" | "ad.title" | "channel" | "column" | "columnAt" | "dayStart" | "entryPoint" | "firstAt" | "form" | "form.formId" | "form.pageId" | "label" | "leadKey" | "originKey" | "qualifiedAt" | "revenueCents" | "siteId" | "stage" | "stageAt" | "updatedAt" | "visitorId" | "wonAt">, {
1238
1249
  by_siteId_and_ad_and_firstAt: ["siteId", "ad.adId", "firstAt", "_creationTime"];
1239
1250
  by_siteId_and_firstAt: ["siteId", "firstAt", "_creationTime"];
1240
1251
  by_siteId_and_leadKey: ["siteId", "leadKey", "_creationTime"];
@@ -1259,7 +1270,7 @@ declare const _default: import("convex/server").SchemaDefinition<{
1259
1270
  }, {}, {}>;
1260
1271
  leadDailyRollups: import("convex/server").TableDefinition<import("convex/values").VObject<{
1261
1272
  dayStart: number;
1262
- dimension: "ad" | "origin";
1273
+ dimension: "ad" | "form" | "origin";
1263
1274
  key: string;
1264
1275
  leads: number;
1265
1276
  qualified: number;
@@ -1269,7 +1280,7 @@ declare const _default: import("convex/server").SchemaDefinition<{
1269
1280
  }, {
1270
1281
  siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
1271
1282
  dayStart: import("convex/values").VFloat64<number, "required">;
1272
- dimension: import("convex/values").VUnion<"ad" | "origin", [import("convex/values").VLiteral<"origin", "required">, import("convex/values").VLiteral<"ad", "required">], "required", never>;
1283
+ dimension: import("convex/values").VUnion<"ad" | "form" | "origin", [import("convex/values").VLiteral<"origin", "required">, import("convex/values").VLiteral<"ad", "required">, import("convex/values").VLiteral<"form", "required">], "required", never>;
1273
1284
  key: import("convex/values").VString<string, "required">;
1274
1285
  leads: import("convex/values").VFloat64<number, "required">;
1275
1286
  qualified: import("convex/values").VFloat64<number, "required">;
@@ -1876,6 +1887,404 @@ declare const _default: import("convex/server").SchemaDefinition<{
1876
1887
  }, "required", "Lead" | "Purchase" | "QualifiedLead" | "Schedule" | "dayStart" | "shard" | "siteId">, {
1877
1888
  by_siteId_and_dayStart_and_shard: ["siteId", "dayStart", "shard", "_creationTime"];
1878
1889
  }, {}, {}>;
1890
+ metaPages: import("convex/server").TableDefinition<import("convex/values").VObject<{
1891
+ connectionId: import("convex/values").GenericId<"metaConnections">;
1892
+ createdAt: number;
1893
+ invalidSince?: number | undefined;
1894
+ leadsAllowed: boolean;
1895
+ listed: boolean;
1896
+ name: string;
1897
+ ownerKey: string;
1898
+ pageId: string;
1899
+ tasks: string[];
1900
+ tokenCipher: string;
1901
+ tokenIv: string;
1902
+ updatedAt: number;
1903
+ }, {
1904
+ ownerKey: import("convex/values").VString<string, "required">;
1905
+ connectionId: import("convex/values").VId<import("convex/values").GenericId<"metaConnections">, "required">;
1906
+ pageId: import("convex/values").VString<string, "required">;
1907
+ name: import("convex/values").VString<string, "required">;
1908
+ tokenCipher: import("convex/values").VString<string, "required">;
1909
+ tokenIv: import("convex/values").VString<string, "required">;
1910
+ /** The Page tasks Meta granted the login: `ADVERTISE`, `MANAGE`… */
1911
+ tasks: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
1912
+ /** The login was granted `leads_retrieval` for this Page. */
1913
+ leadsAllowed: import("convex/values").VBoolean<boolean, "required">;
1914
+ /** False once a new listing left the Page out; kept while linked. */
1915
+ listed: import("convex/values").VBoolean<boolean, "required">;
1916
+ /** When Meta refused the Page's token; a new listing clears it. */
1917
+ invalidSince: import("convex/values").VFloat64<number | undefined, "optional">;
1918
+ createdAt: import("convex/values").VFloat64<number, "required">;
1919
+ updatedAt: import("convex/values").VFloat64<number, "required">;
1920
+ }, "required", "connectionId" | "createdAt" | "invalidSince" | "leadsAllowed" | "listed" | "name" | "ownerKey" | "pageId" | "tasks" | "tokenCipher" | "tokenIv" | "updatedAt">, {
1921
+ by_connectionId_and_pageId: ["connectionId", "pageId", "_creationTime"];
1922
+ by_pageId: ["pageId", "_creationTime"];
1923
+ }, {}, {}>;
1924
+ sitePages: import("convex/server").TableDefinition<import("convex/values").VObject<{
1925
+ connectionId: import("convex/values").GenericId<"metaConnections">;
1926
+ createdAt: number;
1927
+ failures?: number | undefined;
1928
+ lastError?: string | undefined;
1929
+ lastLeadAt?: number | undefined;
1930
+ lastReconcileAt?: number | undefined;
1931
+ name: string;
1932
+ nextReconcileAt: number;
1933
+ ownerKey: string;
1934
+ pageId: string;
1935
+ reconcileFrom: number;
1936
+ runId?: string | undefined;
1937
+ siteId: import("convex/values").GenericId<"sites">;
1938
+ subscribedAt?: number | undefined;
1939
+ subscriptionCheckedAt?: number | undefined;
1940
+ updatedAt: number;
1941
+ }, {
1942
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
1943
+ pageId: import("convex/values").VString<string, "required">;
1944
+ name: import("convex/values").VString<string, "required">;
1945
+ /** The owner whose connection (and Page token) the link reads with. */
1946
+ ownerKey: import("convex/values").VString<string, "required">;
1947
+ connectionId: import("convex/values").VId<import("convex/values").GenericId<"metaConnections">, "required">;
1948
+ /** When Meta confirmed the `leadgen` subscription. */
1949
+ subscribedAt: import("convex/values").VFloat64<number | undefined, "optional">;
1950
+ /**
1951
+ * When the reconciliation last made sure the app is still subscribed to
1952
+ * the Page: the subscription is the Page's and the app's, shared by every
1953
+ * host, so another host unlinking the Page may have taken it off.
1954
+ */
1955
+ subscriptionCheckedAt: import("convex/values").VFloat64<number | undefined, "optional">;
1956
+ /** Leads created from here on are the link's (ms). */
1957
+ reconcileFrom: import("convex/values").VFloat64<number, "required">;
1958
+ nextReconcileAt: import("convex/values").VFloat64<number, "required">;
1959
+ /** The run holding the link, as in the spend sync. */
1960
+ runId: import("convex/values").VString<string | undefined, "optional">;
1961
+ lastReconcileAt: import("convex/values").VFloat64<number | undefined, "optional">;
1962
+ lastLeadAt: import("convex/values").VFloat64<number | undefined, "optional">;
1963
+ failures: import("convex/values").VFloat64<number | undefined, "optional">;
1964
+ lastError: import("convex/values").VString<string | undefined, "optional">;
1965
+ createdAt: import("convex/values").VFloat64<number, "required">;
1966
+ updatedAt: import("convex/values").VFloat64<number, "required">;
1967
+ }, "required", "connectionId" | "createdAt" | "failures" | "lastError" | "lastLeadAt" | "lastReconcileAt" | "name" | "nextReconcileAt" | "ownerKey" | "pageId" | "reconcileFrom" | "runId" | "siteId" | "subscribedAt" | "subscriptionCheckedAt" | "updatedAt">, {
1968
+ by_connectionId: ["connectionId", "_creationTime"];
1969
+ by_nextReconcileAt: ["nextReconcileAt", "_creationTime"];
1970
+ by_pageId: ["pageId", "_creationTime"];
1971
+ by_siteId: ["siteId", "_creationTime"];
1972
+ }, {}, {}>;
1973
+ metaForms: import("convex/server").TableDefinition<import("convex/values").VObject<{
1974
+ createdTime?: number | undefined;
1975
+ cursor?: {
1976
+ linkId: import("convex/values").GenericId<"sitePages">;
1977
+ sec: number;
1978
+ } | undefined;
1979
+ formId: string;
1980
+ lastLead?: {
1981
+ at: number;
1982
+ siteId: import("convex/values").GenericId<"sites">;
1983
+ } | undefined;
1984
+ name: string;
1985
+ pageId: string;
1986
+ questions: {
1987
+ key: string;
1988
+ label: string;
1989
+ options?: {
1990
+ key: string;
1991
+ value: string;
1992
+ }[] | undefined;
1993
+ type: string;
1994
+ }[];
1995
+ status: string;
1996
+ syncedAt: number;
1997
+ whatsappButton?: boolean | undefined;
1998
+ }, {
1999
+ pageId: import("convex/values").VString<string, "required">;
2000
+ formId: import("convex/values").VString<string, "required">;
2001
+ name: import("convex/values").VString<string, "required">;
2002
+ status: import("convex/values").VString<string, "required">;
2003
+ questions: import("convex/values").VArray<{
2004
+ key: string;
2005
+ label: string;
2006
+ options?: {
2007
+ key: string;
2008
+ value: string;
2009
+ }[] | undefined;
2010
+ type: string;
2011
+ }[], import("convex/values").VObject<{
2012
+ key: string;
2013
+ label: string;
2014
+ options?: {
2015
+ key: string;
2016
+ value: string;
2017
+ }[] | undefined;
2018
+ type: string;
2019
+ }, {
2020
+ key: import("convex/values").VString<string, "required">;
2021
+ label: import("convex/values").VString<string, "required">;
2022
+ type: import("convex/values").VString<string, "required">;
2023
+ options: import("convex/values").VArray<{
2024
+ key: string;
2025
+ value: string;
2026
+ }[] | undefined, import("convex/values").VObject<{
2027
+ key: string;
2028
+ value: string;
2029
+ }, {
2030
+ key: import("convex/values").VString<string, "required">;
2031
+ value: import("convex/values").VString<string, "required">;
2032
+ }, "required", "key" | "value">, "optional">;
2033
+ }, "required", "key" | "label" | "options" | "type">, "required">;
2034
+ /** The end screen's WhatsApp button; absent when Meta does not say. */
2035
+ whatsappButton: import("convex/values").VBoolean<boolean | undefined, "optional">;
2036
+ createdTime: import("convex/values").VFloat64<number | undefined, "optional">;
2037
+ syncedAt: import("convex/values").VFloat64<number, "required">;
2038
+ /**
2039
+ * How far the reconciliation read this form's leads (Meta's seconds),
2040
+ * for the link it read them for: a new link starts from its own time.
2041
+ */
2042
+ cursor: import("convex/values").VObject<{
2043
+ linkId: import("convex/values").GenericId<"sitePages">;
2044
+ sec: number;
2045
+ } | undefined, {
2046
+ linkId: import("convex/values").VId<import("convex/values").GenericId<"sitePages">, "required">;
2047
+ sec: import("convex/values").VFloat64<number, "required">;
2048
+ }, "optional", "linkId" | "sec">;
2049
+ /** The last lead that came in from the form, for the site it fed. */
2050
+ lastLead: import("convex/values").VObject<{
2051
+ at: number;
2052
+ siteId: import("convex/values").GenericId<"sites">;
2053
+ } | undefined, {
2054
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
2055
+ at: import("convex/values").VFloat64<number, "required">;
2056
+ }, "optional", "at" | "siteId">;
2057
+ }, "required", "createdTime" | "cursor" | "cursor.linkId" | "cursor.sec" | "formId" | "lastLead" | "lastLead.at" | "lastLead.siteId" | "name" | "pageId" | "questions" | "status" | "syncedAt" | "whatsappButton">, {
2058
+ by_formId: ["formId", "_creationTime"];
2059
+ by_pageId: ["pageId", "_creationTime"];
2060
+ by_pageId_and_status: ["pageId", "status", "_creationTime"];
2061
+ }, {}, {}>;
2062
+ formRules: import("convex/server").TableDefinition<import("convex/values").VObject<{
2063
+ entryColumn?: string | undefined;
2064
+ firstContact: {
2065
+ brakes?: {
2066
+ businessHoursOnly: boolean;
2067
+ maxPerHour: number;
2068
+ waitMinutes: number;
2069
+ } | undefined;
2070
+ mode: "automatic" | "lead_starts" | "one_click";
2071
+ text?: string | undefined;
2072
+ };
2073
+ formId: string;
2074
+ rules: {
2075
+ answers: string[];
2076
+ questionKey: string;
2077
+ to: {
2078
+ column: string;
2079
+ } | {
2080
+ discard: string;
2081
+ };
2082
+ }[];
2083
+ setBy?: string | undefined;
2084
+ signatures: string[];
2085
+ siteId: import("convex/values").GenericId<"sites">;
2086
+ updatedAt: number;
2087
+ whatsappButtonConfirmed?: boolean | undefined;
2088
+ }, {
2089
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
2090
+ formId: import("convex/values").VString<string, "required">;
2091
+ entryColumn: import("convex/values").VString<string | undefined, "optional">;
2092
+ rules: import("convex/values").VArray<{
2093
+ answers: string[];
2094
+ questionKey: string;
2095
+ to: {
2096
+ column: string;
2097
+ } | {
2098
+ discard: string;
2099
+ };
2100
+ }[], import("convex/values").VObject<{
2101
+ answers: string[];
2102
+ questionKey: string;
2103
+ to: {
2104
+ column: string;
2105
+ } | {
2106
+ discard: string;
2107
+ };
2108
+ }, {
2109
+ questionKey: import("convex/values").VString<string, "required">;
2110
+ answers: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
2111
+ to: import("convex/values").VUnion<{
2112
+ column: string;
2113
+ } | {
2114
+ discard: string;
2115
+ }, [import("convex/values").VObject<{
2116
+ column: string;
2117
+ }, {
2118
+ column: import("convex/values").VString<string, "required">;
2119
+ }, "required", "column">, import("convex/values").VObject<{
2120
+ discard: string;
2121
+ }, {
2122
+ discard: import("convex/values").VString<string, "required">;
2123
+ }, "required", "discard">], "required", "column" | "discard">;
2124
+ }, "required", "answers" | "questionKey" | "to" | "to.column" | "to.discard">, "required">;
2125
+ /** Each rule's identity, for its monthly count (see leadFormRules.ts). */
2126
+ signatures: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
2127
+ firstContact: import("convex/values").VObject<{
2128
+ brakes?: {
2129
+ businessHoursOnly: boolean;
2130
+ maxPerHour: number;
2131
+ waitMinutes: number;
2132
+ } | undefined;
2133
+ mode: "automatic" | "lead_starts" | "one_click";
2134
+ text?: string | undefined;
2135
+ }, {
2136
+ mode: import("convex/values").VUnion<"automatic" | "lead_starts" | "one_click", [import("convex/values").VLiteral<"lead_starts", "required">, import("convex/values").VLiteral<"one_click", "required">, import("convex/values").VLiteral<"automatic", "required">], "required", never>;
2137
+ text: import("convex/values").VString<string | undefined, "optional">;
2138
+ brakes: import("convex/values").VObject<{
2139
+ businessHoursOnly: boolean;
2140
+ maxPerHour: number;
2141
+ waitMinutes: number;
2142
+ } | undefined, {
2143
+ waitMinutes: import("convex/values").VFloat64<number, "required">;
2144
+ maxPerHour: import("convex/values").VFloat64<number, "required">;
2145
+ businessHoursOnly: import("convex/values").VBoolean<boolean, "required">;
2146
+ }, "optional", "businessHoursOnly" | "maxPerHour" | "waitMinutes">;
2147
+ }, "required", "brakes" | "brakes.businessHoursOnly" | "brakes.maxPerHour" | "brakes.waitMinutes" | "mode" | "text">;
2148
+ whatsappButtonConfirmed: import("convex/values").VBoolean<boolean | undefined, "optional">;
2149
+ /** The owner that saved them, when the host named one. */
2150
+ setBy: import("convex/values").VString<string | undefined, "optional">;
2151
+ updatedAt: import("convex/values").VFloat64<number, "required">;
2152
+ }, "required", "entryColumn" | "firstContact" | "firstContact.brakes" | "firstContact.brakes.businessHoursOnly" | "firstContact.brakes.maxPerHour" | "firstContact.brakes.waitMinutes" | "firstContact.mode" | "firstContact.text" | "formId" | "rules" | "setBy" | "signatures" | "siteId" | "updatedAt" | "whatsappButtonConfirmed">, {
2153
+ by_siteId_and_formId: ["siteId", "formId", "_creationTime"];
2154
+ }, {}, {}>;
2155
+ formLeads: import("convex/server").TableDefinition<import("convex/values").VObject<{
2156
+ adId?: string | undefined;
2157
+ adsetId?: string | undefined;
2158
+ answers: {
2159
+ answers: string[];
2160
+ questionKey: string;
2161
+ }[];
2162
+ campaignId?: string | undefined;
2163
+ createdAt: number;
2164
+ decision: {
2165
+ column: string | null;
2166
+ } | {
2167
+ discard: string;
2168
+ };
2169
+ formId: string;
2170
+ isOrganic: boolean;
2171
+ leadId: import("convex/values").GenericId<"leads">;
2172
+ leadgenId: string;
2173
+ pageId: string;
2174
+ platform?: string | undefined;
2175
+ receivedAt: number;
2176
+ returned?: {
2177
+ at: number;
2178
+ reason: string;
2179
+ } | undefined;
2180
+ ruleIndex?: number | undefined;
2181
+ rulePath: number[];
2182
+ ruleSignature?: string | undefined;
2183
+ siteId: import("convex/values").GenericId<"sites">;
2184
+ }, {
2185
+ siteId: import("convex/values").VId<import("convex/values").GenericId<"sites">, "required">;
2186
+ pageId: import("convex/values").VString<string, "required">;
2187
+ formId: import("convex/values").VString<string, "required">;
2188
+ leadgenId: import("convex/values").VString<string, "required">;
2189
+ leadId: import("convex/values").VId<import("convex/values").GenericId<"leads">, "required">;
2190
+ receivedAt: import("convex/values").VFloat64<number, "required">;
2191
+ adId: import("convex/values").VString<string | undefined, "optional">;
2192
+ adsetId: import("convex/values").VString<string | undefined, "optional">;
2193
+ campaignId: import("convex/values").VString<string | undefined, "optional">;
2194
+ platform: import("convex/values").VString<string | undefined, "optional">;
2195
+ isOrganic: import("convex/values").VBoolean<boolean, "required">;
2196
+ answers: import("convex/values").VArray<{
2197
+ answers: string[];
2198
+ questionKey: string;
2199
+ }[], import("convex/values").VObject<{
2200
+ answers: string[];
2201
+ questionKey: string;
2202
+ }, {
2203
+ questionKey: import("convex/values").VString<string, "required">;
2204
+ answers: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
2205
+ }, "required", "answers" | "questionKey">, "required">;
2206
+ decision: import("convex/values").VUnion<{
2207
+ column: string | null;
2208
+ } | {
2209
+ discard: string;
2210
+ }, [import("convex/values").VObject<{
2211
+ column: string | null;
2212
+ }, {
2213
+ column: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
2214
+ }, "required", "column">, import("convex/values").VObject<{
2215
+ discard: string;
2216
+ }, {
2217
+ discard: import("convex/values").VString<string, "required">;
2218
+ }, "required", "discard">], "required", "column" | "discard">;
2219
+ rulePath: import("convex/values").VArray<number[], import("convex/values").VFloat64<number, "required">, "required">;
2220
+ ruleIndex: import("convex/values").VFloat64<number | undefined, "optional">;
2221
+ ruleSignature: import("convex/values").VString<string | undefined, "optional">;
2222
+ /** A discarded lead sent back to the funnel, and the reason it had. */
2223
+ returned: import("convex/values").VObject<{
2224
+ at: number;
2225
+ reason: string;
2226
+ } | undefined, {
2227
+ at: import("convex/values").VFloat64<number, "required">;
2228
+ reason: import("convex/values").VString<string, "required">;
2229
+ }, "optional", "at" | "reason">;
2230
+ createdAt: import("convex/values").VFloat64<number, "required">;
2231
+ }, "required", "adId" | "adsetId" | "answers" | "campaignId" | "createdAt" | "decision" | "decision.column" | "decision.discard" | "formId" | "isOrganic" | "leadId" | "leadgenId" | "pageId" | "platform" | "receivedAt" | "returned" | "returned.at" | "returned.reason" | "ruleIndex" | "rulePath" | "ruleSignature" | "siteId">, {
2232
+ by_leadId: ["leadId", "_creationTime"];
2233
+ by_leadgenId: ["leadgenId", "_creationTime"];
2234
+ by_siteId_and_formId_and_receivedAt: ["siteId", "formId", "receivedAt", "_creationTime"];
2235
+ by_siteId_and_formId_and_ruleSignature_and_receivedAt: ["siteId", "formId", "ruleSignature", "receivedAt", "_creationTime"];
2236
+ by_siteId_and_receivedAt: ["siteId", "receivedAt", "_creationTime"];
2237
+ }, {}, {}>;
2238
+ formLeadTombstones: import("convex/server").TableDefinition<import("convex/values").VObject<{
2239
+ leadgenId: string;
2240
+ removedAt: number;
2241
+ }, {
2242
+ leadgenId: import("convex/values").VString<string, "required">;
2243
+ removedAt: import("convex/values").VFloat64<number, "required">;
2244
+ }, "required", "leadgenId" | "removedAt">, {
2245
+ by_leadgenId: ["leadgenId", "_creationTime"];
2246
+ }, {}, {}>;
2247
+ formLeadFailures: import("convex/server").TableDefinition<import("convex/values").VObject<{
2248
+ attempts: number;
2249
+ formId: string;
2250
+ lastAt: number;
2251
+ lastCode: string;
2252
+ leadgenId: string;
2253
+ pageId: string;
2254
+ skippedAt?: number | undefined;
2255
+ }, {
2256
+ leadgenId: import("convex/values").VString<string, "required">;
2257
+ pageId: import("convex/values").VString<string, "required">;
2258
+ formId: import("convex/values").VString<string, "required">;
2259
+ attempts: import("convex/values").VFloat64<number, "required">;
2260
+ lastCode: import("convex/values").VString<string, "required">;
2261
+ lastAt: import("convex/values").VFloat64<number, "required">;
2262
+ skippedAt: import("convex/values").VFloat64<number | undefined, "optional">;
2263
+ }, "required", "attempts" | "formId" | "lastAt" | "lastCode" | "leadgenId" | "pageId" | "skippedAt">, {
2264
+ by_leadgenId: ["leadgenId", "_creationTime"];
2265
+ }, {}, {}>;
2266
+ metaFormLeadHandler: import("convex/server").TableDefinition<import("convex/values").VObject<{
2267
+ handle: string;
2268
+ key: "handler";
2269
+ updatedAt: number;
2270
+ }, {
2271
+ key: import("convex/values").VLiteral<"handler", "required">;
2272
+ handle: import("convex/values").VString<string, "required">;
2273
+ updatedAt: import("convex/values").VFloat64<number, "required">;
2274
+ }, "required", "handle" | "key" | "updatedAt">, {
2275
+ by_key: ["key", "_creationTime"];
2276
+ }, {}, {}>;
2277
+ metaLeadsLoop: import("convex/server").TableDefinition<import("convex/values").VObject<{
2278
+ jobId: import("convex/values").GenericId<"_scheduled_functions">;
2279
+ key: "loop";
2280
+ scheduledFor: number;
2281
+ }, {
2282
+ key: import("convex/values").VLiteral<"loop", "required">;
2283
+ scheduledFor: import("convex/values").VFloat64<number, "required">;
2284
+ jobId: import("convex/values").VId<import("convex/values").GenericId<"_scheduled_functions">, "required">;
2285
+ }, "required", "jobId" | "key" | "scheduledFor">, {
2286
+ by_key: ["key", "_creationTime"];
2287
+ }, {}, {}>;
1879
2288
  }, true>;
1880
2289
  export default _default;
1881
2290
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsgBI,oEAAoE;;QAEpE,oEAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqMpE,0EAA0E;;QAE1E,sEAAsE"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8gBI,oEAAoE;;QAEpE,oEAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqMpE,0EAA0E;;QAE1E,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+DtE,oEAAoE;;QAEpE,6DAA6D;;QAE7D,qEAAqE;;QAErE,mEAAmE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcnE,uEAAuE;;;QAGvE,sDAAsD;;QAEtD;;;;WAIG;;QAEH,sDAAsD;;;QAGtD,sDAAsD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqBtD,uEAAuE;;;;QAIvE;;;WAGG;;;;;;;;QAIH,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAarE,0EAA0E;;;;;;;;;;;;;;;;;;;;;;;;QAI1E,0DAA0D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwB1D,uEAAuE"}