@iann29/rastro 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/README.md +9 -1
  2. package/agent/integration.md +23 -1
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +114 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +54 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +642 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +391 -9
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +14 -0
  13. package/dist/component/_generated/api.d.ts.map +1 -1
  14. package/dist/component/_generated/api.js.map +1 -1
  15. package/dist/component/_generated/component.d.ts +278 -1
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/_generated/server.d.ts +4 -0
  18. package/dist/component/_generated/server.d.ts.map +1 -1
  19. package/dist/component/_generated/server.js.map +1 -1
  20. package/dist/component/constants.d.ts +5 -0
  21. package/dist/component/constants.d.ts.map +1 -1
  22. package/dist/component/constants.js +10 -0
  23. package/dist/component/constants.js.map +1 -1
  24. package/dist/component/convex.config.d.ts +4 -0
  25. package/dist/component/convex.config.js +9 -0
  26. package/dist/component/convex.config.js.map +1 -1
  27. package/dist/component/errors.d.ts +1 -1
  28. package/dist/component/errors.d.ts.map +1 -1
  29. package/dist/component/errors.js.map +1 -1
  30. package/dist/component/leads.d.ts +69 -3
  31. package/dist/component/leads.d.ts.map +1 -1
  32. package/dist/component/leads.js +419 -16
  33. package/dist/component/leads.js.map +1 -1
  34. package/dist/component/meta.d.ts +358 -0
  35. package/dist/component/meta.d.ts.map +1 -0
  36. package/dist/component/meta.js +1295 -0
  37. package/dist/component/meta.js.map +1 -0
  38. package/dist/component/metaCapi.d.ts +162 -0
  39. package/dist/component/metaCapi.d.ts.map +1 -0
  40. package/dist/component/metaCapi.js +754 -0
  41. package/dist/component/metaCapi.js.map +1 -0
  42. package/dist/component/metaFake.d.ts +5 -0
  43. package/dist/component/metaFake.d.ts.map +1 -0
  44. package/dist/component/metaFake.js +225 -0
  45. package/dist/component/metaFake.js.map +1 -0
  46. package/dist/component/metaGraph.d.ts +165 -0
  47. package/dist/component/metaGraph.d.ts.map +1 -0
  48. package/dist/component/metaGraph.js +507 -0
  49. package/dist/component/metaGraph.js.map +1 -0
  50. package/dist/component/metaSync.d.ts +186 -0
  51. package/dist/component/metaSync.d.ts.map +1 -0
  52. package/dist/component/metaSync.js +961 -0
  53. package/dist/component/metaSync.js.map +1 -0
  54. package/dist/component/pipeline.d.ts +99 -0
  55. package/dist/component/pipeline.d.ts.map +1 -0
  56. package/dist/component/pipeline.js +337 -0
  57. package/dist/component/pipeline.js.map +1 -0
  58. package/dist/component/schema.d.ts +404 -2
  59. package/dist/component/schema.d.ts.map +1 -1
  60. package/dist/component/schema.js +168 -2
  61. package/dist/component/schema.js.map +1 -1
  62. package/dist/component/secrets.d.ts +15 -0
  63. package/dist/component/secrets.d.ts.map +1 -0
  64. package/dist/component/secrets.js +67 -0
  65. package/dist/component/secrets.js.map +1 -0
  66. package/dist/component/validators.d.ts +1052 -15
  67. package/dist/component/validators.d.ts.map +1 -1
  68. package/dist/component/validators.js +307 -3
  69. package/dist/component/validators.js.map +1 -1
  70. package/dist/tracker/generated.d.ts +1 -1
  71. package/dist/tracker/generated.d.ts.map +1 -1
  72. package/dist/tracker/generated.js +1 -1
  73. package/dist/tracker/generated.js.map +1 -1
  74. package/dist/ui/campaigns/CampaignsView.d.ts +48 -0
  75. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -0
  76. package/dist/ui/campaigns/CampaignsView.js +47 -0
  77. package/dist/ui/campaigns/CampaignsView.js.map +1 -0
  78. package/dist/ui/campaigns/Conversions.d.ts +16 -0
  79. package/dist/ui/campaigns/Conversions.d.ts.map +1 -0
  80. package/dist/ui/campaigns/Conversions.js +40 -0
  81. package/dist/ui/campaigns/Conversions.js.map +1 -0
  82. package/dist/ui/campaigns/Drawer.d.ts +24 -0
  83. package/dist/ui/campaigns/Drawer.d.ts.map +1 -0
  84. package/dist/ui/campaigns/Drawer.js +120 -0
  85. package/dist/ui/campaigns/Drawer.js.map +1 -0
  86. package/dist/ui/campaigns/Icons.d.ts +35 -0
  87. package/dist/ui/campaigns/Icons.d.ts.map +1 -0
  88. package/dist/ui/campaigns/Icons.js +41 -0
  89. package/dist/ui/campaigns/Icons.js.map +1 -0
  90. package/dist/ui/campaigns/Summary.d.ts +21 -0
  91. package/dist/ui/campaigns/Summary.d.ts.map +1 -0
  92. package/dist/ui/campaigns/Summary.js +56 -0
  93. package/dist/ui/campaigns/Summary.js.map +1 -0
  94. package/dist/ui/campaigns/Thumbnail.d.ts +11 -0
  95. package/dist/ui/campaigns/Thumbnail.d.ts.map +1 -0
  96. package/dist/ui/campaigns/Thumbnail.js +23 -0
  97. package/dist/ui/campaigns/Thumbnail.js.map +1 -0
  98. package/dist/ui/campaigns/Tree.d.ts +12 -0
  99. package/dist/ui/campaigns/Tree.d.ts.map +1 -0
  100. package/dist/ui/campaigns/Tree.js +105 -0
  101. package/dist/ui/campaigns/Tree.js.map +1 -0
  102. package/dist/ui/campaigns/glyphs.d.ts +20 -0
  103. package/dist/ui/campaigns/glyphs.d.ts.map +1 -0
  104. package/dist/ui/campaigns/glyphs.js +19 -0
  105. package/dist/ui/campaigns/glyphs.js.map +1 -0
  106. package/dist/ui/campaigns/index.d.ts +4 -0
  107. package/dist/ui/campaigns/index.d.ts.map +1 -0
  108. package/dist/ui/campaigns/index.js +3 -0
  109. package/dist/ui/campaigns/index.js.map +1 -0
  110. package/dist/ui/campaigns/labels.d.ts +53 -0
  111. package/dist/ui/campaigns/labels.d.ts.map +1 -0
  112. package/dist/ui/campaigns/labels.js +169 -0
  113. package/dist/ui/campaigns/labels.js.map +1 -0
  114. package/dist/ui/campaigns/model.d.ts +99 -0
  115. package/dist/ui/campaigns/model.d.ts.map +1 -0
  116. package/dist/ui/campaigns/model.js +230 -0
  117. package/dist/ui/campaigns/model.js.map +1 -0
  118. package/dist/ui/campaigns/modes.d.ts +18 -0
  119. package/dist/ui/campaigns/modes.d.ts.map +1 -0
  120. package/dist/ui/campaigns/modes.js +7 -0
  121. package/dist/ui/campaigns/modes.js.map +1 -0
  122. package/dist/ui/index.d.ts +21 -0
  123. package/dist/ui/index.d.ts.map +1 -0
  124. package/dist/ui/index.js +20 -0
  125. package/dist/ui/index.js.map +1 -0
  126. package/dist/ui/integrations/AccountPicker.d.ts +26 -0
  127. package/dist/ui/integrations/AccountPicker.d.ts.map +1 -0
  128. package/dist/ui/integrations/AccountPicker.js +101 -0
  129. package/dist/ui/integrations/AccountPicker.js.map +1 -0
  130. package/dist/ui/integrations/ClientCards.d.ts +17 -0
  131. package/dist/ui/integrations/ClientCards.d.ts.map +1 -0
  132. package/dist/ui/integrations/ClientCards.js +42 -0
  133. package/dist/ui/integrations/ClientCards.js.map +1 -0
  134. package/dist/ui/integrations/ClientsTable.d.ts +36 -0
  135. package/dist/ui/integrations/ClientsTable.d.ts.map +1 -0
  136. package/dist/ui/integrations/ClientsTable.js +143 -0
  137. package/dist/ui/integrations/ClientsTable.js.map +1 -0
  138. package/dist/ui/integrations/Connect.d.ts +35 -0
  139. package/dist/ui/integrations/Connect.d.ts.map +1 -0
  140. package/dist/ui/integrations/Connect.js +62 -0
  141. package/dist/ui/integrations/Connect.js.map +1 -0
  142. package/dist/ui/integrations/Connection.d.ts +37 -0
  143. package/dist/ui/integrations/Connection.d.ts.map +1 -0
  144. package/dist/ui/integrations/Connection.js +108 -0
  145. package/dist/ui/integrations/Connection.js.map +1 -0
  146. package/dist/ui/integrations/Dialogs.d.ts +21 -0
  147. package/dist/ui/integrations/Dialogs.d.ts.map +1 -0
  148. package/dist/ui/integrations/Dialogs.js +34 -0
  149. package/dist/ui/integrations/Dialogs.js.map +1 -0
  150. package/dist/ui/integrations/EventsFeed.d.ts +15 -0
  151. package/dist/ui/integrations/EventsFeed.d.ts.map +1 -0
  152. package/dist/ui/integrations/EventsFeed.js +61 -0
  153. package/dist/ui/integrations/EventsFeed.js.map +1 -0
  154. package/dist/ui/integrations/EventsSheet.d.ts +34 -0
  155. package/dist/ui/integrations/EventsSheet.d.ts.map +1 -0
  156. package/dist/ui/integrations/EventsSheet.js +136 -0
  157. package/dist/ui/integrations/EventsSheet.js.map +1 -0
  158. package/dist/ui/integrations/Icons.d.ts +38 -0
  159. package/dist/ui/integrations/Icons.d.ts.map +1 -0
  160. package/dist/ui/integrations/Icons.js +40 -0
  161. package/dist/ui/integrations/Icons.js.map +1 -0
  162. package/dist/ui/integrations/IntegrationsView.d.ts +15 -0
  163. package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -0
  164. package/dist/ui/integrations/IntegrationsView.js +141 -0
  165. package/dist/ui/integrations/IntegrationsView.js.map +1 -0
  166. package/dist/ui/integrations/Overlay.d.ts +18 -0
  167. package/dist/ui/integrations/Overlay.d.ts.map +1 -0
  168. package/dist/ui/integrations/Overlay.js +36 -0
  169. package/dist/ui/integrations/Overlay.js.map +1 -0
  170. package/dist/ui/integrations/Partner.d.ts +14 -0
  171. package/dist/ui/integrations/Partner.d.ts.map +1 -0
  172. package/dist/ui/integrations/Partner.js +38 -0
  173. package/dist/ui/integrations/Partner.js.map +1 -0
  174. package/dist/ui/integrations/RowMenu.d.ts +15 -0
  175. package/dist/ui/integrations/RowMenu.d.ts.map +1 -0
  176. package/dist/ui/integrations/RowMenu.js +47 -0
  177. package/dist/ui/integrations/RowMenu.js.map +1 -0
  178. package/dist/ui/integrations/UnlinkDialog.d.ts +18 -0
  179. package/dist/ui/integrations/UnlinkDialog.d.ts.map +1 -0
  180. package/dist/ui/integrations/UnlinkDialog.js +29 -0
  181. package/dist/ui/integrations/UnlinkDialog.js.map +1 -0
  182. package/dist/ui/integrations/audience.d.ts +12 -0
  183. package/dist/ui/integrations/audience.d.ts.map +1 -0
  184. package/dist/ui/integrations/audience.js +12 -0
  185. package/dist/ui/integrations/audience.js.map +1 -0
  186. package/dist/ui/integrations/format.d.ts +28 -0
  187. package/dist/ui/integrations/format.d.ts.map +1 -0
  188. package/dist/ui/integrations/format.js +101 -0
  189. package/dist/ui/integrations/format.js.map +1 -0
  190. package/dist/ui/integrations/index.d.ts +5 -0
  191. package/dist/ui/integrations/index.d.ts.map +1 -0
  192. package/dist/ui/integrations/index.js +3 -0
  193. package/dist/ui/integrations/index.js.map +1 -0
  194. package/dist/ui/integrations/modal.d.ts +10 -0
  195. package/dist/ui/integrations/modal.d.ts.map +1 -0
  196. package/dist/ui/integrations/modal.js +77 -0
  197. package/dist/ui/integrations/modal.js.map +1 -0
  198. package/dist/ui/integrations/model.d.ts +99 -0
  199. package/dist/ui/integrations/model.d.ts.map +1 -0
  200. package/dist/ui/integrations/model.js +164 -0
  201. package/dist/ui/integrations/model.js.map +1 -0
  202. package/dist/ui/integrations/parts.d.ts +36 -0
  203. package/dist/ui/integrations/parts.d.ts.map +1 -0
  204. package/dist/ui/integrations/parts.js +85 -0
  205. package/dist/ui/integrations/parts.js.map +1 -0
  206. package/dist/ui/integrations/types.d.ts +146 -0
  207. package/dist/ui/integrations/types.d.ts.map +1 -0
  208. package/dist/ui/integrations/types.js +2 -0
  209. package/dist/ui/integrations/types.js.map +1 -0
  210. package/dist/ui/metrics.d.ts +106 -0
  211. package/dist/ui/metrics.d.ts.map +1 -0
  212. package/dist/ui/metrics.js +166 -0
  213. package/dist/ui/metrics.js.map +1 -0
  214. package/dist/ui/portfolio/PortfolioView.d.ts +26 -0
  215. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -0
  216. package/dist/ui/portfolio/PortfolioView.js +216 -0
  217. package/dist/ui/portfolio/PortfolioView.js.map +1 -0
  218. package/dist/ui/portfolio/SpendChart.d.ts +10 -0
  219. package/dist/ui/portfolio/SpendChart.d.ts.map +1 -0
  220. package/dist/ui/portfolio/SpendChart.js +196 -0
  221. package/dist/ui/portfolio/SpendChart.js.map +1 -0
  222. package/dist/ui/portfolio/alerts.d.ts +74 -0
  223. package/dist/ui/portfolio/alerts.d.ts.map +1 -0
  224. package/dist/ui/portfolio/alerts.js +291 -0
  225. package/dist/ui/portfolio/alerts.js.map +1 -0
  226. package/dist/ui/portfolio/figures.d.ts +79 -0
  227. package/dist/ui/portfolio/figures.d.ts.map +1 -0
  228. package/dist/ui/portfolio/figures.js +103 -0
  229. package/dist/ui/portfolio/figures.js.map +1 -0
  230. package/dist/ui/portfolio/format.d.ts +8 -0
  231. package/dist/ui/portfolio/format.d.ts.map +1 -0
  232. package/dist/ui/portfolio/format.js +28 -0
  233. package/dist/ui/portfolio/format.js.map +1 -0
  234. package/dist/ui/sample.d.ts +536 -0
  235. package/dist/ui/sample.d.ts.map +1 -0
  236. package/dist/ui/sample.js +574 -0
  237. package/dist/ui/sample.js.map +1 -0
  238. package/dist/ui/seed.d.ts +188 -0
  239. package/dist/ui/seed.d.ts.map +1 -0
  240. package/dist/ui/seed.js +563 -0
  241. package/dist/ui/seed.js.map +1 -0
  242. package/dist/ui/ui.css +3424 -0
  243. package/docs/federation.md +46 -1
  244. package/docs/meta-ads.md +795 -0
  245. package/docs/upgrading.md +116 -0
  246. package/llms.txt +3 -0
  247. package/package.json +15 -3
  248. package/src/component/_generated/api.ts +14 -0
  249. package/src/component/_generated/component.ts +324 -1
  250. package/src/component/_generated/server.ts +4 -0
  251. package/src/component/constants.ts +10 -0
  252. package/src/component/convex.config.ts +9 -0
  253. package/src/component/errors.ts +5 -1
  254. package/src/component/leads.ts +517 -17
  255. package/src/component/meta.ts +1525 -0
  256. package/src/component/metaCapi.ts +921 -0
  257. package/src/component/metaFake.ts +277 -0
  258. package/src/component/metaGraph.ts +722 -0
  259. package/src/component/metaSync.ts +1164 -0
  260. package/src/component/pipeline.ts +410 -0
  261. package/src/component/schema.ts +197 -1
  262. package/src/component/secrets.ts +98 -0
  263. package/src/component/validators.ts +376 -3
  264. package/src/tracker/generated.ts +1 -1
  265. package/src/ui/seed.ts +755 -0
