@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,143 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { AccountPicker } from "./AccountPicker.js";
4
+ import { agoLabel, currencySign, pixelDigits, plural, whenLabel, zoneCity, } from "./format.js";
5
+ import { useBusiness } from "./audience.js";
6
+ import { Icon } from "./Icons.js";
7
+ import { suggestedAccount } from "./model.js";
8
+ import { Avatar, Pill, sentSummary, StateChip, TestModeNote } from "./parts.js";
9
+ import { RowMenu } from "./RowMenu.js";
10
+ /** "Escolher contas e pixels": the way back for what the login stopped releasing. */
11
+ export function GrantFix({ row, actions, }) {
12
+ if (!row.notGranted)
13
+ return null;
14
+ return (_jsx("button", { type: "button", className: "rastro-integrations__link rastro-integrations__meta rastro-integrations__grant", disabled: !actions.permitted, onClick: actions.onChooseAssets, children: "Escolher contas e pixels" }));
15
+ }
16
+ /** Accounts another owner of their site linked, by id: "uze.ai". */
17
+ export const ownersOf = (rows) => new Map(rows.flatMap((row) => row.account && row.accountOwner
18
+ ? [[row.account.adAccountId, row.accountOwner]]
19
+ : []));
20
+ /** The client's other actions, the same on the table and the phone. */
21
+ export function rowMenuItems(row, connection, actions) {
22
+ const items = [];
23
+ if (row.pixel)
24
+ items.push({
25
+ // Another owner's pixel: its events are theirs, read here.
26
+ label: row.pixel.owner ? "Ver eventos" : "Configurar eventos",
27
+ onSelect: () => actions.onOpenEvents(row.site.siteId),
28
+ });
29
+ // What another owner (uze.ai) linked stays theirs: no swap, no unlink.
30
+ if (!row.pixel?.owner)
31
+ items.push({
32
+ label: row.pixel ? "Trocar pixel (plano B)" : "Pixel com token (plano B)",
33
+ onSelect: () => actions.onPlanB(row.site.siteId),
34
+ disabled: !actions.permitted,
35
+ });
36
+ if (row.account && !row.accountOwner)
37
+ items.push({
38
+ label: "Desvincular conta",
39
+ tone: "danger",
40
+ onSelect: () => actions.onUnlink(row.site.siteId),
41
+ disabled: !actions.permitted,
42
+ });
43
+ return items;
44
+ }
45
+ function ClientCell({ row, slot }) {
46
+ return (_jsxs("div", { className: "rastro-integrations__client", children: [_jsx(Avatar, { name: row.site.name, slot: slot }), _jsxs("div", { className: "rastro-integrations__client-name", children: [_jsx("strong", { title: row.site.name, children: row.site.name }), row.site.segment && (_jsx("span", { className: "rastro-integrations__meta", children: row.site.segment }))] })] }));
47
+ }
48
+ const muted = (text) => (_jsx("span", { className: "rastro-integrations__meta", children: text }));
49
+ /** "Ligado pelo uze.ai": what another owner of the site linked. */
50
+ export const OwnerNote = ({ owner }) => owner ? (_jsxs("div", { className: "rastro-integrations__meta rastro-integrations__owner", children: [_jsx(Icon, { name: "lock", size: 12 }), " Ligado pelo ", owner] })) : null;
51
+ const twoLines = (top, bottom, mono = false) => (_jsxs(_Fragment, { children: [_jsx("div", { className: "rastro-integrations__cell-top", children: top }), _jsx("div", { className: mono
52
+ ? "rastro-integrations__meta rastro-integrations__mono"
53
+ : "rastro-integrations__meta", children: bottom })] }));
54
+ function SendsCell({ row, connection, actions, }) {
55
+ if (!connection && row.state !== "planB")
56
+ return muted("—");
57
+ if (!row.pixel)
58
+ return muted("sem pixel: nada é enviado");
59
+ const summary = sentSummary(row);
60
+ const test = row.testMode ? _jsx(TestModeNote, { variant: "line" }) : null;
61
+ if (summary)
62
+ return (_jsxs(_Fragment, { children: [_jsx(Pill, { tone: "ok", icon: "send", children: summary }), test] }));
63
+ return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "rastro-integrations__link rastro-integrations__meta", onClick: () => actions.onOpenEvents(row.site.siteId), children: "Configurar eventos" }), test] }));
64
+ }
65
+ function PixelCell({ row, connection, actions, }) {
66
+ if (row.pixel)
67
+ return (_jsxs(_Fragment, { children: [twoLines(_jsx("span", { className: "rastro-integrations__mono", children: pixelDigits(row.pixel.pixelId) }), row.pixel.name ??
68
+ (row.pixel.source === "token" ? "token próprio" : "")), _jsx(OwnerNote, { owner: row.pixel.owner })] }));
69
+ if (!connection || !actions.permitted)
70
+ return muted("—");
71
+ const items = [
72
+ ...connection.pixels.map((pixel) => ({
73
+ label: `${pixel.name} · ${pixel.pixelId}`,
74
+ onSelect: () => actions.onSetPixel(row.site.siteId, pixel.pixelId),
75
+ })),
76
+ {
77
+ label: "Pixel com token próprio (plano B)",
78
+ onSelect: () => actions.onPlanB(row.site.siteId),
79
+ },
80
+ ];
81
+ return (_jsx(RowMenu, { label: `Ligar pixel em ${row.site.name}`, items: items, trigger: _jsxs(_Fragment, { children: [_jsx(Icon, { name: "plus", size: 12 }), " Ligar pixel"] }) }));
82
+ }
83
+ /** B1/B3: one row per client with its account, pixel, sync and sends. */
84
+ function LinkedRow({ row, slot, connection, siteNames, accountOwners, actions, now, }) {
85
+ const [picking, setPicking] = useState(false);
86
+ const business = useBusiness();
87
+ const account = row.account;
88
+ return (_jsxs("tr", { "data-selected": picking ? "" : undefined, children: [_jsx("td", { children: _jsx(ClientCell, { row: row, slot: slot }) }), _jsx("td", { children: account ? (_jsxs(_Fragment, { children: [twoLines(row.accountName, account.adAccountId, true), _jsx(OwnerNote, { owner: row.accountOwner })] })) : (_jsx(AccountPicker, { siteId: row.site.siteId, siteName: row.site.name, accounts: connection?.adAccounts ?? [], siteNames: siteNames, accountOwners: accountOwners, suggestion: connection
89
+ ? suggestedAccount(row.site, connection.adAccounts)
90
+ : null, disabled: !connection || !actions.permitted, onPick: (adAccountId) => actions.onPick(row.site.siteId, adAccountId), onChooseAssets: actions.onChooseAssets, onOpenChange: setPicking })) }), _jsx("td", { "data-col": "pixel", children: _jsx(PixelCell, { row: row, connection: connection, actions: actions }) }), !business && (_jsx("td", { "data-col": "currency", children: account
91
+ ? twoLines(`${account.currency} · ${currencySign(account.currency)}`, zoneCity(account.timezone))
92
+ : muted("—") })), _jsxs("td", { children: [_jsx(StateChip, { row: row, now: now }), _jsx(GrantFix, { row: row, actions: actions })] }), _jsx("td", { children: _jsx(SendsCell, { row: row, connection: connection, actions: actions }) }), _jsx("td", { "data-col": "menu", children: _jsx(RowMenu, { label: `Ações de ${row.site.name}`, items: rowMenuItems(row, connection, actions) }) })] }));
93
+ }
94
+ /** B4: with the token refused, when each client last read and what waits. */
95
+ function StoppedRow({ row, slot, connection, actions, now, }) {
96
+ const account = row.account;
97
+ const backfill = account?.backfill;
98
+ return (_jsxs("tr", { children: [_jsx("td", { children: _jsx(ClientCell, { row: row, slot: slot }) }), _jsx("td", { children: account
99
+ ? [
100
+ twoLines(row.accountName, account.adAccountId, true),
101
+ _jsx(OwnerNote, { owner: row.accountOwner }, "owner"),
102
+ ]
103
+ : twoLines("Sem conta de anúncio", row.state === "planB" ? "pixel por token manual" : "—", true) }), _jsxs("td", { children: [_jsx(StateChip, { row: row, now: now }), _jsx(GrantFix, { row: row, actions: actions })] }), _jsx("td", { children: !account
104
+ ? muted(row.state === "planB" ? "não lê gasto" : "—")
105
+ : account.syncState === "backfill" && backfill
106
+ ? twoLines(backfill.done > 0
107
+ ? `${backfill.done} de ${backfill.total} blocos lidos`
108
+ : "backfill no começo", "retoma de onde parou")
109
+ : account.lastSyncAt
110
+ ? twoLines(whenLabel(account.lastSyncAt, now), agoLabel(account.lastSyncAt, now))
111
+ : muted("ainda não leu") }), _jsx("td", { children: row.state === "planB" ? (_jsx(Pill, { tone: "ok", icon: "send", children: "enviando normal" })) : !row.pixel ? (muted("sem pixel")) : row.pending > 0 ? (_jsx(Pill, { tone: "warn", icon: "clock", children: plural(row.pending, "venda esperando", "vendas esperando") })) : (muted("nada na fila")) }), _jsx("td", { "data-col": "menu", children: _jsx(RowMenu, { label: `Ações de ${row.site.name}`, items: rowMenuItems(row, connection, actions) }) })] }));
112
+ }
113
+ /** The Clientes card: B1 (waiting for Meta), B3 (linked) and B4 (stopped). */
114
+ export function ClientsTable({ rows, connection, filter, onFilter, actions, now, }) {
115
+ const business = useBusiness();
116
+ const refused = connection?.status === "invalid";
117
+ const attention = rows.filter((row) => row.attention).length;
118
+ const shown = !business && filter === "attention"
119
+ ? rows.filter((r) => r.attention)
120
+ : rows;
121
+ const siteNames = new Map(rows.map((row) => [row.site.siteId, row.site.name]));
122
+ const slots = new Map(rows.map((row, index) => [row.site.siteId, index]));
123
+ const since = connection?.invalidSince
124
+ ? whenLabel(connection.invalidSince, now).replace(/^hoje /, "")
125
+ : null;
126
+ const company = rows[0];
127
+ const description = refused
128
+ ? `Os números${since ? ` até ${since}` : ""} continuam valendo; nada é apagado enquanto o token está recusado`
129
+ : business && company
130
+ ? company.accountOwner
131
+ ? `Ligada pelo ${company.accountOwner}: o gasto dela já entra nas Campanhas da ${company.site.name}`
132
+ : !connection
133
+ ? "Depois de conectar, a conta de anúncio da empresa aparece aqui"
134
+ : company.account
135
+ ? `O gasto desta conta entra nas Campanhas da ${company.site.name}`
136
+ : `Escolha a conta de anúncio da ${company.site.name}: o gasto dela entra nas Campanhas`
137
+ : !connection
138
+ ? "Depois de conectar, cada cliente ganha a sua conta de anúncio aqui"
139
+ : "Uma conta de anúncio por cliente: o gasto dela é só daquele cliente";
140
+ const who = business ? "Empresa" : "Cliente";
141
+ return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__clients", "data-offline": connection ? undefined : "", "aria-labelledby": "rastro-integrations-clients", children: [_jsxs("header", { className: "rastro-integrations__clients-head", children: [_jsxs("div", { children: [_jsx("h3", { id: "rastro-integrations-clients", className: "rastro-integrations__title", children: business ? "Sua conta de anúncio" : "Clientes" }), _jsx("p", { className: "rastro-integrations__desc", children: description })] }), connection && !business && (_jsxs("div", { className: "rastro-integrations__seg", role: "group", "aria-label": "Filtrar clientes", children: [_jsxs("button", { type: "button", "aria-pressed": filter === "all", onClick: () => onFilter("all"), children: ["Todos ", rows.length] }), _jsxs("button", { type: "button", "aria-pressed": filter === "attention", onClick: () => onFilter("attention"), children: ["Precisa de aten\u00E7\u00E3o ", attention] })] }))] }), _jsxs("table", { className: "rastro-integrations__table", "data-mode": refused ? "stopped" : "linked", children: [_jsx("thead", { children: refused ? (_jsxs("tr", { children: [_jsx("th", { scope: "col", children: who }), _jsx("th", { scope: "col", children: "Conta de an\u00FAncio" }), _jsx("th", { scope: "col", children: "Estado" }), _jsx("th", { scope: "col", children: "\u00DAltimo gasto lido" }), _jsx("th", { scope: "col", children: "Vendas na fila" }), _jsx("th", { scope: "col", "data-col": "menu", children: _jsx("span", { className: "rastro-integrations__sr", children: "A\u00E7\u00F5es" }) })] })) : (_jsxs("tr", { children: [_jsx("th", { scope: "col", children: who }), _jsx("th", { scope: "col", children: "Conta de an\u00FAncio" }), _jsx("th", { scope: "col", "data-col": "pixel", children: "Pixel" }), !business && (_jsx("th", { scope: "col", "data-col": "currency", children: "Moeda \u00B7 fuso" })), _jsx("th", { scope: "col", children: "Estado" }), _jsx("th", { scope: "col", children: "Vendas de volta \u00E0 Meta" }), _jsx("th", { scope: "col", "data-col": "menu", children: _jsx("span", { className: "rastro-integrations__sr", children: "A\u00E7\u00F5es" }) })] })) }), _jsx("tbody", { children: shown.map((row) => refused && connection ? (_jsx(StoppedRow, { row: row, slot: slots.get(row.site.siteId) ?? 0, connection: connection, actions: actions, now: now }, row.site.siteId)) : (_jsx(LinkedRow, { row: row, slot: slots.get(row.site.siteId) ?? 0, connection: connection, siteNames: siteNames, accountOwners: ownersOf(rows), actions: actions, now: now }, row.site.siteId))) })] }), shown.length === 0 && (_jsx("p", { className: "rastro-empty", children: "Nenhum cliente precisa de aten\u00E7\u00E3o agora." }))] }));
142
+ }
143
+ //# sourceMappingURL=ClientsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientsTable.js","sourceRoot":"","sources":["../../../src/ui/integrations/ClientsTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { IntegrationSite, PixelChoice } from "./types.js";
2
+ /** The Meta-blue Facebook button, in its two sizes. */
3
+ export declare function FacebookButton({ label, size, disabled, onClick, }: {
4
+ label: string;
5
+ size?: "md" | "lg";
6
+ disabled?: boolean;
7
+ onClick: () => void;
8
+ }): import("react").JSX.Element;
9
+ /**
10
+ * B1, left: one Facebook login for every client, or (business) the company's
11
+ * own login for its account and pixel.
12
+ */
13
+ export declare function ConnectCard({ permitted, busy, onConnect, companyName, productName, }: {
14
+ permitted: boolean;
15
+ busy: boolean;
16
+ onConnect: () => void;
17
+ /** Business: "Conecte a Meta da Zezinho Pneus". */
18
+ companyName?: string | null;
19
+ productName?: string;
20
+ }): import("react").JSX.Element;
21
+ /**
22
+ * Plan B: a client whose account the agency cannot reach still sends sales,
23
+ * with its own pixel and Conversions API token. Sends; reads no spend.
24
+ */
25
+ export declare function PlanBForm({ sites, initialSiteId, permitted, busy, onSubmit, framed, }: {
26
+ sites: readonly IntegrationSite[];
27
+ initialSiteId?: string;
28
+ permitted: boolean;
29
+ busy: boolean;
30
+ onSubmit: (siteId: string, pixel: PixelChoice) => void;
31
+ /** False inside a dialog that already draws the frame and the title. */
32
+ framed?: boolean;
33
+ }): import("react").JSX.Element;
34
+ export declare function PlanBIntro(): import("react").JSX.Element;
35
+ //# sourceMappingURL=Connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connect.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Connect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAW,EACX,QAAQ,EACR,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAcA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAkB,EAClB,WAAsB,GACvB,EAAE;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,+BAqDA;AAID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,EACb,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAa,GACd,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvD,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,+BAwHA;AAED,wBAAgB,UAAU,gCAYzB"}
@@ -0,0 +1,62 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useState } from "react";
3
+ import { useBusiness } from "./audience.js";
4
+ import { FacebookMark, Icon, MetaMark } from "./Icons.js";
5
+ import { Avatar } from "./parts.js";
6
+ /** The Meta-blue Facebook button, in its two sizes. */
7
+ export function FacebookButton({ label, size = "md", disabled, onClick, }) {
8
+ return (_jsxs("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "facebook", "data-size": size, disabled: disabled, onClick: onClick, children: [_jsx(FacebookMark, { size: 16 }), label] }));
9
+ }
10
+ /**
11
+ * B1, left: one Facebook login for every client, or (business) the company's
12
+ * own login for its account and pixel.
13
+ */
14
+ export function ConnectCard({ permitted, busy, onConnect, companyName = null, productName = "Rastro", }) {
15
+ const business = useBusiness();
16
+ return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__connect", "aria-labelledby": "rastro-integrations-connect", children: [_jsx("span", { className: "rastro-integrations__tile", "data-size": "lg", children: _jsx(MetaMark, { size: 30 }) }), _jsxs("div", { children: [_jsx("h3", { id: "rastro-integrations-connect", className: "rastro-integrations__title", "data-size": "lg", children: business
17
+ ? `Conecte a Meta da ${companyName ?? "empresa"}`
18
+ : "Conecte a Meta da agência" }), _jsx("p", { className: "rastro-integrations__desc rastro-integrations__lede", children: business
19
+ ? `Entre com o Facebook de quem administra os anúncios. Você escolhe na Meta a conta de anúncio e o pixel; o ${productName} lê o gasto e devolve as vendas.`
20
+ : "Um login só para todos os clientes. Você escolhe na Meta quais contas de anúncio e pixels o Rastro pode ler; depois liga cada cliente à conta dele." })] }), _jsxs("ul", { className: "rastro-integrations__perks", children: [_jsxs("li", { children: [_jsx(Icon, { name: "check", size: 14 }), " Gasto de 90 dias por an\u00FAncio, e depois a cada 45 min"] }), _jsxs("li", { children: [_jsx(Icon, { name: "check", size: 14 }), " Vendas do WhatsApp devolvidas ao pixel como Compra, com valor"] }), _jsxs("li", { children: [_jsx(Icon, { name: "lock", size: 14 }), " S\u00F3 leitura de an\u00FAncios. O token fica cifrado e nunca aparece na tela"] })] }), _jsxs("div", { className: "rastro-integrations__connect-action", children: [_jsx(FacebookButton, { label: "Conectar com Facebook", size: "lg", disabled: !permitted || busy, onClick: onConnect }), _jsx("span", { className: "rastro-integrations__meta", children: "Abre a janela da Meta \u00B7 Login do Facebook para Empresas" })] })] }));
21
+ }
22
+ const PIXEL_ID = /^\d{6,20}$/;
23
+ /**
24
+ * Plan B: a client whose account the agency cannot reach still sends sales,
25
+ * with its own pixel and Conversions API token. Sends; reads no spend.
26
+ */
27
+ export function PlanBForm({ sites, initialSiteId, permitted, busy, onSubmit, framed = true, }) {
28
+ const id = useId();
29
+ const business = useBusiness();
30
+ const [siteId, setSiteId] = useState(initialSiteId ?? sites.at(-1)?.siteId ?? "");
31
+ const [pixelId, setPixelId] = useState("");
32
+ const [token, setToken] = useState("");
33
+ const [touched, setTouched] = useState(false);
34
+ const pixelValid = PIXEL_ID.test(pixelId.replace(/\s/g, ""));
35
+ const valid = Boolean(siteId) && pixelValid && token.trim().length > 20;
36
+ const slot = Math.max(0, sites.findIndex((site) => site.siteId === siteId));
37
+ const site = sites[slot];
38
+ const submit = (event) => {
39
+ event.preventDefault();
40
+ setTouched(true);
41
+ if (!valid)
42
+ return;
43
+ onSubmit(siteId, {
44
+ pixelId: pixelId.replace(/\s/g, ""),
45
+ accessToken: token.trim(),
46
+ });
47
+ };
48
+ const fields = (_jsxs(_Fragment, { children: [_jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-site`, children: business ? "Empresa" : "Cliente" }), _jsxs("span", { className: "rastro-integrations__select", "data-avatar": "", children: [site && _jsx(Avatar, { name: site.name, slot: slot, size: "sm" }), _jsx("select", { id: `${id}-site`, value: siteId, disabled: !permitted, onChange: (event) => setSiteId(event.target.value), children: sites.map((option) => (_jsx("option", { value: option.siteId, children: option.name }, option.siteId))) }), _jsx(Icon, { name: "chevronDown", size: 14 })] })] }), _jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-pixel`, children: "ID do pixel" }), _jsx("input", { id: `${id}-pixel`, className: "rastro-integrations__input", "data-mono": "", inputMode: "numeric", autoComplete: "off", placeholder: "ex.: 3309887120465510", value: pixelId, disabled: !permitted, "aria-invalid": touched && !pixelValid ? true : undefined, onChange: (event) => setPixelId(event.target.value) })] }), _jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-token`, children: "Token da API de Convers\u00F5es" }), _jsxs("span", { className: "rastro-integrations__input", "data-icon": "", children: [_jsx(Icon, { name: "key", size: 14 }), _jsx("input", { id: `${id}-token`, type: "password", autoComplete: "off", placeholder: "Cole o token. Ele \u00E9 cifrado e n\u00E3o volta a aparecer", value: token, disabled: !permitted, onChange: (event) => setToken(event.target.value) })] })] }), touched && !valid && (_jsx("p", { className: "rastro-integrations__hint", role: "alert", children: pixelValid
49
+ ? "Cole o token inteiro que o Gerenciador de Eventos gerou."
50
+ : "O ID do pixel tem só números, como no Gerenciador de Eventos." })), _jsx("div", { className: "rastro-integrations__form-foot", children: _jsx("button", { type: "submit", className: "rastro-integrations__btn", "data-variant": "outline", disabled: !permitted || busy, children: busy ? "Testando…" : "Testar e salvar" }) })] }));
51
+ if (!framed) {
52
+ return (_jsx("form", { className: "rastro-integrations__planb-form", onSubmit: submit, children: fields }));
53
+ }
54
+ return (_jsxs("form", { className: "rastro-integrations__card rastro-integrations__planb", "aria-labelledby": `${id}-title`, onSubmit: submit, children: [_jsxs("div", { className: "rastro-integrations__row-gap", children: [_jsx("h3", { id: `${id}-title`, className: "rastro-integrations__title", children: "Sem login: pixel + token" }), _jsx("span", { className: "rastro-integrations__pill", "data-tone": "ghost", children: "plano B" })] }), _jsx(PlanBIntro, {}), fields] }));
55
+ }
56
+ export function PlanBIntro() {
57
+ const business = useBusiness();
58
+ return (_jsxs("p", { className: "rastro-integrations__desc", children: [business
59
+ ? "Sem acesso de administrador na Meta?"
60
+ : "Para um cliente cuja conta a agência não acessa.", " ", "Gere o token em", " ", _jsx("b", { children: "Gerenciador de Eventos \u2192 Configura\u00E7\u00F5es \u2192 API de Convers\u00F5es" }), ". Envia vendas; n\u00E3o l\u00EA gasto."] }));
61
+ }
62
+ //# sourceMappingURL=Connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connect.js","sourceRoot":"","sources":["../../../src/ui/integrations/Connect.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ClientRow } from "./model.js";
2
+ import type { MetaConnection } from "./types.js";
3
+ /** B3/B4 header: whose login, what it reaches, and what to do with it. */
4
+ export declare function ConnectionCard({ connection, permitted, busy, onChooseAssets, onDisconnect, onReconnect, }: {
5
+ connection: MetaConnection;
6
+ permitted: boolean;
7
+ busy: boolean;
8
+ onChooseAssets: () => void;
9
+ onDisconnect: () => void;
10
+ onReconnect: () => void;
11
+ }): import("react").JSX.Element;
12
+ /** The phone's connection line (M1): one card, the gear opens the choices. */
13
+ export declare function ConnectionLine({ connection, permitted, onChooseAssets, }: {
14
+ connection: MetaConnection;
15
+ permitted: boolean;
16
+ onChooseAssets: () => void;
17
+ }): import("react").JSX.Element;
18
+ /** The token's expiry, when Meta says it is near: reconnect before it stops. */
19
+ export declare function ExpiryWarning({ connection, permitted, busy, now, onReconnect, }: {
20
+ connection: MetaConnection;
21
+ permitted: boolean;
22
+ busy: boolean;
23
+ now: number;
24
+ onReconnect: () => void;
25
+ }): import("react").JSX.Element | null;
26
+ /** B4/M3: the refused token, said once, with what stopped and since when. */
27
+ export declare function RefusedBanner({ connection, rows, phone, }: {
28
+ connection: MetaConnection;
29
+ rows: readonly ClientRow[];
30
+ phone?: boolean;
31
+ }): import("react").JSX.Element;
32
+ /** B4, bottom: what reconnecting brings back, in three steps. */
33
+ export declare function ReconnectPlan({ connection, rows, }: {
34
+ connection: MetaConnection;
35
+ rows: readonly ClientRow[];
36
+ }): import("react").JSX.Element;
37
+ //# sourceMappingURL=Connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Connection.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,+BAiFA;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,cAAc,GACf,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,+BA8BA;AAID,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,GAAG,EACH,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,sCA+BA;AAOD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,EACJ,KAAa,GACd,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,+BAuDA;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,GACL,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;CAC5B,+BA6DA"}
@@ -0,0 +1,108 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useBusiness } from "./audience.js";
3
+ import { FacebookButton } from "./Connect.js";
4
+ import { clockLabel, dayLabel, plural } from "./format.js";
5
+ import { backfillStep, errorCode } from "./model.js";
6
+ import { Icon, MetaMark } from "./Icons.js";
7
+ import { Pill } from "./parts.js";
8
+ const businessTitle = (connection) => connection.businessName ? `Meta · ${connection.businessName}` : "Meta";
9
+ /** B3/B4 header: whose login, what it reaches, and what to do with it. */
10
+ export function ConnectionCard({ connection, permitted, busy, onChooseAssets, onDisconnect, onReconnect, }) {
11
+ const refused = connection.status === "invalid";
12
+ const accounts = connection.adAccounts.length;
13
+ const pixels = connection.pixels.length;
14
+ const when = connection.authorizedAt
15
+ ? ` em ${dayLabel(connection.authorizedAt)}`
16
+ : "";
17
+ const who = connection.authorizedBy?.name
18
+ ? `${connection.authorizedBy.name} autorizou${when}`
19
+ : connection.authorizedAt
20
+ ? `Autorizada${when}`
21
+ : "Token colado à mão";
22
+ return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__conn", "aria-label": "Conex\u00E3o com a Meta", children: [_jsx("span", { className: "rastro-integrations__tile", children: _jsx(MetaMark, { size: 26 }) }), _jsxs("div", { className: "rastro-integrations__conn-body", children: [_jsxs("div", { className: "rastro-integrations__row-gap", "data-gap": "10", children: [_jsx("h3", { className: "rastro-integrations__title", children: businessTitle(connection) }), refused ? (_jsx(Pill, { tone: "bad", icon: "alert", children: "Token recusado pela Meta" })) : (_jsx(Pill, { tone: "ok", icon: "dot", children: "Conectada" }))] }), _jsxs("div", { className: "rastro-integrations__conn-line", children: [_jsxs("span", { children: [who, " \u00B7 ", plural(accounts, "conta de anúncio", "contas de anúncio"), " ", "\u00B7 ", plural(pixels, "pixel", "pixels")] }), _jsxs("span", { className: "rastro-integrations__meta", children: [_jsx(Icon, { name: "lock", size: 12 }), " token cifrado no servidor, nunca exibido"] })] })] }), _jsx("div", { className: "rastro-integrations__conn-actions", children: refused ? (_jsx(FacebookButton, { label: "Reconectar com Facebook", disabled: !permitted || busy, onClick: onReconnect })) : (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "outline", "data-size": "sm", disabled: !permitted || busy, onClick: onChooseAssets, children: [_jsx(Icon, { name: "settings", size: 14 }), "Escolher contas e pixels"] }), _jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "ghost", "data-size": "sm", disabled: !permitted || busy, onClick: onDisconnect, children: "Desconectar" })] })) })] }));
23
+ }
24
+ /** The phone's connection line (M1): one card, the gear opens the choices. */
25
+ export function ConnectionLine({ connection, permitted, onChooseAssets, }) {
26
+ return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__conn-phone", "aria-label": "Conex\u00E3o com a Meta", children: [_jsx("span", { className: "rastro-integrations__tile", "data-size": "sm", children: _jsx(MetaMark, { size: 20 }) }), _jsxs("div", { className: "rastro-integrations__grow", children: [_jsx("h3", { className: "rastro-integrations__title", children: businessTitle(connection) }), _jsxs("span", { className: "rastro-integrations__meta", children: [plural(connection.adAccounts.length, "conta", "contas"), " \u00B7", " ", plural(connection.pixels.length, "pixel", "pixels"), " \u00B7", " ", _jsx(Icon, { name: "lock", size: 12 }), " token cifrado"] })] }), _jsx("button", { type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Escolher contas e pixels", disabled: !permitted, onClick: onChooseAssets, children: _jsx(Icon, { name: "settings" }) })] }));
27
+ }
28
+ const DAY_MS = 86_400_000;
29
+ /** The token's expiry, when Meta says it is near: reconnect before it stops. */
30
+ export function ExpiryWarning({ connection, permitted, busy, now, onReconnect, }) {
31
+ const business = useBusiness();
32
+ // A short-lived login Meta would not trade for a long-lived one expires
33
+ // just the same: the same warning, without a count.
34
+ const exchangeFailed = errorCode(connection.lastError) === "TOKEN_EXCHANGE_FAILED";
35
+ if (connection.status !== "active")
36
+ return null;
37
+ if (!connection.expiringSoon && !exchangeFailed)
38
+ return null;
39
+ const days = connection.expiresAt
40
+ ? Math.max(0, Math.ceil((connection.expiresAt - now) / DAY_MS))
41
+ : null;
42
+ return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "warn", role: "note", children: [_jsx(Icon, { name: "clock", size: 14 }), _jsxs("p", { children: [days === null
43
+ ? "O acesso da Meta expira em breve."
44
+ : days === 0
45
+ ? "O acesso da Meta expira hoje."
46
+ : `O acesso expira em ${plural(days, "dia", "dias")}.`, " ", business
47
+ ? "Reconectar mantém a conta e o pixel ligados à empresa."
48
+ : "Reconectar mantém as contas e os pixels ligados aos mesmos clientes."] }), _jsx(FacebookButton, { label: "Reconectar", disabled: !permitted || busy, onClick: onReconnect })] }));
49
+ }
50
+ const stoppedRows = (rows) => rows.filter((row) => row.state === "stopped");
51
+ const queued = (rows) => stoppedRows(rows).reduce((sum, row) => sum + row.pending, 0);
52
+ /** B4/M3: the refused token, said once, with what stopped and since when. */
53
+ export function RefusedBanner({ connection, rows, phone = false, }) {
54
+ const business = useBusiness();
55
+ const stopped = stoppedRows(rows).length;
56
+ const since = connection.invalidSince
57
+ ? clockLabel(connection.invalidSince)
58
+ : null;
59
+ const pending = queued(rows);
60
+ const code = connection.lastError ?? "META_TOKEN_INVALID";
61
+ if (phone) {
62
+ return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "bad", "data-stack": "", children: [_jsxs("strong", { className: "rastro-integrations__row-gap", "data-gap": "8", children: [_jsx(Icon, { name: "alert", size: 14 }), " A Meta recusou o token"] }), _jsxs("span", { children: [business
63
+ ? "O gasto parou"
64
+ : `O gasto de ${plural(stopped, "cliente", "clientes")} parou`, since ? ` às ${since}` : "", pending > 0
65
+ ? ` e ${plural(pending, "venda espera", "vendas esperam")} na fila`
66
+ : "", ". Nada foi apagado."] }), _jsx("code", { className: "rastro-integrations__code", children: code })] }));
67
+ }
68
+ return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "bad", "data-size": "lg", role: "alert", children: [_jsx(Icon, { name: "alert", size: 20 }), _jsxs("p", { children: [_jsxs("b", { children: ["A Meta recusou o token da ", business ? "empresa" : "agência", "."] }), " O gasto", " ", business
69
+ ? "da conta de anúncio"
70
+ : stopped === 1
71
+ ? "do cliente"
72
+ : `dos ${stopped} clientes`, " ", "parou de atualizar", since ? ` às ${since}` : "", " e as vendas ficam na fila at\u00E9 reconectar. Causa prov\u00E1vel: a senha do Facebook de quem conectou mudou, ou o acesso ao app foi removido no Business.", " ", _jsx("code", { className: "rastro-integrations__code", children: code })] })] }));
73
+ }
74
+ /** B4, bottom: what reconnecting brings back, in three steps. */
75
+ export function ReconnectPlan({ connection, rows, }) {
76
+ const business = useBusiness();
77
+ const since = connection.invalidSince
78
+ ? clockLabel(connection.invalidSince)
79
+ : null;
80
+ const resuming = stoppedRows(rows).find((row) => row.account?.syncState === "backfill" && row.account.backfill);
81
+ const resumingStep = backfillStep(resuming?.account?.backfill);
82
+ const pending = queued(rows);
83
+ const steps = [
84
+ [
85
+ "refresh",
86
+ "O mesmo login volta a valer",
87
+ business
88
+ ? "A conta e o pixel que você já escolheu continuam ligados à empresa."
89
+ : "As contas e os pixels que você já escolheu continuam ligados aos mesmos clientes.",
90
+ ],
91
+ [
92
+ "clock",
93
+ "O gasto parado é relido",
94
+ `Cada conta relê ${since ? `desde ${since}` : "de onde parou"}${resumingStep
95
+ ? `; a ${resuming.site.name} retoma o bloco ${resumingStep.current} de ${resumingStep.total} de onde parou`
96
+ : ""}.`,
97
+ ],
98
+ [
99
+ "send",
100
+ pending > 0
101
+ ? `As ${plural(pending, "venda", "vendas")} da fila saem`.replace("As 1 venda", "A venda")
102
+ : "Os próximos eventos saem",
103
+ "Eventos com até 7 dias ainda valem para a Meta; nenhum é perdido hoje.",
104
+ ],
105
+ ];
106
+ return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__plan", "aria-labelledby": "rastro-integrations-plan", children: [_jsx("h3", { id: "rastro-integrations-plan", className: "rastro-integrations__title", children: "Ao reconectar" }), _jsx("ol", { className: "rastro-integrations__steps", children: steps.map(([icon, title, text]) => (_jsxs("li", { children: [_jsx("span", { className: "rastro-integrations__step-icon", children: _jsx(Icon, { name: icon, size: 14 }) }), _jsxs("div", { children: [_jsx("strong", { children: title }), _jsx("p", { className: "rastro-integrations__desc", children: text })] })] }, title))) })] }));
107
+ }
108
+ //# sourceMappingURL=Connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connection.js","sourceRoot":"","sources":["../../../src/ui/integrations/Connection.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { IntegrationSite, PixelChoice } from "./types.js";
2
+ /** Plan B once the agency is connected: the same form, in a dialog. */
3
+ export declare function PlanBDialog({ sites, siteId, permitted, busy, onSubmit, onClose, }: {
4
+ sites: readonly IntegrationSite[];
5
+ siteId: string;
6
+ permitted: boolean;
7
+ busy: boolean;
8
+ onSubmit: (siteId: string, pixel: PixelChoice) => void;
9
+ onClose: () => void;
10
+ }): import("react").JSX.Element;
11
+ /**
12
+ * Disconnecting stops every client's spend and every pixel the owner linked,
13
+ * its own-token ones too; it asks once, plainly.
14
+ */
15
+ export declare function DisconnectDialog({ linked, busy, onConfirm, onClose, }: {
16
+ linked: number;
17
+ busy: boolean;
18
+ onConfirm: () => void;
19
+ onClose: () => void;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=Dialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialogs.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Dialogs.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BA2CA;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAgEA"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef } from "react";
3
+ import { useBusiness } from "./audience.js";
4
+ import { PlanBForm, PlanBIntro } from "./Connect.js";
5
+ import { Icon } from "./Icons.js";
6
+ import { Overlay } from "./Overlay.js";
7
+ /** Plan B once the agency is connected: the same form, in a dialog. */
8
+ export function PlanBDialog({ sites, siteId, permitted, busy, onSubmit, onClose, }) {
9
+ const id = useId();
10
+ return (_jsx(Overlay, { labelledBy: `${id}-title`, onClose: onClose, children: _jsxs("div", { className: "rastro-integrations__dialog", children: [_jsxs("div", { className: "rastro-integrations__dialog-head", children: [_jsxs("div", { className: "rastro-integrations__grow", children: [_jsxs("div", { className: "rastro-integrations__row-gap", children: [_jsx("h3", { id: `${id}-title`, className: "rastro-integrations__dialog-title", children: "Sem login: pixel + token" }), _jsx("span", { className: "rastro-integrations__pill", "data-tone": "ghost", children: "plano B" })] }), _jsx(PlanBIntro, {})] }), _jsx("button", { type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Fechar", onClick: onClose, children: _jsx(Icon, { name: "x" }) })] }), _jsx(PlanBForm, { sites: sites, initialSiteId: siteId, permitted: permitted, busy: busy, framed: false, onSubmit: (target, pixel) => {
11
+ onSubmit(target, pixel);
12
+ onClose();
13
+ } })] }) }));
14
+ }
15
+ /**
16
+ * Disconnecting stops every client's spend and every pixel the owner linked,
17
+ * its own-token ones too; it asks once, plainly.
18
+ */
19
+ export function DisconnectDialog({ linked, busy, onConfirm, onClose, }) {
20
+ const id = useId();
21
+ const business = useBusiness();
22
+ const cancel = useRef(null);
23
+ return (_jsx(Overlay, { role: "alertdialog", labelledBy: `${id}-title`, describedBy: `${id}-desc`, initialFocus: cancel, onClose: onClose, children: _jsxs("div", { className: "rastro-integrations__dialog", children: [_jsxs("div", { className: "rastro-integrations__dialog-head", children: [_jsx("span", { className: "rastro-integrations__danger-tile", children: _jsx(Icon, { name: "unlink", size: 20 }) }), _jsxs("div", { children: [_jsxs("h3", { id: `${id}-title`, className: "rastro-integrations__dialog-title", children: ["Desconectar a Meta da ", business ? "empresa" : "agência", "?"] }), _jsx("p", { id: `${id}-desc`, className: "rastro-integrations__desc rastro-integrations__lede", children: business
24
+ ? linked > 0
25
+ ? "O gasto da conta para de atualizar e as vendas param de sair para o pixel. O token é apagado."
26
+ : "O token é apagado e as vendas param de sair para o pixel que você ligou."
27
+ : linked > 0
28
+ ? `O gasto de ${linked === 1 ? "1 cliente para" : `${linked} clientes param`} de atualizar e as vendas param de sair dos pixels que você ligou, inclusive os de token próprio (plano B). O token é apagado.`
29
+ : "O token é apagado, e os pixels que você ligou, inclusive os de token próprio (plano B), param de enviar." })] })] }), _jsxs("div", { className: "rastro-integrations__dialog-foot", children: [_jsx("button", { ref: cancel, type: "button", className: "rastro-integrations__btn", "data-variant": "outline", onClick: onClose, children: "Cancelar" }), _jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "danger", disabled: busy, onClick: () => {
30
+ onConfirm();
31
+ onClose();
32
+ }, children: "Desconectar" })] })] }) }));
33
+ }
34
+ //# sourceMappingURL=Dialogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialogs.js","sourceRoot":"","sources":["../../../src/ui/integrations/Dialogs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { IntegrationConversion, IntegrationSite, MetaEventName, SentCounts } from "./types.js";
2
+ /** What each Meta event is called on screen. */
3
+ export declare const EVENT_LABELS: Record<MetaEventName, string>;
4
+ /** "enviada há 18 min", "enviado há 41 min", "na fila", "falhou". */
5
+ export declare function deliveryLabel(event: IntegrationConversion, now: number): string;
6
+ /** B3, bottom: the latest events every client's pixel received. */
7
+ export declare function EventsFeed({ sites, conversions, adNames, sentBySite, currency, now, }: {
8
+ sites: readonly IntegrationSite[];
9
+ conversions: Record<string, readonly IntegrationConversion[]>;
10
+ adNames: Record<string, string> | undefined;
11
+ sentBySite: Record<string, SentCounts> | undefined;
12
+ currency: string;
13
+ now: number;
14
+ }): import("react").JSX.Element | null;
15
+ //# sourceMappingURL=EventsFeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsFeed.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/EventsFeed.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKtD,CAAC;AAGF,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,UAKtE;AAMD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,UAAU,EACV,QAAQ,EACR,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,sCA2FA"}