@@ -0,0 +1,574 @@
1
+ import { AD_ORIGIN, brt, DAY_MS, DAYS, LOJA_X_AD, MARINA, MINUTE_MS, PROVADOR_LEADS, SAMPLE_NOW, SAMPLE_PREVIOUS_RANGE, SAMPLE_RANGE, seriesOf, SITES, } from "./seed.js";
2
+ export { SAMPLE_NOW, SAMPLE_PREVIOUS_RANGE, SAMPLE_RANGE, SAMPLE_SEED, } from "./seed.js";
3
+ const counters = ([, leads, qualified, won, revenue]) => ({
4
+ leads,
5
+ qualified,
6
+ won,
7
+ revenueCents: revenue * 100,
8
+ });
9
+ // Reach is not in the mockups; a plausible CPM and click rate stand in.
10
+ const spendOf = ([spend]) => {
11
+ const impressions = spend * 48;
12
+ return {
13
+ spendCents: spend * 100,
14
+ impressions,
15
+ clicks: Math.round(impressions * 0.021),
16
+ };
17
+ };
18
+ const zero = () => ({
19
+ leads: 0,
20
+ qualified: 0,
21
+ won: 0,
22
+ revenueCents: 0,
23
+ spendCents: 0,
24
+ impressions: 0,
25
+ clicks: 0,
26
+ });
27
+ function addInto(into, row) {
28
+ into.leads += row.leads;
29
+ into.qualified += row.qualified;
30
+ into.won += row.won;
31
+ into.revenueCents += row.revenueCents;
32
+ if (into.spendCents != null && row.spendCents != null) {
33
+ into.spendCents += row.spendCents;
34
+ }
35
+ if (into.impressions != null && row.impressions != null) {
36
+ into.impressions += row.impressions;
37
+ }
38
+ if (into.clicks != null && row.clicks != null)
39
+ into.clicks += row.clicks;
40
+ }
41
+ // The component's order: most sales, then most leads, then the key.
42
+ const byWonThenLeads = (key) => (left, right) => right.won - left.won ||
43
+ right.leads - left.leads ||
44
+ key(left).localeCompare(key(right));
45
+ function buildReport(sites, period) {
46
+ const range = period === "now" ? SAMPLE_RANGE : SAMPLE_PREVIOUS_RANGE;
47
+ const totals = zero();
48
+ const origins = new Map();
49
+ const campaigns = [];
50
+ const bySite = [];
51
+ for (const site of sites) {
52
+ const paid = zero();
53
+ for (const campaign of site.campaigns) {
54
+ const campaignRow = {
55
+ campaignId: campaign.campaignId,
56
+ campaignName: campaign.name,
57
+ ...zero(),
58
+ adsets: [],
59
+ };
60
+ for (const adset of campaign.adsets) {
61
+ const adsetRow = {
62
+ adsetId: adset.adsetId,
63
+ adsetName: adset.name,
64
+ ...zero(),
65
+ ads: [],
66
+ };
67
+ for (const ad of adset.ads) {
68
+ const figures = period === "now" ? ad.now : ad.before;
69
+ if (!figures)
70
+ continue;
71
+ const row = {
72
+ adId: ad.adId,
73
+ siteId: site.siteId,
74
+ adName: ad.name,
75
+ sourceApp: ad.sourceApp,
76
+ sourceUrl: null,
77
+ title: null,
78
+ thumbnailUrl: null,
79
+ creativeType: ad.creativeType,
80
+ adStatus: "ACTIVE",
81
+ ...counters(figures),
82
+ ...spendOf(figures),
83
+ };
84
+ adsetRow.ads.push(row);
85
+ addInto(adsetRow, row);
86
+ }
87
+ if (adsetRow.ads.length === 0)
88
+ continue;
89
+ adsetRow.ads.sort(byWonThenLeads((row) => row.adId));
90
+ campaignRow.adsets.push(adsetRow);
91
+ addInto(campaignRow, adsetRow);
92
+ }
93
+ if (campaignRow.adsets.length === 0)
94
+ continue;
95
+ campaignRow.adsets.sort(byWonThenLeads((row) => row.adsetId ?? ""));
96
+ campaigns.push(campaignRow);
97
+ addInto(paid, campaignRow);
98
+ }
99
+ const siteTotals = {
100
+ leads: paid.leads,
101
+ qualified: paid.qualified,
102
+ won: paid.won,
103
+ revenueCents: paid.revenueCents,
104
+ };
105
+ const adOrigin = origins.get(AD_ORIGIN) ?? zero();
106
+ addInto(adOrigin, paid);
107
+ origins.set(AD_ORIGIN, adOrigin);
108
+ const organic = period === "now" ? site.organic : (site.organicBefore ?? {});
109
+ for (const [key, [leads, qualified, won, revenue]] of Object.entries(organic)) {
110
+ const row = { leads, qualified, won, revenueCents: revenue * 100 };
111
+ addInto(siteTotals, row);
112
+ const origin = origins.get(key) ?? {
113
+ leads: 0,
114
+ qualified: 0,
115
+ won: 0,
116
+ revenueCents: 0,
117
+ };
118
+ addInto(origin, row);
119
+ origins.set(key, origin);
120
+ }
121
+ addInto(totals, siteTotals);
122
+ totals.spendCents += paid.spendCents;
123
+ totals.impressions += paid.impressions;
124
+ totals.clicks += paid.clicks;
125
+ bySite.push({
126
+ siteId: site.siteId,
127
+ ...siteTotals,
128
+ paid: {
129
+ leads: paid.leads,
130
+ qualified: paid.qualified,
131
+ won: paid.won,
132
+ revenueCents: paid.revenueCents,
133
+ },
134
+ spendCents: paid.spendCents,
135
+ spendCurrency: "BRL",
136
+ currencyMismatch: false,
137
+ });
138
+ }
139
+ campaigns.sort(byWonThenLeads((row) => row.campaignId ?? ""));
140
+ return {
141
+ ...range,
142
+ currency: "BRL",
143
+ totals,
144
+ // Spend buys the ad origin only; the organic ones report it as unknown.
145
+ origins: [...origins]
146
+ .map(([key, row]) => ({
147
+ key,
148
+ ...row,
149
+ spendCents: row.spendCents ?? null,
150
+ impressions: row.impressions ?? null,
151
+ clicks: row.clicks ?? null,
152
+ }))
153
+ .filter((row) => row.leads > 0)
154
+ .sort(byWonThenLeads((row) => row.key)),
155
+ campaigns,
156
+ bySite,
157
+ spendCurrency: "BRL",
158
+ currencyMismatch: false,
159
+ spendIncomplete: false,
160
+ };
161
+ }
162
+ /** Day by day sums of several series over the same days. */
163
+ function sumSeries(series, days = DAYS) {
164
+ return days.map((dayStart, day) => {
165
+ const total = {
166
+ dayStart,
167
+ leads: 0,
168
+ qualified: 0,
169
+ won: 0,
170
+ revenueCents: 0,
171
+ spendCents: 0,
172
+ };
173
+ for (const line of series) {
174
+ const row = line[day];
175
+ if (!row)
176
+ continue;
177
+ total.leads += row.leads;
178
+ total.qualified += row.qualified;
179
+ total.won += row.won;
180
+ total.revenueCents += row.revenueCents;
181
+ total.spendCents += row.spendCents ?? 0;
182
+ }
183
+ return total;
184
+ });
185
+ }
186
+ const MARINA_JOURNEY = {
187
+ lead: MARINA,
188
+ ad: {
189
+ adId: LOJA_X_AD.provador,
190
+ adName: "Vídeo provador 15s",
191
+ adsetName: "Mulheres 25–45 · Serra Gaúcha",
192
+ campaignName: "Coleção Verão · Conversas",
193
+ sourceApp: "instagram",
194
+ sourceUrl: null,
195
+ title: null,
196
+ },
197
+ visitorId: null,
198
+ events: [
199
+ { type: "created", at: brt(9, 26, 10, 41), revenueCents: null },
200
+ { type: "qualified", at: brt(9, 26, 11, 20), revenueCents: null },
201
+ { type: "won", at: brt(9, 28, 9, 15), revenueCents: 89_000 },
202
+ ],
203
+ };
204
+ /** The sample ad's name, as the catalog would have it. */
205
+ const sampleAdName = (adId) => {
206
+ for (const site of SITES) {
207
+ for (const campaign of site.campaigns) {
208
+ for (const adset of campaign.adsets) {
209
+ const ad = adset.ads.find((row) => row.adId === adId);
210
+ if (ad)
211
+ return ad.name;
212
+ }
213
+ }
214
+ }
215
+ return null;
216
+ };
217
+ const conversion = (eventId, eventName, leadId, leadLabel, adId, at, value) => ({
218
+ eventId,
219
+ eventName,
220
+ leadId,
221
+ leadLabel,
222
+ adId,
223
+ adName: sampleAdName(adId),
224
+ valueCents: value === null ? null : value * 100,
225
+ status: "sent",
226
+ createdAt: at,
227
+ sentAt: at + 2_000,
228
+ });
229
+ // Newest first, as `meta.conversions` returns them.
230
+ const LOJA_X_CONVERSIONS = [
231
+ conversion("sample-event-marina-won", "Purchase", "sample-lead-marina", "Marina C.", LOJA_X_AD.provador, brt(9, 28, 9, 15), 890),
232
+ conversion("sample-event-paula-qualified", "QualifiedLead", "sample-lead-paula", "Paula R.", LOJA_X_AD.provador, brt(9, 28, 6, 15), null),
233
+ conversion("sample-event-julia-won", "Purchase", "sample-lead-julia", "Júlia S.", LOJA_X_AD.provador, brt(9, 27, 16, 2), 1240),
234
+ conversion("sample-event-camila-won", "Purchase", "sample-lead-camila", "Camila F.", LOJA_X_AD.stories, brt(9, 27, 11, 48), 640),
235
+ conversion("sample-event-carla-won", "Purchase", "sample-lead-carla", "Carla M.", LOJA_X_AD.provador, brt(9, 27, 10, 30), 1020),
236
+ ];
237
+ function statusOf(site) {
238
+ return {
239
+ siteId: site.siteId,
240
+ linked: true,
241
+ adAccounts: [
242
+ {
243
+ ...site.adAccount,
244
+ currency: "BRL",
245
+ timezone: "America/Sao_Paulo",
246
+ syncState: "live",
247
+ lastSyncAt: SAMPLE_NOW - 12 * MINUTE_MS,
248
+ lastError: null,
249
+ backfill: null,
250
+ },
251
+ ],
252
+ pixel: {
253
+ enabled: site.pixel !== null,
254
+ pixelId: site.pixel?.pixelId ?? null,
255
+ },
256
+ conversions: {
257
+ pending: site.pixel?.pending ?? 0,
258
+ sent: site.pixel?.sent ?? 0,
259
+ failed: 0,
260
+ },
261
+ };
262
+ }
263
+ /** A site's paid series (`origin: "ctwa_ad"`): the sum of its ads. */
264
+ const paidSeries = (site) => sumSeries([...seriesOf(site).values()].map((line) => line.now));
265
+ const LOJA_X = SITES[0];
266
+ /** The agency's clients, in the mockups' order. */
267
+ export const SAMPLE_SITES = SITES.map(({ siteId, name, segment }) => ({
268
+ siteId,
269
+ name,
270
+ segment,
271
+ }));
272
+ /** One client opened: Campanhas (A) and its Criativos mode (C), Loja X. */
273
+ export const sampleCampaigns = {
274
+ siteId: LOJA_X.siteId,
275
+ report: buildReport([LOJA_X], "now"),
276
+ previous: buildReport([LOJA_X], "before"),
277
+ /** Only the leads the ads bought (`origin: "ctwa_ad"`), with spend. */
278
+ daily: paidSeries(LOJA_X),
279
+ status: [statusOf(LOJA_X)],
280
+ conversions: LOJA_X_CONVERSIONS,
281
+ selectedAdId: LOJA_X_AD.provador,
282
+ /** Every ad's own series (`leads.daily` with its `adId`). */
283
+ adDaily: Object.fromEntries([...seriesOf(LOJA_X)].map(([adId, line]) => [adId, line.now])),
284
+ adLeads: { [LOJA_X_AD.provador]: PROVADOR_LEADS },
285
+ selectedLeadId: MARINA.leadId,
286
+ journey: MARINA_JOURNEY,
287
+ now: SAMPLE_NOW,
288
+ };
289
+ /** The agency home (B): four clients, their sales per day and Meta links. */
290
+ export const samplePortfolio = {
291
+ sites: SAMPLE_SITES,
292
+ report: buildReport(SITES, "now"),
293
+ /** The 30 days before, for the changes against the previous period. */
294
+ previous: buildReport(SITES, "before"),
295
+ /** Per site, only the leads the ads bought (`origin: "ctwa_ad"`). */
296
+ dailyBySite: Object.fromEntries(SITES.map((site) => [site.siteId, paidSeries(site)])),
297
+ status: SITES.map(statusOf),
298
+ now: SAMPLE_NOW,
299
+ };
300
+ /**
301
+ * The leads the mockups name, with their times: the seed writes them as part
302
+ * of their ad's day (they fit the day's counts) so the drawer and the journey
303
+ * show them. `qualifiedAt` is when a lead that went on to buy was qualified.
304
+ */
305
+ export const SAMPLE_NAMED_LEADS = PROVADOR_LEADS.map((summary) => ({
306
+ ...summary,
307
+ qualifiedAt: summary.leadId === MARINA.leadId
308
+ ? brt(9, 26, 11, 20)
309
+ : summary.stage === "won"
310
+ ? summary.firstAt + 45 * MINUTE_MS
311
+ : summary.stage === "qualified"
312
+ ? summary.stageAt
313
+ : null,
314
+ }));
315
+ // ── Integrações (wave 3) ────────────────────────────────────────────────────
316
+ // The "Conectar a Meta" screens on this same agency, derived from the sites
317
+ // above (the seed and the fake read them too): their ad accounts, the pixels
318
+ // they have (Loja X and Pet Mania; Clínica Sorriso and Casa Aurora none), the
319
+ // sales and qualified leads the ads bought, Loja X's conversions. What the
320
+ // sample does not hold (who authorized, the backfill's progress, the board's
321
+ // columns) is the artboards' own.
322
+ const INT_NOW = SAMPLE_NOW;
323
+ const [INT_LX, INT_CS, INT_PM, INT_CA] = SITES;
324
+ const PORTFOLIO_BY_SITE = new Map((samplePortfolio.report.bySite ?? []).map((row) => [row.siteId, row]));
325
+ const pixelName = (site) => `Pixel ${site.name}`;
326
+ /** Ad accounts the login released: every site's, Casa Aurora's still free. */
327
+ const INT_ACCOUNTS = SITES.map((site) => ({
328
+ ...site.adAccount,
329
+ currency: "BRL",
330
+ timezone: "America/Sao_Paulo",
331
+ linkedSiteId: site === INT_CA ? null : site.siteId,
332
+ }));
333
+ const INT_CONNECTION = {
334
+ status: "active",
335
+ businessName: "Connection Company",
336
+ authorizedBy: { name: "Ian Rodrigues" },
337
+ authorizedAt: brt(9, 1, 9, 30),
338
+ invalidSince: null,
339
+ lastError: null,
340
+ adAccounts: INT_ACCOUNTS,
341
+ pixels: SITES.flatMap((site) => site.pixel ? [{ pixelId: site.pixel.pixelId, name: pixelName(site) }] : []),
342
+ expiresAt: null,
343
+ expiringSoon: false,
344
+ };
345
+ /** Pet Mania's 90 days, read 30 at a time: one block read, block 2 of 3 running. */
346
+ const PET_BACKFILL = { done: 1, total: 3 };
347
+ /** The sample's sends on its last day (UTC), as the host's counter says. */
348
+ function sentTodayOf(siteId) {
349
+ const startOfDay = Math.floor(INT_NOW / DAY_MS) * DAY_MS;
350
+ return siteId === INT_LX.siteId
351
+ ? LOJA_X_CONVERSIONS.filter((event) => event.status === "sent" && event.createdAt >= startOfDay).length
352
+ : 0;
353
+ }
354
+ /** A site's status as `meta.status` sends it, with the §11.1 pixel fields. */
355
+ function intStatus(site, account) {
356
+ const base = statusOf(site);
357
+ const paid = PORTFOLIO_BY_SITE.get(site.siteId)?.paid;
358
+ return {
359
+ ...base,
360
+ // What the host counts for the pixel (meta.status with `now`): the sales
361
+ // and qualified leads the ads bought in 30 days, and today's sends.
362
+ conversions: {
363
+ ...base.conversions,
364
+ last30d: site.pixel
365
+ ? {
366
+ Purchase: paid?.won ?? 0,
367
+ QualifiedLead: paid?.qualified ?? 0,
368
+ Lead: 0,
369
+ Schedule: 0,
370
+ }
371
+ : null,
372
+ sentToday: site.pixel ? sentTodayOf(site.siteId) : null,
373
+ },
374
+ linked: account !== null,
375
+ adAccounts: account ? [{ ...base.adAccounts[0], ...account }] : [],
376
+ pixel: site.pixel
377
+ ? {
378
+ enabled: true,
379
+ pixelId: site.pixel.pixelId,
380
+ source: "connection",
381
+ name: pixelName(site),
382
+ }
383
+ : { enabled: false, pixelId: null, source: null, name: null },
384
+ };
385
+ }
386
+ /** Connected: Pet Mania still backfilling, Casa Aurora without an account. */
387
+ const INT_STATUS = [
388
+ intStatus(INT_LX, {}),
389
+ intStatus(INT_CS, {}),
390
+ intStatus(INT_PM, {
391
+ syncState: "backfill",
392
+ lastSyncAt: null,
393
+ backfill: PET_BACKFILL,
394
+ }),
395
+ intStatus(INT_CA, null),
396
+ ];
397
+ /** Meta refused the agency's token 3 h 12 min before the sample's now. */
398
+ const REFUSED_AT = INT_NOW - (3 * 60 + 12) * MINUTE_MS;
399
+ const INT_STATUS_REFUSED = [
400
+ intStatus(INT_LX, {
401
+ lastSyncAt: REFUSED_AT,
402
+ lastError: "META_TOKEN_INVALID",
403
+ }),
404
+ intStatus(INT_CS, {
405
+ lastSyncAt: REFUSED_AT,
406
+ lastError: "META_TOKEN_INVALID",
407
+ }),
408
+ intStatus(INT_PM, {
409
+ syncState: "backfill",
410
+ lastSyncAt: null,
411
+ lastError: "META_TOKEN_INVALID",
412
+ backfill: PET_BACKFILL,
413
+ }),
414
+ intStatus(INT_CA, null),
415
+ ];
416
+ /** A client's board as the host declares it, with B5's monthly entries. */
417
+ const BOARD = [
418
+ ["novo", "Novo contato", "oklch(0.8 0.01 255)", 214],
419
+ ["atendimento", "Em atendimento", "oklch(0.7 0.08 230)", 171],
420
+ ["qualificado", "Qualificado", "oklch(0.72 0.12 80)", 118],
421
+ ["proposta", "Proposta enviada", "oklch(0.65 0.1 300)", 64],
422
+ ["concluido", "Negócio concluído", "oklch(0.6 0.13 163)", 41],
423
+ ["perdido", "Perdido", "oklch(0.65 0.15 30)", 38],
424
+ ];
425
+ const boardMap = (mapped) => ({
426
+ columns: BOARD.map(([key, name, color, monthCount]) => ({
427
+ key,
428
+ name,
429
+ color,
430
+ group: null,
431
+ event: mapped && key === "qualificado" ? "QualifiedLead" : null,
432
+ monthCount,
433
+ })),
434
+ sendLeadEvent: false,
435
+ purchase: { enabled: true },
436
+ });
437
+ /**
438
+ * uze.ai's real Kanban: 26 columns in six blocks, the case the events sheet
439
+ * must still read well (grouped, scrolling, footer in place).
440
+ */
441
+ const UZE_BOARD = [
442
+ [
443
+ "Prospecção",
444
+ ["Tentativa 1", "Tentativa 2", "Tentativa 3", "Entrada", "Indicação"],
445
+ "oklch(0.8 0.01 255)",
446
+ ],
447
+ ["Vácuo", ["Vácuo"], "oklch(0.75 0.02 255)"],
448
+ [
449
+ "Conversa",
450
+ ["Conversando", "Baixo Potencial", "Médio Potencial", "Oportunidade"],
451
+ "oklch(0.7 0.08 230)",
452
+ ],
453
+ [
454
+ "Hora do Show",
455
+ [
456
+ "Apresentação",
457
+ "Reagendar",
458
+ "Apresentado",
459
+ "Stand By",
460
+ "Proposta",
461
+ "Negociação",
462
+ "Vácuo Neg. D1",
463
+ "Vácuo Neg. D2",
464
+ "Vácuo Neg. D3",
465
+ ],
466
+ "oklch(0.65 0.1 300)",
467
+ ],
468
+ ["Fechamento", ["Fechado"], "oklch(0.6 0.13 163)"],
469
+ [
470
+ "Carteira",
471
+ [
472
+ "Urgência",
473
+ "Prioridade",
474
+ "Potencial",
475
+ "Problema",
476
+ "Descartado",
477
+ "Demitido",
478
+ ],
479
+ "oklch(0.72 0.12 80)",
480
+ ],
481
+ ];
482
+ const UZE_EVENTS = {
483
+ Oportunidade: "QualifiedLead",
484
+ Apresentação: "Schedule",
485
+ };
486
+ /** uze.ai's 26-column board, for the grouped events sheet. */
487
+ export const SAMPLE_UZE_EVENT_MAP = {
488
+ columns: UZE_BOARD.flatMap(([group, names, color]) => names.map((name, index) => ({
489
+ key: `${group}:${name}`,
490
+ name,
491
+ color,
492
+ group,
493
+ event: UZE_EVENTS[name] ?? null,
494
+ monthCount: Math.max(3, 140 - name.length * 6 - index * 9),
495
+ }))),
496
+ sendLeadEvent: false,
497
+ purchase: { enabled: true },
498
+ };
499
+ const LOJA_X_SPEND = PORTFOLIO_BY_SITE.get(INT_LX.siteId)?.spendCents ?? 0;
500
+ /** The Integrações screen on the sample agency, state by state. */
501
+ export const sampleIntegrations = {
502
+ sites: SAMPLE_SITES,
503
+ /** Connected, three clients linked, Casa Aurora still to link. */
504
+ connection: INT_CONNECTION,
505
+ status: INT_STATUS,
506
+ eventMaps: {
507
+ [INT_LX.siteId]: boardMap(true),
508
+ [INT_PM.siteId]: boardMap(false),
509
+ },
510
+ /** Newest first, as `meta.conversions` returns them. */
511
+ conversions: {
512
+ [INT_LX.siteId]: LOJA_X_CONVERSIONS,
513
+ },
514
+ /** What unlinking Loja X erases: its spend in the sample's 30 days. */
515
+ unlinkPreviews: {
516
+ [`${INT_LX.siteId}:${INT_LX.adAccount.adAccountId}`]: {
517
+ spendCents: LOJA_X_SPEND,
518
+ currency: "BRL",
519
+ days: 30,
520
+ campaigns: INT_LX.campaigns.length,
521
+ partial: false,
522
+ },
523
+ },
524
+ now: INT_NOW,
525
+ /** Nothing connected yet. */
526
+ offline: {
527
+ connection: null,
528
+ status: SITES.map((site) => ({
529
+ ...intStatus(site, null),
530
+ pixel: { enabled: false, pixelId: null, source: null, name: null },
531
+ conversions: { pending: 0, sent: 0, failed: 0 },
532
+ })),
533
+ },
534
+ /** Meta refused the agency's token 3 h 12 min ago. */
535
+ refused: {
536
+ connection: {
537
+ ...INT_CONNECTION,
538
+ status: "invalid",
539
+ invalidSince: REFUSED_AT,
540
+ lastError: "META_TOKEN_INVALID",
541
+ },
542
+ status: INT_STATUS_REFUSED,
543
+ },
544
+ /** The token Meta gave expires in 5 days. */
545
+ expiring: {
546
+ connection: {
547
+ ...INT_CONNECTION,
548
+ expiresAt: INT_NOW + 5 * DAY_MS - 1,
549
+ expiringSoon: true,
550
+ },
551
+ },
552
+ /**
553
+ * `audience="business"`: Loja X alone, its owner connecting its own Meta
554
+ * (B1/B3 of conectar-meta-empresa); `partnered` is B2, where the partner
555
+ * Gio linked the account and the pixel and the company did not connect.
556
+ */
557
+ business: {
558
+ sites: SAMPLE_SITES.slice(0, 1),
559
+ status: INT_STATUS.slice(0, 1),
560
+ partnered: {
561
+ connection: null,
562
+ status: INT_STATUS.slice(0, 1).map((entry) => ({
563
+ ...entry,
564
+ adAccounts: entry.adAccounts.map((account) => ({
565
+ ...account,
566
+ own: false,
567
+ })),
568
+ pixel: { ...entry.pixel, own: false },
569
+ })),
570
+ partner: { name: "Gio", allowed: true },
571
+ },
572
+ },
573
+ };
574
+ //# sourceMappingURL=sample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../src/ui/sample.ts"],"names":[],"mappings":"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"}