@koda-sl/baker-cli 0.489.0-dev.63e618e80 → 0.490.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 (991) hide show
  1. package/README.md +170 -8
  2. package/dist/account-3H6BZO5H.js +80 -0
  3. package/dist/account-IKFDY52P.js +138 -0
  4. package/dist/account-IKFDY52P.js.map +1 -0
  5. package/dist/account-KNRDOUJP.js +79 -0
  6. package/dist/account-assets-LKZVWZAR.js +289 -0
  7. package/dist/account-assets-LKZVWZAR.js.map +1 -0
  8. package/dist/account-level-UJOZDVXY.js +608 -0
  9. package/dist/account-level-UJOZDVXY.js.map +1 -0
  10. package/dist/account-reads-GA6FVKLE.js +218 -0
  11. package/dist/account-writes-AE5IJGGW.js +66 -0
  12. package/dist/accounts-K4INATCW.js +75 -0
  13. package/dist/accounts-RTN5ZGTU.js +611 -0
  14. package/dist/accounts-RW6KXBOQ.js +77 -0
  15. package/dist/actions-HNLISA7T.js +55 -0
  16. package/dist/activecampaign-I5CILZPU.js +935 -0
  17. package/dist/activities-T253KK4Q.js +74 -0
  18. package/dist/ad-group-writes-VRSBI2Z2.js +170 -0
  19. package/dist/ad-groups-IEBVEAMS.js +68 -0
  20. package/dist/ad-writes-ALV4KFPZ.js +174 -0
  21. package/dist/add-6WKPFMLG.js +302 -0
  22. package/dist/add-XF5COUAS.js +104 -0
  23. package/dist/ads-CQZHD7FC.js +77 -0
  24. package/dist/ads-QIKZ6O2N.js +40 -0
  25. package/dist/ads-ZEY72UBN.js +114 -0
  26. package/dist/ads-ZEY72UBN.js.map +1 -0
  27. package/dist/adsets-5H3MOT3D.js +177 -0
  28. package/dist/adsets-5H3MOT3D.js.map +1 -0
  29. package/dist/advertisers-6NUM2Q3A.js +120 -0
  30. package/dist/analytics-ALOZ7ZZ4.js +1976 -0
  31. package/dist/analytics-VLHE5A2M.js +433 -0
  32. package/dist/animate-SVEPM267.js +480 -0
  33. package/dist/asset-writes-L5TMKIZC.js +47 -0
  34. package/dist/assign-6HI6TNLP.js +77 -0
  35. package/dist/audience-size-25LP2OBF.js +73 -0
  36. package/dist/audience-writes-X52VG35Y.js +324 -0
  37. package/dist/audience-writes-X52VG35Y.js.map +1 -0
  38. package/dist/audiences-AAZH56WD.js +268 -0
  39. package/dist/audiences-X3RLGOVM.js +84 -0
  40. package/dist/audiences-X3RLGOVM.js.map +1 -0
  41. package/dist/audit-YY6X2MPA.js +151 -0
  42. package/dist/autocomplete-SAWJK4NF.js +111 -0
  43. package/dist/avatars-YSFFRHDK.js +38 -0
  44. package/dist/bid-pricing-HZ74SLEB.js +100 -0
  45. package/dist/brand-T3OACVQX.js +22 -0
  46. package/dist/brief-7S6XCJIA.js +538 -0
  47. package/dist/businesses-H3HIDQX6.js +53 -0
  48. package/dist/campaign-groups-YJK767AP.js +95 -0
  49. package/dist/campaign-writes-7ZF57KLH.js +165 -0
  50. package/dist/campaign-writes-7ZF57KLH.js.map +1 -0
  51. package/dist/campaign-writes-U5PUVSMT.js +170 -0
  52. package/dist/campaigns-AV6G3AUU.js +127 -0
  53. package/dist/campaigns-AV6G3AUU.js.map +1 -0
  54. package/dist/campaigns-GALDR5KK.js +109 -0
  55. package/dist/campaigns-JEIKY2M4.js +76 -0
  56. package/dist/campaigns-VTRMKSAT.js +107 -0
  57. package/dist/canvas-SVJEQO4V.js +46 -0
  58. package/dist/capabilities-2KT6TCGZ.js +144 -0
  59. package/dist/catalog-S32MX453.js +65 -0
  60. package/dist/catalogs-OCVXZLIF.js +128 -0
  61. package/dist/catalogs-RXJTZTVX.js +778 -0
  62. package/dist/catalogs-RXJTZTVX.js.map +1 -0
  63. package/dist/changes-5TOYRKZR.js +135 -0
  64. package/dist/chatgpt-QVF2FD3E.js +47 -0
  65. package/dist/chats-QG72JB6Y.js +276 -0
  66. package/dist/chats-QG72JB6Y.js.map +1 -0
  67. package/dist/check-SLNHVYGS.js +104 -0
  68. package/dist/chunk-2C7AHPM4.js +191 -0
  69. package/dist/chunk-2C7AHPM4.js.map +1 -0
  70. package/dist/chunk-2LI6746F.js +103 -0
  71. package/dist/chunk-2PWNIEW4.js +197 -0
  72. package/dist/chunk-2WZI36D3.js +317 -0
  73. package/dist/chunk-3W6G6ARX.js +122 -0
  74. package/dist/chunk-45UK4KYJ.js +1606 -0
  75. package/dist/chunk-46GWHUKN.js +225 -0
  76. package/dist/chunk-4AMIHNNP.js +1919 -0
  77. package/dist/chunk-4KJMLYCD.js +224 -0
  78. package/dist/chunk-5C35OW7L.js +205 -0
  79. package/dist/chunk-5C35OW7L.js.map +1 -0
  80. package/dist/chunk-5GQCN2QZ.js +391 -0
  81. package/dist/chunk-5GQCN2QZ.js.map +1 -0
  82. package/dist/chunk-5HJRZFMW.js +207 -0
  83. package/dist/chunk-65Y3RCWP.js +68 -0
  84. package/dist/chunk-65Y3RCWP.js.map +1 -0
  85. package/dist/chunk-66QHX566.js +6306 -0
  86. package/dist/chunk-6NCJGU6I.js +191 -0
  87. package/dist/chunk-6WCAV27H.js +494 -0
  88. package/dist/chunk-A4MVVPJ2.js +4204 -0
  89. package/dist/chunk-A4MVVPJ2.js.map +1 -0
  90. package/dist/chunk-AO45BX6Q.js +66 -0
  91. package/dist/chunk-AQM4JH62.js +274 -0
  92. package/dist/chunk-AQM4JH62.js.map +1 -0
  93. package/dist/chunk-BDYLILMW.js +150 -0
  94. package/dist/chunk-BL2MX6CR.js +249 -0
  95. package/dist/chunk-BOPC3D6I.js +604 -0
  96. package/dist/chunk-BTY4LZBG.js +46 -0
  97. package/dist/chunk-C7NWUCLQ.js +64 -0
  98. package/dist/chunk-CP4P6YKM.js +287 -0
  99. package/dist/chunk-CP4P6YKM.js.map +1 -0
  100. package/dist/chunk-D4CKCNGW.js +547 -0
  101. package/dist/chunk-D5CUAOQX.js +297 -0
  102. package/dist/chunk-D5UXWKLQ.js +903 -0
  103. package/dist/chunk-DCBZ5CHZ.js +139 -0
  104. package/dist/chunk-E2RFM6R2.js +1518 -0
  105. package/dist/chunk-EOY6BK4C.js +148 -0
  106. package/dist/chunk-FA4YZFRV.js +392 -0
  107. package/dist/chunk-FVHJCERJ.js +942 -0
  108. package/dist/chunk-G2LGMWNG.js +627 -0
  109. package/dist/chunk-G4STCTY3.js +399 -0
  110. package/dist/chunk-G6XKD7QE.js +77 -0
  111. package/dist/chunk-GSZZLW5Q.js +831 -0
  112. package/dist/chunk-HLVRHBKL.js +1078 -0
  113. package/dist/chunk-HLVRHBKL.js.map +1 -0
  114. package/dist/chunk-HSPMBLKE.js +363 -0
  115. package/dist/chunk-IG627WWY.js +23992 -0
  116. package/dist/chunk-IG627WWY.js.map +1 -0
  117. package/dist/chunk-IJ22WP3G.js +275 -0
  118. package/dist/chunk-IKCP5NCE.js +843 -0
  119. package/dist/chunk-ILSKYRDR.js +169 -0
  120. package/dist/chunk-JAC6JVCI.js +26 -0
  121. package/dist/chunk-JKJQWRLO.js +91 -0
  122. package/dist/chunk-JQH5VG6F.js +5368 -0
  123. package/dist/chunk-JQU2LUZG.js +57 -0
  124. package/dist/chunk-JVH5A3XC.js +8914 -0
  125. package/dist/chunk-JYALBYN7.js +131 -0
  126. package/dist/chunk-KOXDXSKN.js +8939 -0
  127. package/dist/chunk-LOMH4TTC.js +1079 -0
  128. package/dist/chunk-LXQB4ZGE.js +142 -0
  129. package/dist/chunk-M6PN3VH6.js +19 -0
  130. package/dist/chunk-M7IJU77B.js +665 -0
  131. package/dist/chunk-MCJ5I5LR.js +3187 -0
  132. package/dist/chunk-MCJ5I5LR.js.map +1 -0
  133. package/dist/chunk-MVB32GPI.js +592 -0
  134. package/dist/chunk-MXH35PJ5.js +51 -0
  135. package/dist/chunk-MZPS46OR.js +76 -0
  136. package/dist/chunk-NEIUVSDK.js +206 -0
  137. package/dist/chunk-NEOUY3Q7.js +285 -0
  138. package/dist/chunk-NXZCCGES.js +159 -0
  139. package/dist/chunk-P3W6SRSQ.js +455 -0
  140. package/dist/chunk-P5FRWPG7.js +160 -0
  141. package/dist/chunk-PA4W7BCQ.js +23 -0
  142. package/dist/chunk-PQJXIY64.js +97 -0
  143. package/dist/chunk-PTGYM4J6.js +89 -0
  144. package/dist/chunk-QNLJ3GNZ.js +433 -0
  145. package/dist/chunk-QTOZ32SU.js +163 -0
  146. package/dist/chunk-QTOZ32SU.js.map +1 -0
  147. package/dist/chunk-SISA4HQR.js +61 -0
  148. package/dist/chunk-SVAB6KV5.js +219 -0
  149. package/dist/chunk-SVAB6KV5.js.map +1 -0
  150. package/dist/chunk-SVM3DGAQ.js +228 -0
  151. package/dist/chunk-TP7HKSBX.js +172 -0
  152. package/dist/chunk-TRPJJMCS.js +346 -0
  153. package/dist/chunk-UNX6BS4U.js +3868 -0
  154. package/dist/chunk-VD73V44J.js +344 -0
  155. package/dist/chunk-VL65H6YM.js +846 -0
  156. package/dist/chunk-WTJSMYY2.js +4249 -0
  157. package/dist/chunk-WTJSMYY2.js.map +1 -0
  158. package/dist/chunk-X7F4Z6UM.js +156 -0
  159. package/dist/chunk-YW7VMU5L.js +654 -0
  160. package/dist/chunk-YW7VMU5L.js.map +1 -0
  161. package/dist/chunk-ZCQVKDHV.js +98 -0
  162. package/dist/chunk-ZJSGGJ5R.js +167 -0
  163. package/dist/claim-SLGYOOWD.js +197 -0
  164. package/dist/cli.js +36 -36
  165. package/dist/companies-IVMH6YII.js +195 -0
  166. package/dist/complete-45L2FI2X.js +81 -0
  167. package/dist/connect-S54TJ6OV.js +42 -0
  168. package/dist/conversation-RIOL3OJ7.js +93 -0
  169. package/dist/conversion-report-REOHVLCI.js +125 -0
  170. package/dist/conversion-upload-command-W4GELHIQ.js +438 -0
  171. package/dist/conversion-writes-ECZBVY7D.js +120 -0
  172. package/dist/conversions-5QCSCRLI.js +76 -0
  173. package/dist/conversions-TKIXNSYR.js +135 -0
  174. package/dist/copy-writes-D2RTHAL6.js +167 -0
  175. package/dist/copy-writes-D2RTHAL6.js.map +1 -0
  176. package/dist/create-7JY2PTIZ.js +132 -0
  177. package/dist/create-ACLCRXQP.js +59 -0
  178. package/dist/create-KYBMFD32.js +207 -0
  179. package/dist/create-VAPJ52GJ.js +235 -0
  180. package/dist/creatives-5I3G5YP3.js +182 -0
  181. package/dist/creatives-MZ6ICNSY.js +88 -0
  182. package/dist/creatives-MZ6ICNSY.js.map +1 -0
  183. package/dist/creatives-PCAGWPW3.js +58 -0
  184. package/dist/credentials-YTQ6BHWV.js +287 -0
  185. package/dist/critique-BHYJYZDV.js +1458 -0
  186. package/dist/critique-NRHUPIWF.js +227 -0
  187. package/dist/crm-IKTWHWEB.js +318 -0
  188. package/dist/crm-N7K57LZJ.js +224 -0
  189. package/dist/currency-PW7HIBZ6.js +88 -0
  190. package/dist/custom-conversions-FIP6ZS34.js +127 -0
  191. package/dist/custom-conversions-FIP6ZS34.js.map +1 -0
  192. package/dist/customers-NLU7NYDC.js +56 -0
  193. package/dist/delete-26J3X3ZH.js +64 -0
  194. package/dist/delete-A4F5Z54J.js +66 -0
  195. package/dist/delete-EVXOFT2H.js +54 -0
  196. package/dist/demographics-VZKFMM4X.js +138 -0
  197. package/dist/discard-ULRVUJDV.js +66 -0
  198. package/dist/discover-PVXWX2WL.js +172 -0
  199. package/dist/domain-L4WCCX7R.js +98 -0
  200. package/dist/draft-34CGWUVA.js +281 -0
  201. package/dist/draft-4P3YO67N.js +332 -0
  202. package/dist/draft-4P3YO67N.js.map +1 -0
  203. package/dist/draft-57OQKHZI.js +306 -0
  204. package/dist/draft-L45PGCYZ.js +237 -0
  205. package/dist/draft-L45PGCYZ.js.map +1 -0
  206. package/dist/draft-O4S5RKWK.js +217 -0
  207. package/dist/draft-PAYD6GIM.js +307 -0
  208. package/dist/engine/index.js +9 -9
  209. package/dist/experiment-7N4QFRWV.js +1397 -0
  210. package/dist/facets-EHQKGGJ2.js +114 -0
  211. package/dist/feedback-O3H42V4I.js +106 -0
  212. package/dist/feedback-record-FAPN2GBS.js +260 -0
  213. package/dist/fetch-ETKT2RBC.js +176 -0
  214. package/dist/find-FSQAEGGF.js +134 -0
  215. package/dist/fit-UJQ47C4A.js +62 -0
  216. package/dist/flows-T22B77J3.js +247 -0
  217. package/dist/fonts-7VWBQPJF.js +36 -0
  218. package/dist/forecast-HB3RDBQN.js +168 -0
  219. package/dist/forecast-OI7YWZ6F.js +118 -0
  220. package/dist/funnel-7OA33VRP.js +394 -0
  221. package/dist/ga4-LPDIBNYP.js +55 -0
  222. package/dist/generate-OMXBFGGR.js +263 -0
  223. package/dist/get-2RSN4N3J.js +56 -0
  224. package/dist/get-6N7QJMIP.js +79 -0
  225. package/dist/google-5ESVO76E.js +136 -0
  226. package/dist/google-6JZBJ2ZQ.js +3265 -0
  227. package/dist/google-ads-G7REKD4A.js +195 -0
  228. package/dist/gsc-FIZTQX3N.js +30 -0
  229. package/dist/history-QKDYBSYM.js +67 -0
  230. package/dist/history-YMK2JNZU.js +133 -0
  231. package/dist/hubspot-BUFS7S33.js +779 -0
  232. package/dist/icon-CSVAZ7NE.js +137 -0
  233. package/dist/ideas-JQT422P7.js +40 -0
  234. package/dist/images-WBNWK2ZH.js +92 -0
  235. package/dist/ingest-RQUJGS7K.js +107 -0
  236. package/dist/ingest-XLTRLCDV.js +23 -0
  237. package/dist/insights-SQLE5NOJ.js +122 -0
  238. package/dist/insights-YWVJMATY.js +424 -0
  239. package/dist/insights-YWVJMATY.js.map +1 -0
  240. package/dist/inspect-KFVAMD4N.js +189 -0
  241. package/dist/inspiration-IX5N724J.js +53 -0
  242. package/dist/instant-experiences-NQ2GWIWL.js +257 -0
  243. package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
  244. package/dist/intent-4KJGYYHL.js +95 -0
  245. package/dist/keyword-gap-U64KXDR4.js +130 -0
  246. package/dist/keyword-metrics-WYF3QMCW.js +197 -0
  247. package/dist/keywords-for-site-G5L5EP3T.js +128 -0
  248. package/dist/landing-Y6QCTXCZ.js +28 -0
  249. package/dist/languages-7IPVGGW5.js +40 -0
  250. package/dist/leads-4SJ4NJOI.js +90 -0
  251. package/dist/leads-THI37ZMD.js +537 -0
  252. package/dist/leads-THI37ZMD.js.map +1 -0
  253. package/dist/learn-3BDZUWDT.js +204 -0
  254. package/dist/line-item-writes-YXKYR25W.js +208 -0
  255. package/dist/line-items-CKUD2UU4.js +103 -0
  256. package/dist/link-VBYFI7AM.js +64 -0
  257. package/dist/linkedin-UGMAFSGO.js +1057 -0
  258. package/dist/list-6ZNZGRRK.js +151 -0
  259. package/dist/list-ENYDGT3F.js +64 -0
  260. package/dist/list-VSUF2IWT.js +303 -0
  261. package/dist/locations-HM56X2MK.js +67 -0
  262. package/dist/locations-HM56X2MK.js.map +1 -0
  263. package/dist/locations-QJBYWRCN.js +40 -0
  264. package/dist/log-AACKGBDW.js +92 -0
  265. package/dist/logo-VHXH4J6A.js +18 -0
  266. package/dist/make-W2PYZXYF.js +1353 -0
  267. package/dist/map-63CQHWPI.js +433 -0
  268. package/dist/mcp-RKAXC6IP.js +714 -0
  269. package/dist/media-H6B7VDON.js +18 -0
  270. package/dist/media-H6B7VDON.js.map +1 -0
  271. package/dist/media-sources-EZKAJNVD.js +32 -0
  272. package/dist/members-SELIA674.js +44 -0
  273. package/dist/meta-YHDTGJQ6.js +122 -0
  274. package/dist/meta-YHDTGJQ6.js.map +1 -0
  275. package/dist/metrics-V6SKOVNH.js +152 -0
  276. package/dist/models-2XRYXSRA.js +155 -0
  277. package/dist/normalize-VAZPTBDX.js +141 -0
  278. package/dist/options-NSCZSQ5P.js +122 -0
  279. package/dist/organization-SHREKDST.js +881 -0
  280. package/dist/organization-SHREKDST.js.map +1 -0
  281. package/dist/page-photos-CXRG4AXV.js +115 -0
  282. package/dist/page-photos-CXRG4AXV.js.map +1 -0
  283. package/dist/pages-PTWRXAZT.js +66 -0
  284. package/dist/performance-K7E5KAZW.js +24 -0
  285. package/dist/pixels-MYT3TCHZ.js +60 -0
  286. package/dist/pixels-ZZCQUS3J.js +108 -0
  287. package/dist/preview-XOXAAPMQ.js +215 -0
  288. package/dist/preview-XOXAAPMQ.js.map +1 -0
  289. package/dist/promoted-tweet-writes-PKEO6WUK.js +180 -0
  290. package/dist/promoted-tweets-7MXVZRBI.js +119 -0
  291. package/dist/publish-MPMGRV72.js +341 -0
  292. package/dist/query-UD4OIZ3A.js +61 -0
  293. package/dist/reddit-XIHRI3CN.js +26 -0
  294. package/dist/refresh-A27N75NH.js +94 -0
  295. package/dist/release-UKRB5IUN.js +60 -0
  296. package/dist/relevant-pages-VXSHEOU2.js +99 -0
  297. package/dist/remove-AFNFVPZY.js +50 -0
  298. package/dist/reopen-M5HE6J3G.js +63 -0
  299. package/dist/rerun-5THJLQQJ.js +90 -0
  300. package/dist/research-JHDWWFL7.js +62 -0
  301. package/dist/research-U7RQXMYH.js +262 -0
  302. package/dist/reset-4CCWB2RT.js +54 -0
  303. package/dist/reset-J3KCWFMZ.js +54 -0
  304. package/dist/resolve-HEK27ANI.js +121 -0
  305. package/dist/retry-HPZIUG2S.js +62 -0
  306. package/dist/retry-VVI6N6UR.js +60 -0
  307. package/dist/rule-writes-6ZCAJDYZ.js +522 -0
  308. package/dist/rule-writes-6ZCAJDYZ.js.map +1 -0
  309. package/dist/rules-BMYOY2BM.js +216 -0
  310. package/dist/rules-BMYOY2BM.js.map +1 -0
  311. package/dist/rules-YLLFDZEM.js +96 -0
  312. package/dist/rules-add-U2GU4AGP.js +462 -0
  313. package/dist/run-M7ZDE6IA.js +66 -0
  314. package/dist/run-V5YQB6TH.js +65 -0
  315. package/dist/scaffold-ad-H4GJOKAW.js +1511 -0
  316. package/dist/scaffold-static-ad-2YIFHCTL.js +1005 -0
  317. package/dist/scaffold-video-3EJLKR2O.js +883 -0
  318. package/dist/schedule-QMOKWTJ3.js +61 -0
  319. package/dist/scheduled-agents-FCQHQ6KR.js +50 -0
  320. package/dist/schema-THFLCMBN.js +132 -0
  321. package/dist/schema-XKEEAUXP.js +69 -0
  322. package/dist/search-XIUYSWO6.js +174 -0
  323. package/dist/select-I22NPSIW.js +101 -0
  324. package/dist/set-prompt-S75OMQ7L.js +193 -0
  325. package/dist/setup-links-QVI6NAOK.js +141 -0
  326. package/dist/shared-3IBNDEFL.js +31 -0
  327. package/dist/site-PZPJY33N.js +177 -0
  328. package/dist/sources-ER7ANNG3.js +454 -0
  329. package/dist/sources-VA23PDND.js +30 -0
  330. package/dist/stale-MHTU2NQJ.js +71 -0
  331. package/dist/stats-ZAGJH4AD.js +34 -0
  332. package/dist/status-ABMJBCPJ.js +62 -0
  333. package/dist/stock-6SHHLSKG.js +179 -0
  334. package/dist/studies-4NIV4D5Y.js +249 -0
  335. package/dist/studies-4NIV4D5Y.js.map +1 -0
  336. package/dist/studio-ZLCGXFAN.js +49 -0
  337. package/dist/study-writes-L2AA2PGL.js +467 -0
  338. package/dist/study-writes-L2AA2PGL.js.map +1 -0
  339. package/dist/sync-QDD3MRJ6.js +54 -0
  340. package/dist/sync-definition-2EBSQA6A.js +64 -0
  341. package/dist/tag-manager-3CJ66GKJ.js +43 -0
  342. package/dist/tags-5JYOEYIT.js +20 -0
  343. package/dist/tags-B473RWAA.js +224 -0
  344. package/dist/tags-EWHPUM2V.js +20 -0
  345. package/dist/tags-KBCX6BDU.js +26 -0
  346. package/dist/tags-PEWN6GNZ.js +20 -0
  347. package/dist/targeting-LNDQV4EK.js +759 -0
  348. package/dist/targeting-LNDQV4EK.js.map +1 -0
  349. package/dist/targeting-criteria-EU65WUUF.js +113 -0
  350. package/dist/targets-KVXS5QKM.js +103 -0
  351. package/dist/testimonials-GR6TIS5S.js +32 -0
  352. package/dist/themes-JWWTOR3I.js +94 -0
  353. package/dist/top-companies-OOX3DITI.js +108 -0
  354. package/dist/translate-GEFUP6KQ.js +604 -0
  355. package/dist/triggers-OX2GKG4Y.js +142 -0
  356. package/dist/unlink-3USEPJSA.js +67 -0
  357. package/dist/unstage-VSCNPTAC.js +85 -0
  358. package/dist/update-6JKTH65B.js +152 -0
  359. package/dist/update-FG4ELXYJ.js +98 -0
  360. package/dist/update-GZFKHA3A.js +188 -0
  361. package/dist/update-HZHG67N6.js +63 -0
  362. package/dist/upload-BKCQ6FRW.js +126 -0
  363. package/dist/url-options-HCVRPZYU.js +130 -0
  364. package/dist/url-params-UN4DRN2H.js +98 -0
  365. package/dist/validate-NOWIOAHE.js +117 -0
  366. package/dist/videos-XMTDEHEJ.js +39 -0
  367. package/dist/viewer-check-U4XZMMS7.js +80 -0
  368. package/dist/viewer-check-U4XZMMS7.js.map +1 -0
  369. package/dist/web-UGU7YMII.js +140 -0
  370. package/dist/winning-ads-QOAYIR5U.js +84 -0
  371. package/dist/write-commands-6VR2UD3T.js +1024 -0
  372. package/dist/write-commands-PEJBTME6.js +1165 -0
  373. package/dist/write-commands-PEJBTME6.js.map +1 -0
  374. package/dist/x-VCSMV7T5.js +47 -0
  375. package/package.json +1 -1
  376. package/dist/account-7LUQWY6Q.js +0 -49
  377. package/dist/account-7LUQWY6Q.js.map +0 -1
  378. package/dist/account-ELL7ZZLM.js +0 -80
  379. package/dist/account-YVQGH2GB.js +0 -79
  380. package/dist/account-reads-5B4FFOZU.js +0 -218
  381. package/dist/account-writes-CEPERFD6.js +0 -66
  382. package/dist/accounts-6WNFCGUW.js +0 -611
  383. package/dist/accounts-UA2ZWRN4.js +0 -75
  384. package/dist/accounts-ZIE7J6RR.js +0 -77
  385. package/dist/actions-QZQTB3KR.js +0 -55
  386. package/dist/activecampaign-LIXWDX74.js +0 -935
  387. package/dist/activities-IQPJPP4B.js +0 -74
  388. package/dist/ad-group-writes-XGSCEQTW.js +0 -170
  389. package/dist/ad-groups-GKOLDGET.js +0 -68
  390. package/dist/ad-writes-VVD36JKH.js +0 -174
  391. package/dist/add-HQFI5UVS.js +0 -302
  392. package/dist/add-JWJP4CQY.js +0 -104
  393. package/dist/ads-EKZVHKPN.js +0 -77
  394. package/dist/ads-F365TPXO.js +0 -40
  395. package/dist/ads-HXX2IAFF.js +0 -113
  396. package/dist/ads-HXX2IAFF.js.map +0 -1
  397. package/dist/adsets-LPN6WFGF.js +0 -176
  398. package/dist/adsets-LPN6WFGF.js.map +0 -1
  399. package/dist/advertisers-TPIS4R73.js +0 -120
  400. package/dist/analytics-AFW7ESJW.js +0 -1976
  401. package/dist/analytics-QG7TBGMC.js +0 -433
  402. package/dist/animate-G4P3OEJE.js +0 -480
  403. package/dist/assign-VKINQVCJ.js +0 -77
  404. package/dist/audience-size-6ZEWCPX6.js +0 -73
  405. package/dist/audiences-BU4JZJT7.js +0 -268
  406. package/dist/audiences-XEZHACKH.js +0 -78
  407. package/dist/audiences-XEZHACKH.js.map +0 -1
  408. package/dist/audit-5US7TTUF.js +0 -151
  409. package/dist/autocomplete-XBVLHJ4R.js +0 -111
  410. package/dist/avatars-5IBVOF63.js +0 -38
  411. package/dist/bid-pricing-EFYUHTWP.js +0 -100
  412. package/dist/brand-Z5KRGJX4.js +0 -22
  413. package/dist/brief-DGAZ6NJG.js +0 -538
  414. package/dist/businesses-PRRYPR7H.js +0 -53
  415. package/dist/campaign-groups-AOMTKPUY.js +0 -95
  416. package/dist/campaign-writes-NSEJCINS.js +0 -170
  417. package/dist/campaign-writes-NXVLFVZ6.js +0 -165
  418. package/dist/campaign-writes-NXVLFVZ6.js.map +0 -1
  419. package/dist/campaigns-4SOLY7OR.js +0 -110
  420. package/dist/campaigns-4SOLY7OR.js.map +0 -1
  421. package/dist/campaigns-UELLCVI2.js +0 -109
  422. package/dist/campaigns-VWN2XPK2.js +0 -76
  423. package/dist/campaigns-WE42FQKM.js +0 -107
  424. package/dist/canvas-DG3CJ7FA.js +0 -46
  425. package/dist/capabilities-FDCILMJK.js +0 -144
  426. package/dist/catalog-KZNB2YJS.js +0 -65
  427. package/dist/catalogs-XH5NHH4C.js +0 -128
  428. package/dist/changes-DKP263OZ.js +0 -135
  429. package/dist/chatgpt-K6KNTME4.js +0 -47
  430. package/dist/chats-NFSZEF5L.js +0 -262
  431. package/dist/chats-NFSZEF5L.js.map +0 -1
  432. package/dist/check-6UVMPPNH.js +0 -104
  433. package/dist/chunk-2GT76KEX.js +0 -285
  434. package/dist/chunk-33XFNSBM.js +0 -433
  435. package/dist/chunk-36SU43V2.js +0 -6306
  436. package/dist/chunk-3BKNGXCL.js +0 -23992
  437. package/dist/chunk-3BKNGXCL.js.map +0 -1
  438. package/dist/chunk-3VCHJN2B.js +0 -627
  439. package/dist/chunk-5562QFVB.js +0 -275
  440. package/dist/chunk-5QW4OQM4.js +0 -831
  441. package/dist/chunk-5SRHACZW.js +0 -274
  442. package/dist/chunk-5SRHACZW.js.map +0 -1
  443. package/dist/chunk-6JWEGFM5.js +0 -174
  444. package/dist/chunk-6JWEGFM5.js.map +0 -1
  445. package/dist/chunk-6KULDLLR.js +0 -547
  446. package/dist/chunk-6OIKNJ7G.js +0 -26
  447. package/dist/chunk-6TG4CAYD.js +0 -19
  448. package/dist/chunk-6VZHOXP6.js +0 -172
  449. package/dist/chunk-7RBJ2Z7Z.js +0 -172
  450. package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
  451. package/dist/chunk-7RKUHTS6.js +0 -224
  452. package/dist/chunk-AGVCQHQK.js +0 -344
  453. package/dist/chunk-AJ45PER5.js +0 -57
  454. package/dist/chunk-AL3VGEG5.js +0 -665
  455. package/dist/chunk-AQMMAB2N.js +0 -197
  456. package/dist/chunk-B6VCTXSD.js +0 -97
  457. package/dist/chunk-B7FVPHCW.js +0 -843
  458. package/dist/chunk-BITS62MF.js +0 -77
  459. package/dist/chunk-C4MJ3WPQ.js +0 -592
  460. package/dist/chunk-C6BFE4X2.js +0 -51
  461. package/dist/chunk-D2YHDDKW.js +0 -23
  462. package/dist/chunk-E4GWQFTL.js +0 -66
  463. package/dist/chunk-EIDTAHUC.js +0 -191
  464. package/dist/chunk-ERRMJ7AZ.js +0 -169
  465. package/dist/chunk-EZ5KY6I2.js +0 -1079
  466. package/dist/chunk-F3CZFUXZ.js +0 -3187
  467. package/dist/chunk-F3CZFUXZ.js.map +0 -1
  468. package/dist/chunk-F5IH7G2F.js +0 -1919
  469. package/dist/chunk-GFTDR3Z2.js +0 -604
  470. package/dist/chunk-GGY2KH3K.js +0 -249
  471. package/dist/chunk-GOJXKIFQ.js +0 -1605
  472. package/dist/chunk-GOJXKIFQ.js.map +0 -1
  473. package/dist/chunk-GYJQV3IX.js +0 -225
  474. package/dist/chunk-H5HDZ7IC.js +0 -139
  475. package/dist/chunk-HVI4DNZL.js +0 -103
  476. package/dist/chunk-HY4G44UC.js +0 -156
  477. package/dist/chunk-I2WRZJAC.js +0 -46
  478. package/dist/chunk-IHUIXQBP.js +0 -206
  479. package/dist/chunk-IMWXYSCP.js +0 -392
  480. package/dist/chunk-KIGGMKAE.js +0 -66
  481. package/dist/chunk-KIGGMKAE.js.map +0 -1
  482. package/dist/chunk-KPYDTIAI.js +0 -317
  483. package/dist/chunk-L63JZLCX.js +0 -647
  484. package/dist/chunk-L63JZLCX.js.map +0 -1
  485. package/dist/chunk-M2D7ZWEU.js +0 -150
  486. package/dist/chunk-MP5IMGKF.js +0 -148
  487. package/dist/chunk-NA2KOPW6.js +0 -363
  488. package/dist/chunk-NAA4CKZZ.js +0 -4249
  489. package/dist/chunk-NAA4CKZZ.js.map +0 -1
  490. package/dist/chunk-NDVAOHMY.js +0 -903
  491. package/dist/chunk-NLUFREI6.js +0 -160
  492. package/dist/chunk-OKLYOMQ3.js +0 -1606
  493. package/dist/chunk-ONVPV23E.js +0 -122
  494. package/dist/chunk-OP7DNHD2.js +0 -137
  495. package/dist/chunk-OP7DNHD2.js.map +0 -1
  496. package/dist/chunk-OWRFIAW2.js +0 -91
  497. package/dist/chunk-P5ENZXC2.js +0 -64
  498. package/dist/chunk-QK76OM22.js +0 -297
  499. package/dist/chunk-R5IZ6P3E.js +0 -3868
  500. package/dist/chunk-RBIWYPJQ.js +0 -159
  501. package/dist/chunk-RESDRJRP.js +0 -399
  502. package/dist/chunk-RGX7AQ2K.js +0 -131
  503. package/dist/chunk-RWLQYW2L.js +0 -8939
  504. package/dist/chunk-S7B2TOOU.js +0 -98
  505. package/dist/chunk-SIKCVWM3.js +0 -76
  506. package/dist/chunk-TBZPXGEW.js +0 -142
  507. package/dist/chunk-TFJW5CXD.js +0 -5368
  508. package/dist/chunk-TPS3X5DI.js +0 -89
  509. package/dist/chunk-UM7ESCIN.js +0 -846
  510. package/dist/chunk-UWDYGSJF.js +0 -61
  511. package/dist/chunk-V57TZQPI.js +0 -228
  512. package/dist/chunk-VLKYUZF7.js +0 -346
  513. package/dist/chunk-VYZ4KQ3C.js +0 -942
  514. package/dist/chunk-WRMMJUNJ.js +0 -494
  515. package/dist/chunk-WY5H3XYC.js +0 -167
  516. package/dist/chunk-XLJVJ5TK.js +0 -1518
  517. package/dist/chunk-Y2GH4YWA.js +0 -207
  518. package/dist/chunk-YSB26POP.js +0 -8914
  519. package/dist/chunk-YT2ZSPWF.js +0 -455
  520. package/dist/claim-7CB6TVEW.js +0 -197
  521. package/dist/companies-CACKHSY5.js +0 -195
  522. package/dist/complete-IHLTYFT2.js +0 -81
  523. package/dist/connect-J722BTO4.js +0 -42
  524. package/dist/conversation-HRNJJJW5.js +0 -93
  525. package/dist/conversion-report-KL4LIVY5.js +0 -125
  526. package/dist/conversion-upload-command-WT6C35QL.js +0 -438
  527. package/dist/conversion-writes-MPBCTVSP.js +0 -120
  528. package/dist/conversions-ACYT6K7H.js +0 -76
  529. package/dist/conversions-DE7W5T4Z.js +0 -135
  530. package/dist/create-6ZDLKC4F.js +0 -59
  531. package/dist/create-7YO6DAAT.js +0 -207
  532. package/dist/create-W7OTXLCZ.js +0 -132
  533. package/dist/create-ZU7AHBYM.js +0 -235
  534. package/dist/creatives-6UYAAC5E.js +0 -58
  535. package/dist/creatives-XUIY3MQI.js +0 -182
  536. package/dist/creatives-YJ3CXZQC.js +0 -87
  537. package/dist/creatives-YJ3CXZQC.js.map +0 -1
  538. package/dist/credentials-ADGJKYA7.js +0 -287
  539. package/dist/critique-BBHPASRE.js +0 -227
  540. package/dist/critique-T7QGPPEX.js +0 -1458
  541. package/dist/crm-EKDV2SET.js +0 -224
  542. package/dist/crm-MXT2HUKU.js +0 -318
  543. package/dist/currency-TBBXPWXU.js +0 -88
  544. package/dist/custom-conversions-YRYE65PU.js +0 -125
  545. package/dist/custom-conversions-YRYE65PU.js.map +0 -1
  546. package/dist/customers-EZEVYT4Z.js +0 -56
  547. package/dist/delete-3UDIH2ZD.js +0 -66
  548. package/dist/delete-4L3HO5B6.js +0 -54
  549. package/dist/delete-SRU4GRDT.js +0 -64
  550. package/dist/demographics-3OWQDW7B.js +0 -138
  551. package/dist/discard-UEMA5UHL.js +0 -66
  552. package/dist/discover-RTV5XWRI.js +0 -172
  553. package/dist/domain-6324IS6I.js +0 -98
  554. package/dist/draft-2KS56KCT.js +0 -307
  555. package/dist/draft-777O2UIX.js +0 -217
  556. package/dist/draft-EWDOIXSH.js +0 -233
  557. package/dist/draft-EWDOIXSH.js.map +0 -1
  558. package/dist/draft-GRL7577L.js +0 -306
  559. package/dist/draft-VOFJXUOC.js +0 -328
  560. package/dist/draft-VOFJXUOC.js.map +0 -1
  561. package/dist/draft-VXGZDBC7.js +0 -281
  562. package/dist/experiment-G3FQVAJU.js +0 -1397
  563. package/dist/facets-YV6NORA6.js +0 -114
  564. package/dist/feedback-YITFVOHX.js +0 -106
  565. package/dist/feedback-record-FW2QWFYQ.js +0 -260
  566. package/dist/fetch-EYXLTSKW.js +0 -176
  567. package/dist/find-EVY4XEIQ.js +0 -134
  568. package/dist/fit-KEFUU7QA.js +0 -62
  569. package/dist/flows-EJV7WMGD.js +0 -247
  570. package/dist/fonts-DMIBVZ6D.js +0 -36
  571. package/dist/forecast-5YKQZSE7.js +0 -118
  572. package/dist/forecast-G43FKEZE.js +0 -168
  573. package/dist/funnel-ND7OXIKT.js +0 -394
  574. package/dist/ga4-2BL5YAYN.js +0 -55
  575. package/dist/generate-D3LUXFJT.js +0 -263
  576. package/dist/get-GB6SPWCA.js +0 -79
  577. package/dist/get-PU3YHQWN.js +0 -56
  578. package/dist/google-7STODZQR.js +0 -136
  579. package/dist/google-MHB5TOFN.js +0 -3265
  580. package/dist/google-ads-XGEGKEL6.js +0 -195
  581. package/dist/gsc-UU3T2C6B.js +0 -30
  582. package/dist/history-NYWAMWAY.js +0 -133
  583. package/dist/history-OQAOTEO3.js +0 -67
  584. package/dist/hubspot-LMIVY7FR.js +0 -779
  585. package/dist/icon-GB7UH5RF.js +0 -137
  586. package/dist/ideas-W4IIVOZ4.js +0 -40
  587. package/dist/images-PPMIMPTS.js +0 -92
  588. package/dist/ingest-2YGWBWAB.js +0 -107
  589. package/dist/ingest-FRDTTPYD.js +0 -23
  590. package/dist/insights-4HT2NAYP.js +0 -423
  591. package/dist/insights-4HT2NAYP.js.map +0 -1
  592. package/dist/insights-PZXFCMX2.js +0 -122
  593. package/dist/inspect-QF2S3U2E.js +0 -189
  594. package/dist/inspiration-XQYHBJY2.js +0 -53
  595. package/dist/intent-JJTDJ732.js +0 -95
  596. package/dist/keyword-gap-4NQN56JP.js +0 -130
  597. package/dist/keyword-metrics-QCIOBMTW.js +0 -197
  598. package/dist/keywords-for-site-FS635JXM.js +0 -128
  599. package/dist/landing-6H5QEHOW.js +0 -28
  600. package/dist/languages-FNE45NXJ.js +0 -40
  601. package/dist/leads-2XOSAYP4.js +0 -293
  602. package/dist/leads-2XOSAYP4.js.map +0 -1
  603. package/dist/leads-MKLSWZO6.js +0 -90
  604. package/dist/learn-C564OA7W.js +0 -204
  605. package/dist/line-item-writes-K7QNWRQ3.js +0 -208
  606. package/dist/line-items-TBTHVKCZ.js +0 -103
  607. package/dist/link-CPJJ6T4M.js +0 -64
  608. package/dist/linkedin-HGUK624E.js +0 -1057
  609. package/dist/list-AAT5CWDA.js +0 -303
  610. package/dist/list-N5SJXLYF.js +0 -64
  611. package/dist/list-OKDU5W4D.js +0 -151
  612. package/dist/locations-FTDI4FBI.js +0 -40
  613. package/dist/locations-VL2G22Y5.js +0 -67
  614. package/dist/locations-VL2G22Y5.js.map +0 -1
  615. package/dist/log-KVRWIJS5.js +0 -92
  616. package/dist/logo-YSNUUT33.js +0 -18
  617. package/dist/make-4NTHJ4TG.js +0 -1353
  618. package/dist/map-HQ43MKEC.js +0 -433
  619. package/dist/mcp-MFLUHPL5.js +0 -714
  620. package/dist/media-ES2UBGYW.js +0 -15
  621. package/dist/media-ES2UBGYW.js.map +0 -1
  622. package/dist/media-sources-A4ICRSKB.js +0 -32
  623. package/dist/members-NRKQSSVS.js +0 -44
  624. package/dist/meta-AOIPEDV5.js +0 -69
  625. package/dist/meta-AOIPEDV5.js.map +0 -1
  626. package/dist/metrics-3BRTJNGW.js +0 -152
  627. package/dist/models-IH6KE6OH.js +0 -155
  628. package/dist/normalize-EH6BTBOB.js +0 -141
  629. package/dist/options-YEPQXXRY.js +0 -122
  630. package/dist/organization-XSWT7S5S.js +0 -836
  631. package/dist/organization-XSWT7S5S.js.map +0 -1
  632. package/dist/pages-FTI44OSH.js +0 -66
  633. package/dist/performance-YJVMM6DL.js +0 -24
  634. package/dist/pixels-DWW2TDY2.js +0 -60
  635. package/dist/pixels-MBKR4XPX.js +0 -108
  636. package/dist/preview-V4YBD45S.js +0 -169
  637. package/dist/preview-V4YBD45S.js.map +0 -1
  638. package/dist/promoted-tweet-writes-M5OVEBC5.js +0 -180
  639. package/dist/promoted-tweets-2MOIERNB.js +0 -119
  640. package/dist/publish-NPENZIHV.js +0 -341
  641. package/dist/query-3OMCFGLU.js +0 -61
  642. package/dist/reddit-LI37G5LS.js +0 -26
  643. package/dist/refresh-4BBV5SPL.js +0 -94
  644. package/dist/release-4X3TLMQT.js +0 -60
  645. package/dist/relevant-pages-DIYZM6FJ.js +0 -99
  646. package/dist/remove-Q4AES5UH.js +0 -50
  647. package/dist/reopen-SDTPL3BN.js +0 -63
  648. package/dist/rerun-NA3MH4HG.js +0 -90
  649. package/dist/research-5H265UV7.js +0 -262
  650. package/dist/research-LXQRNAQ2.js +0 -62
  651. package/dist/reset-42M5IKDI.js +0 -54
  652. package/dist/reset-52PU3CVD.js +0 -54
  653. package/dist/resolve-R4IACKIZ.js +0 -121
  654. package/dist/retry-FPF42ZNG.js +0 -62
  655. package/dist/retry-RTQGAH6G.js +0 -60
  656. package/dist/rules-CGNYJYVC.js +0 -96
  657. package/dist/rules-add-EO5476BF.js +0 -462
  658. package/dist/run-3AZJ3UQU.js +0 -66
  659. package/dist/run-AFMTXJTU.js +0 -65
  660. package/dist/scaffold-ad-OGU2IINY.js +0 -1511
  661. package/dist/scaffold-static-ad-HO4BJW4H.js +0 -1005
  662. package/dist/scaffold-video-TLQ4WSDK.js +0 -883
  663. package/dist/schedule-AWWMI5FO.js +0 -61
  664. package/dist/scheduled-agents-ELLU7BSE.js +0 -50
  665. package/dist/schema-BOOZEJPA.js +0 -69
  666. package/dist/schema-QNVLKMKG.js +0 -132
  667. package/dist/search-BZNIB2XF.js +0 -174
  668. package/dist/select-NLWZIQ7L.js +0 -101
  669. package/dist/set-prompt-QKW2L553.js +0 -193
  670. package/dist/setup-links-NMSQ4BG7.js +0 -141
  671. package/dist/shared-NDRFKAH7.js +0 -31
  672. package/dist/site-GGYFBZT5.js +0 -177
  673. package/dist/sources-KTGDMUV4.js +0 -30
  674. package/dist/sources-LPQZDTIU.js +0 -454
  675. package/dist/stale-C5JLQ4D2.js +0 -71
  676. package/dist/stats-RCLQE4HJ.js +0 -34
  677. package/dist/status-6PS3HDS5.js +0 -62
  678. package/dist/stock-ECRBD7RP.js +0 -179
  679. package/dist/studio-LMDDQWRY.js +0 -49
  680. package/dist/sync-XSATDLE6.js +0 -54
  681. package/dist/sync-definition-LSGDHMHV.js +0 -64
  682. package/dist/tag-manager-G3LBQZUL.js +0 -43
  683. package/dist/tags-5Y7TPJNZ.js +0 -20
  684. package/dist/tags-6TT5ZJVX.js +0 -26
  685. package/dist/tags-BQLIOWS4.js +0 -20
  686. package/dist/tags-EXWKO6Q6.js +0 -224
  687. package/dist/tags-OK34UGSM.js +0 -20
  688. package/dist/targeting-criteria-AWPMOX4V.js +0 -113
  689. package/dist/targets-EXYCOHEX.js +0 -103
  690. package/dist/testimonials-BTYMR3U4.js +0 -32
  691. package/dist/themes-AOU4ZZXL.js +0 -94
  692. package/dist/top-companies-FRPAURAH.js +0 -108
  693. package/dist/translate-SF234KLG.js +0 -604
  694. package/dist/triggers-SJUXDU3X.js +0 -142
  695. package/dist/unlink-RIZD3XTI.js +0 -67
  696. package/dist/unstage-MKTIVI3I.js +0 -85
  697. package/dist/update-COHXM25C.js +0 -152
  698. package/dist/update-NKX2GXAR.js +0 -63
  699. package/dist/update-OXVZXDYH.js +0 -98
  700. package/dist/update-SZLYEEU4.js +0 -188
  701. package/dist/upload-LEDO3IRC.js +0 -126
  702. package/dist/url-options-Q5SL42CV.js +0 -130
  703. package/dist/url-params-KP6D7BF3.js +0 -98
  704. package/dist/validate-7QWQZ2OL.js +0 -117
  705. package/dist/videos-VABK4KHJ.js +0 -39
  706. package/dist/viewer-check-I45HHWSW.js +0 -80
  707. package/dist/web-DZGUPZYQ.js +0 -140
  708. package/dist/winning-ads-6MDLRSKM.js +0 -84
  709. package/dist/write-commands-3VIK3VC4.js +0 -1024
  710. package/dist/write-commands-HCQI4Y27.js +0 -737
  711. package/dist/write-commands-HCQI4Y27.js.map +0 -1
  712. package/dist/x-GRDU7QC2.js +0 -47
  713. /package/dist/{account-ELL7ZZLM.js.map → account-3H6BZO5H.js.map} +0 -0
  714. /package/dist/{account-YVQGH2GB.js.map → account-KNRDOUJP.js.map} +0 -0
  715. /package/dist/{account-reads-5B4FFOZU.js.map → account-reads-GA6FVKLE.js.map} +0 -0
  716. /package/dist/{account-writes-CEPERFD6.js.map → account-writes-AE5IJGGW.js.map} +0 -0
  717. /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.js.map} +0 -0
  718. /package/dist/{accounts-6WNFCGUW.js.map → accounts-RTN5ZGTU.js.map} +0 -0
  719. /package/dist/{accounts-ZIE7J6RR.js.map → accounts-RW6KXBOQ.js.map} +0 -0
  720. /package/dist/{actions-QZQTB3KR.js.map → actions-HNLISA7T.js.map} +0 -0
  721. /package/dist/{activecampaign-LIXWDX74.js.map → activecampaign-I5CILZPU.js.map} +0 -0
  722. /package/dist/{activities-IQPJPP4B.js.map → activities-T253KK4Q.js.map} +0 -0
  723. /package/dist/{ad-group-writes-XGSCEQTW.js.map → ad-group-writes-VRSBI2Z2.js.map} +0 -0
  724. /package/dist/{ad-groups-GKOLDGET.js.map → ad-groups-IEBVEAMS.js.map} +0 -0
  725. /package/dist/{ad-writes-VVD36JKH.js.map → ad-writes-ALV4KFPZ.js.map} +0 -0
  726. /package/dist/{add-HQFI5UVS.js.map → add-6WKPFMLG.js.map} +0 -0
  727. /package/dist/{add-JWJP4CQY.js.map → add-XF5COUAS.js.map} +0 -0
  728. /package/dist/{ads-EKZVHKPN.js.map → ads-CQZHD7FC.js.map} +0 -0
  729. /package/dist/{ads-F365TPXO.js.map → ads-QIKZ6O2N.js.map} +0 -0
  730. /package/dist/{advertisers-TPIS4R73.js.map → advertisers-6NUM2Q3A.js.map} +0 -0
  731. /package/dist/{analytics-AFW7ESJW.js.map → analytics-ALOZ7ZZ4.js.map} +0 -0
  732. /package/dist/{analytics-QG7TBGMC.js.map → analytics-VLHE5A2M.js.map} +0 -0
  733. /package/dist/{animate-G4P3OEJE.js.map → animate-SVEPM267.js.map} +0 -0
  734. /package/dist/{connect-J722BTO4.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
  735. /package/dist/{assign-VKINQVCJ.js.map → assign-6HI6TNLP.js.map} +0 -0
  736. /package/dist/{audience-size-6ZEWCPX6.js.map → audience-size-25LP2OBF.js.map} +0 -0
  737. /package/dist/{audiences-BU4JZJT7.js.map → audiences-AAZH56WD.js.map} +0 -0
  738. /package/dist/{audit-5US7TTUF.js.map → audit-YY6X2MPA.js.map} +0 -0
  739. /package/dist/{autocomplete-XBVLHJ4R.js.map → autocomplete-SAWJK4NF.js.map} +0 -0
  740. /package/dist/{avatars-5IBVOF63.js.map → avatars-YSFFRHDK.js.map} +0 -0
  741. /package/dist/{bid-pricing-EFYUHTWP.js.map → bid-pricing-HZ74SLEB.js.map} +0 -0
  742. /package/dist/{brand-Z5KRGJX4.js.map → brand-T3OACVQX.js.map} +0 -0
  743. /package/dist/{brief-DGAZ6NJG.js.map → brief-7S6XCJIA.js.map} +0 -0
  744. /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
  745. /package/dist/{campaign-groups-AOMTKPUY.js.map → campaign-groups-YJK767AP.js.map} +0 -0
  746. /package/dist/{campaign-writes-NSEJCINS.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
  747. /package/dist/{campaigns-UELLCVI2.js.map → campaigns-GALDR5KK.js.map} +0 -0
  748. /package/dist/{campaigns-VWN2XPK2.js.map → campaigns-JEIKY2M4.js.map} +0 -0
  749. /package/dist/{campaigns-WE42FQKM.js.map → campaigns-VTRMKSAT.js.map} +0 -0
  750. /package/dist/{canvas-DG3CJ7FA.js.map → canvas-SVJEQO4V.js.map} +0 -0
  751. /package/dist/{capabilities-FDCILMJK.js.map → capabilities-2KT6TCGZ.js.map} +0 -0
  752. /package/dist/{catalog-KZNB2YJS.js.map → catalog-S32MX453.js.map} +0 -0
  753. /package/dist/{catalogs-XH5NHH4C.js.map → catalogs-OCVXZLIF.js.map} +0 -0
  754. /package/dist/{changes-DKP263OZ.js.map → changes-5TOYRKZR.js.map} +0 -0
  755. /package/dist/{chatgpt-K6KNTME4.js.map → chatgpt-QVF2FD3E.js.map} +0 -0
  756. /package/dist/{check-6UVMPPNH.js.map → check-SLNHVYGS.js.map} +0 -0
  757. /package/dist/{chunk-HVI4DNZL.js.map → chunk-2LI6746F.js.map} +0 -0
  758. /package/dist/{chunk-AQMMAB2N.js.map → chunk-2PWNIEW4.js.map} +0 -0
  759. /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
  760. /package/dist/{chunk-ONVPV23E.js.map → chunk-3W6G6ARX.js.map} +0 -0
  761. /package/dist/{chunk-OKLYOMQ3.js.map → chunk-45UK4KYJ.js.map} +0 -0
  762. /package/dist/{chunk-GYJQV3IX.js.map → chunk-46GWHUKN.js.map} +0 -0
  763. /package/dist/{chunk-F5IH7G2F.js.map → chunk-4AMIHNNP.js.map} +0 -0
  764. /package/dist/{chunk-7RKUHTS6.js.map → chunk-4KJMLYCD.js.map} +0 -0
  765. /package/dist/{chunk-Y2GH4YWA.js.map → chunk-5HJRZFMW.js.map} +0 -0
  766. /package/dist/{chunk-36SU43V2.js.map → chunk-66QHX566.js.map} +0 -0
  767. /package/dist/{chunk-EIDTAHUC.js.map → chunk-6NCJGU6I.js.map} +0 -0
  768. /package/dist/{chunk-WRMMJUNJ.js.map → chunk-6WCAV27H.js.map} +0 -0
  769. /package/dist/{chunk-E4GWQFTL.js.map → chunk-AO45BX6Q.js.map} +0 -0
  770. /package/dist/{chunk-M2D7ZWEU.js.map → chunk-BDYLILMW.js.map} +0 -0
  771. /package/dist/{chunk-GGY2KH3K.js.map → chunk-BL2MX6CR.js.map} +0 -0
  772. /package/dist/{chunk-GFTDR3Z2.js.map → chunk-BOPC3D6I.js.map} +0 -0
  773. /package/dist/{chunk-I2WRZJAC.js.map → chunk-BTY4LZBG.js.map} +0 -0
  774. /package/dist/{chunk-P5ENZXC2.js.map → chunk-C7NWUCLQ.js.map} +0 -0
  775. /package/dist/{chunk-6KULDLLR.js.map → chunk-D4CKCNGW.js.map} +0 -0
  776. /package/dist/{chunk-QK76OM22.js.map → chunk-D5CUAOQX.js.map} +0 -0
  777. /package/dist/{chunk-NDVAOHMY.js.map → chunk-D5UXWKLQ.js.map} +0 -0
  778. /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
  779. /package/dist/{chunk-XLJVJ5TK.js.map → chunk-E2RFM6R2.js.map} +0 -0
  780. /package/dist/{chunk-MP5IMGKF.js.map → chunk-EOY6BK4C.js.map} +0 -0
  781. /package/dist/{chunk-IMWXYSCP.js.map → chunk-FA4YZFRV.js.map} +0 -0
  782. /package/dist/{chunk-VYZ4KQ3C.js.map → chunk-FVHJCERJ.js.map} +0 -0
  783. /package/dist/{chunk-3VCHJN2B.js.map → chunk-G2LGMWNG.js.map} +0 -0
  784. /package/dist/{chunk-RESDRJRP.js.map → chunk-G4STCTY3.js.map} +0 -0
  785. /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
  786. /package/dist/{chunk-5QW4OQM4.js.map → chunk-GSZZLW5Q.js.map} +0 -0
  787. /package/dist/{chunk-NA2KOPW6.js.map → chunk-HSPMBLKE.js.map} +0 -0
  788. /package/dist/{chunk-5562QFVB.js.map → chunk-IJ22WP3G.js.map} +0 -0
  789. /package/dist/{chunk-B7FVPHCW.js.map → chunk-IKCP5NCE.js.map} +0 -0
  790. /package/dist/{chunk-ERRMJ7AZ.js.map → chunk-ILSKYRDR.js.map} +0 -0
  791. /package/dist/{chunk-6OIKNJ7G.js.map → chunk-JAC6JVCI.js.map} +0 -0
  792. /package/dist/{chunk-OWRFIAW2.js.map → chunk-JKJQWRLO.js.map} +0 -0
  793. /package/dist/{chunk-TFJW5CXD.js.map → chunk-JQH5VG6F.js.map} +0 -0
  794. /package/dist/{chunk-AJ45PER5.js.map → chunk-JQU2LUZG.js.map} +0 -0
  795. /package/dist/{chunk-YSB26POP.js.map → chunk-JVH5A3XC.js.map} +0 -0
  796. /package/dist/{chunk-RGX7AQ2K.js.map → chunk-JYALBYN7.js.map} +0 -0
  797. /package/dist/{chunk-RWLQYW2L.js.map → chunk-KOXDXSKN.js.map} +0 -0
  798. /package/dist/{chunk-EZ5KY6I2.js.map → chunk-LOMH4TTC.js.map} +0 -0
  799. /package/dist/{chunk-TBZPXGEW.js.map → chunk-LXQB4ZGE.js.map} +0 -0
  800. /package/dist/{chunk-6TG4CAYD.js.map → chunk-M6PN3VH6.js.map} +0 -0
  801. /package/dist/{chunk-AL3VGEG5.js.map → chunk-M7IJU77B.js.map} +0 -0
  802. /package/dist/{chunk-C4MJ3WPQ.js.map → chunk-MVB32GPI.js.map} +0 -0
  803. /package/dist/{chunk-C6BFE4X2.js.map → chunk-MXH35PJ5.js.map} +0 -0
  804. /package/dist/{chunk-SIKCVWM3.js.map → chunk-MZPS46OR.js.map} +0 -0
  805. /package/dist/{chunk-IHUIXQBP.js.map → chunk-NEIUVSDK.js.map} +0 -0
  806. /package/dist/{chunk-2GT76KEX.js.map → chunk-NEOUY3Q7.js.map} +0 -0
  807. /package/dist/{chunk-RBIWYPJQ.js.map → chunk-NXZCCGES.js.map} +0 -0
  808. /package/dist/{chunk-YT2ZSPWF.js.map → chunk-P3W6SRSQ.js.map} +0 -0
  809. /package/dist/{chunk-NLUFREI6.js.map → chunk-P5FRWPG7.js.map} +0 -0
  810. /package/dist/{chunk-D2YHDDKW.js.map → chunk-PA4W7BCQ.js.map} +0 -0
  811. /package/dist/{chunk-B6VCTXSD.js.map → chunk-PQJXIY64.js.map} +0 -0
  812. /package/dist/{chunk-TPS3X5DI.js.map → chunk-PTGYM4J6.js.map} +0 -0
  813. /package/dist/{chunk-33XFNSBM.js.map → chunk-QNLJ3GNZ.js.map} +0 -0
  814. /package/dist/{chunk-UWDYGSJF.js.map → chunk-SISA4HQR.js.map} +0 -0
  815. /package/dist/{chunk-V57TZQPI.js.map → chunk-SVM3DGAQ.js.map} +0 -0
  816. /package/dist/{chunk-6VZHOXP6.js.map → chunk-TP7HKSBX.js.map} +0 -0
  817. /package/dist/{chunk-VLKYUZF7.js.map → chunk-TRPJJMCS.js.map} +0 -0
  818. /package/dist/{chunk-R5IZ6P3E.js.map → chunk-UNX6BS4U.js.map} +0 -0
  819. /package/dist/{chunk-AGVCQHQK.js.map → chunk-VD73V44J.js.map} +0 -0
  820. /package/dist/{chunk-UM7ESCIN.js.map → chunk-VL65H6YM.js.map} +0 -0
  821. /package/dist/{chunk-HY4G44UC.js.map → chunk-X7F4Z6UM.js.map} +0 -0
  822. /package/dist/{chunk-S7B2TOOU.js.map → chunk-ZCQVKDHV.js.map} +0 -0
  823. /package/dist/{chunk-WY5H3XYC.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
  824. /package/dist/{claim-7CB6TVEW.js.map → claim-SLGYOOWD.js.map} +0 -0
  825. /package/dist/{companies-CACKHSY5.js.map → companies-IVMH6YII.js.map} +0 -0
  826. /package/dist/{complete-IHLTYFT2.js.map → complete-45L2FI2X.js.map} +0 -0
  827. /package/dist/{customers-EZEVYT4Z.js.map → connect-S54TJ6OV.js.map} +0 -0
  828. /package/dist/{conversation-HRNJJJW5.js.map → conversation-RIOL3OJ7.js.map} +0 -0
  829. /package/dist/{conversion-report-KL4LIVY5.js.map → conversion-report-REOHVLCI.js.map} +0 -0
  830. /package/dist/{conversion-upload-command-WT6C35QL.js.map → conversion-upload-command-W4GELHIQ.js.map} +0 -0
  831. /package/dist/{conversion-writes-MPBCTVSP.js.map → conversion-writes-ECZBVY7D.js.map} +0 -0
  832. /package/dist/{conversions-ACYT6K7H.js.map → conversions-5QCSCRLI.js.map} +0 -0
  833. /package/dist/{conversions-DE7W5T4Z.js.map → conversions-TKIXNSYR.js.map} +0 -0
  834. /package/dist/{create-W7OTXLCZ.js.map → create-7JY2PTIZ.js.map} +0 -0
  835. /package/dist/{create-6ZDLKC4F.js.map → create-ACLCRXQP.js.map} +0 -0
  836. /package/dist/{create-7YO6DAAT.js.map → create-KYBMFD32.js.map} +0 -0
  837. /package/dist/{create-ZU7AHBYM.js.map → create-VAPJ52GJ.js.map} +0 -0
  838. /package/dist/{creatives-XUIY3MQI.js.map → creatives-5I3G5YP3.js.map} +0 -0
  839. /package/dist/{creatives-6UYAAC5E.js.map → creatives-PCAGWPW3.js.map} +0 -0
  840. /package/dist/{credentials-ADGJKYA7.js.map → credentials-YTQ6BHWV.js.map} +0 -0
  841. /package/dist/{critique-T7QGPPEX.js.map → critique-BHYJYZDV.js.map} +0 -0
  842. /package/dist/{critique-BBHPASRE.js.map → critique-NRHUPIWF.js.map} +0 -0
  843. /package/dist/{crm-MXT2HUKU.js.map → crm-IKTWHWEB.js.map} +0 -0
  844. /package/dist/{crm-EKDV2SET.js.map → crm-N7K57LZJ.js.map} +0 -0
  845. /package/dist/{currency-TBBXPWXU.js.map → currency-PW7HIBZ6.js.map} +0 -0
  846. /package/dist/{fit-KEFUU7QA.js.map → customers-NLU7NYDC.js.map} +0 -0
  847. /package/dist/{delete-SRU4GRDT.js.map → delete-26J3X3ZH.js.map} +0 -0
  848. /package/dist/{delete-3UDIH2ZD.js.map → delete-A4F5Z54J.js.map} +0 -0
  849. /package/dist/{delete-4L3HO5B6.js.map → delete-EVXOFT2H.js.map} +0 -0
  850. /package/dist/{demographics-3OWQDW7B.js.map → demographics-VZKFMM4X.js.map} +0 -0
  851. /package/dist/{discard-UEMA5UHL.js.map → discard-ULRVUJDV.js.map} +0 -0
  852. /package/dist/{discover-RTV5XWRI.js.map → discover-PVXWX2WL.js.map} +0 -0
  853. /package/dist/{domain-6324IS6I.js.map → domain-L4WCCX7R.js.map} +0 -0
  854. /package/dist/{draft-VXGZDBC7.js.map → draft-34CGWUVA.js.map} +0 -0
  855. /package/dist/{draft-GRL7577L.js.map → draft-57OQKHZI.js.map} +0 -0
  856. /package/dist/{draft-777O2UIX.js.map → draft-O4S5RKWK.js.map} +0 -0
  857. /package/dist/{draft-2KS56KCT.js.map → draft-PAYD6GIM.js.map} +0 -0
  858. /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
  859. /package/dist/{facets-YV6NORA6.js.map → facets-EHQKGGJ2.js.map} +0 -0
  860. /package/dist/{feedback-YITFVOHX.js.map → feedback-O3H42V4I.js.map} +0 -0
  861. /package/dist/{feedback-record-FW2QWFYQ.js.map → feedback-record-FAPN2GBS.js.map} +0 -0
  862. /package/dist/{fetch-EYXLTSKW.js.map → fetch-ETKT2RBC.js.map} +0 -0
  863. /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
  864. /package/dist/{fonts-DMIBVZ6D.js.map → fit-UJQ47C4A.js.map} +0 -0
  865. /package/dist/{flows-EJV7WMGD.js.map → flows-T22B77J3.js.map} +0 -0
  866. /package/dist/{ideas-W4IIVOZ4.js.map → fonts-7VWBQPJF.js.map} +0 -0
  867. /package/dist/{forecast-G43FKEZE.js.map → forecast-HB3RDBQN.js.map} +0 -0
  868. /package/dist/{forecast-5YKQZSE7.js.map → forecast-OI7YWZ6F.js.map} +0 -0
  869. /package/dist/{funnel-ND7OXIKT.js.map → funnel-7OA33VRP.js.map} +0 -0
  870. /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
  871. /package/dist/{generate-D3LUXFJT.js.map → generate-OMXBFGGR.js.map} +0 -0
  872. /package/dist/{get-PU3YHQWN.js.map → get-2RSN4N3J.js.map} +0 -0
  873. /package/dist/{get-GB6SPWCA.js.map → get-6N7QJMIP.js.map} +0 -0
  874. /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
  875. /package/dist/{google-MHB5TOFN.js.map → google-6JZBJ2ZQ.js.map} +0 -0
  876. /package/dist/{google-ads-XGEGKEL6.js.map → google-ads-G7REKD4A.js.map} +0 -0
  877. /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
  878. /package/dist/{history-OQAOTEO3.js.map → history-QKDYBSYM.js.map} +0 -0
  879. /package/dist/{history-NYWAMWAY.js.map → history-YMK2JNZU.js.map} +0 -0
  880. /package/dist/{hubspot-LMIVY7FR.js.map → hubspot-BUFS7S33.js.map} +0 -0
  881. /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
  882. /package/dist/{ingest-FRDTTPYD.js.map → ideas-JQT422P7.js.map} +0 -0
  883. /package/dist/{images-PPMIMPTS.js.map → images-WBNWK2ZH.js.map} +0 -0
  884. /package/dist/{ingest-2YGWBWAB.js.map → ingest-RQUJGS7K.js.map} +0 -0
  885. /package/dist/{logo-YSNUUT33.js.map → ingest-XLTRLCDV.js.map} +0 -0
  886. /package/dist/{insights-PZXFCMX2.js.map → insights-SQLE5NOJ.js.map} +0 -0
  887. /package/dist/{inspect-QF2S3U2E.js.map → inspect-KFVAMD4N.js.map} +0 -0
  888. /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
  889. /package/dist/{intent-JJTDJ732.js.map → intent-4KJGYYHL.js.map} +0 -0
  890. /package/dist/{keyword-gap-4NQN56JP.js.map → keyword-gap-U64KXDR4.js.map} +0 -0
  891. /package/dist/{keyword-metrics-QCIOBMTW.js.map → keyword-metrics-WYF3QMCW.js.map} +0 -0
  892. /package/dist/{keywords-for-site-FS635JXM.js.map → keywords-for-site-G5L5EP3T.js.map} +0 -0
  893. /package/dist/{landing-6H5QEHOW.js.map → landing-Y6QCTXCZ.js.map} +0 -0
  894. /package/dist/{languages-FNE45NXJ.js.map → languages-7IPVGGW5.js.map} +0 -0
  895. /package/dist/{leads-MKLSWZO6.js.map → leads-4SJ4NJOI.js.map} +0 -0
  896. /package/dist/{learn-C564OA7W.js.map → learn-3BDZUWDT.js.map} +0 -0
  897. /package/dist/{line-item-writes-K7QNWRQ3.js.map → line-item-writes-YXKYR25W.js.map} +0 -0
  898. /package/dist/{line-items-TBTHVKCZ.js.map → line-items-CKUD2UU4.js.map} +0 -0
  899. /package/dist/{link-CPJJ6T4M.js.map → link-VBYFI7AM.js.map} +0 -0
  900. /package/dist/{linkedin-HGUK624E.js.map → linkedin-UGMAFSGO.js.map} +0 -0
  901. /package/dist/{list-OKDU5W4D.js.map → list-6ZNZGRRK.js.map} +0 -0
  902. /package/dist/{list-N5SJXLYF.js.map → list-ENYDGT3F.js.map} +0 -0
  903. /package/dist/{list-AAT5CWDA.js.map → list-VSUF2IWT.js.map} +0 -0
  904. /package/dist/{locations-FTDI4FBI.js.map → locations-QJBYWRCN.js.map} +0 -0
  905. /package/dist/{log-KVRWIJS5.js.map → log-AACKGBDW.js.map} +0 -0
  906. /package/dist/{performance-YJVMM6DL.js.map → logo-VHXH4J6A.js.map} +0 -0
  907. /package/dist/{make-4NTHJ4TG.js.map → make-W2PYZXYF.js.map} +0 -0
  908. /package/dist/{map-HQ43MKEC.js.map → map-63CQHWPI.js.map} +0 -0
  909. /package/dist/{mcp-MFLUHPL5.js.map → mcp-RKAXC6IP.js.map} +0 -0
  910. /package/dist/{media-sources-A4ICRSKB.js.map → media-sources-EZKAJNVD.js.map} +0 -0
  911. /package/dist/{members-NRKQSSVS.js.map → members-SELIA674.js.map} +0 -0
  912. /package/dist/{metrics-3BRTJNGW.js.map → metrics-V6SKOVNH.js.map} +0 -0
  913. /package/dist/{models-IH6KE6OH.js.map → models-2XRYXSRA.js.map} +0 -0
  914. /package/dist/{normalize-EH6BTBOB.js.map → normalize-VAZPTBDX.js.map} +0 -0
  915. /package/dist/{options-YEPQXXRY.js.map → options-NSCZSQ5P.js.map} +0 -0
  916. /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.js.map} +0 -0
  917. /package/dist/{query-3OMCFGLU.js.map → performance-K7E5KAZW.js.map} +0 -0
  918. /package/dist/{pixels-DWW2TDY2.js.map → pixels-MYT3TCHZ.js.map} +0 -0
  919. /package/dist/{pixels-MBKR4XPX.js.map → pixels-ZZCQUS3J.js.map} +0 -0
  920. /package/dist/{promoted-tweet-writes-M5OVEBC5.js.map → promoted-tweet-writes-PKEO6WUK.js.map} +0 -0
  921. /package/dist/{promoted-tweets-2MOIERNB.js.map → promoted-tweets-7MXVZRBI.js.map} +0 -0
  922. /package/dist/{publish-NPENZIHV.js.map → publish-MPMGRV72.js.map} +0 -0
  923. /package/dist/{reddit-LI37G5LS.js.map → query-UD4OIZ3A.js.map} +0 -0
  924. /package/dist/{run-AFMTXJTU.js.map → reddit-XIHRI3CN.js.map} +0 -0
  925. /package/dist/{refresh-4BBV5SPL.js.map → refresh-A27N75NH.js.map} +0 -0
  926. /package/dist/{release-4X3TLMQT.js.map → release-UKRB5IUN.js.map} +0 -0
  927. /package/dist/{relevant-pages-DIYZM6FJ.js.map → relevant-pages-VXSHEOU2.js.map} +0 -0
  928. /package/dist/{remove-Q4AES5UH.js.map → remove-AFNFVPZY.js.map} +0 -0
  929. /package/dist/{reopen-SDTPL3BN.js.map → reopen-M5HE6J3G.js.map} +0 -0
  930. /package/dist/{rerun-NA3MH4HG.js.map → rerun-5THJLQQJ.js.map} +0 -0
  931. /package/dist/{research-LXQRNAQ2.js.map → research-JHDWWFL7.js.map} +0 -0
  932. /package/dist/{research-5H265UV7.js.map → research-U7RQXMYH.js.map} +0 -0
  933. /package/dist/{reset-52PU3CVD.js.map → reset-4CCWB2RT.js.map} +0 -0
  934. /package/dist/{reset-42M5IKDI.js.map → reset-J3KCWFMZ.js.map} +0 -0
  935. /package/dist/{resolve-R4IACKIZ.js.map → resolve-HEK27ANI.js.map} +0 -0
  936. /package/dist/{retry-FPF42ZNG.js.map → retry-HPZIUG2S.js.map} +0 -0
  937. /package/dist/{retry-RTQGAH6G.js.map → retry-VVI6N6UR.js.map} +0 -0
  938. /package/dist/{rules-CGNYJYVC.js.map → rules-YLLFDZEM.js.map} +0 -0
  939. /package/dist/{rules-add-EO5476BF.js.map → rules-add-U2GU4AGP.js.map} +0 -0
  940. /package/dist/{run-3AZJ3UQU.js.map → run-M7ZDE6IA.js.map} +0 -0
  941. /package/dist/{shared-NDRFKAH7.js.map → run-V5YQB6TH.js.map} +0 -0
  942. /package/dist/{scaffold-ad-OGU2IINY.js.map → scaffold-ad-H4GJOKAW.js.map} +0 -0
  943. /package/dist/{scaffold-static-ad-HO4BJW4H.js.map → scaffold-static-ad-2YIFHCTL.js.map} +0 -0
  944. /package/dist/{scaffold-video-TLQ4WSDK.js.map → scaffold-video-3EJLKR2O.js.map} +0 -0
  945. /package/dist/{schedule-AWWMI5FO.js.map → schedule-QMOKWTJ3.js.map} +0 -0
  946. /package/dist/{scheduled-agents-ELLU7BSE.js.map → scheduled-agents-FCQHQ6KR.js.map} +0 -0
  947. /package/dist/{schema-QNVLKMKG.js.map → schema-THFLCMBN.js.map} +0 -0
  948. /package/dist/{schema-BOOZEJPA.js.map → schema-XKEEAUXP.js.map} +0 -0
  949. /package/dist/{search-BZNIB2XF.js.map → search-XIUYSWO6.js.map} +0 -0
  950. /package/dist/{select-NLWZIQ7L.js.map → select-I22NPSIW.js.map} +0 -0
  951. /package/dist/{set-prompt-QKW2L553.js.map → set-prompt-S75OMQ7L.js.map} +0 -0
  952. /package/dist/{setup-links-NMSQ4BG7.js.map → setup-links-QVI6NAOK.js.map} +0 -0
  953. /package/dist/{sync-definition-LSGDHMHV.js.map → shared-3IBNDEFL.js.map} +0 -0
  954. /package/dist/{site-GGYFBZT5.js.map → site-PZPJY33N.js.map} +0 -0
  955. /package/dist/{sources-LPQZDTIU.js.map → sources-ER7ANNG3.js.map} +0 -0
  956. /package/dist/{sources-KTGDMUV4.js.map → sources-VA23PDND.js.map} +0 -0
  957. /package/dist/{stale-C5JLQ4D2.js.map → stale-MHTU2NQJ.js.map} +0 -0
  958. /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.js.map} +0 -0
  959. /package/dist/{status-6PS3HDS5.js.map → status-ABMJBCPJ.js.map} +0 -0
  960. /package/dist/{stock-ECRBD7RP.js.map → stock-6SHHLSKG.js.map} +0 -0
  961. /package/dist/{studio-LMDDQWRY.js.map → studio-ZLCGXFAN.js.map} +0 -0
  962. /package/dist/{sync-XSATDLE6.js.map → sync-QDD3MRJ6.js.map} +0 -0
  963. /package/dist/{viewer-check-I45HHWSW.js.map → sync-definition-2EBSQA6A.js.map} +0 -0
  964. /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
  965. /package/dist/{tags-OK34UGSM.js.map → tags-5JYOEYIT.js.map} +0 -0
  966. /package/dist/{tags-EXWKO6Q6.js.map → tags-B473RWAA.js.map} +0 -0
  967. /package/dist/{tags-5Y7TPJNZ.js.map → tags-EWHPUM2V.js.map} +0 -0
  968. /package/dist/{tags-6TT5ZJVX.js.map → tags-KBCX6BDU.js.map} +0 -0
  969. /package/dist/{tags-BQLIOWS4.js.map → tags-PEWN6GNZ.js.map} +0 -0
  970. /package/dist/{targeting-criteria-AWPMOX4V.js.map → targeting-criteria-EU65WUUF.js.map} +0 -0
  971. /package/dist/{targets-EXYCOHEX.js.map → targets-KVXS5QKM.js.map} +0 -0
  972. /package/dist/{testimonials-BTYMR3U4.js.map → testimonials-GR6TIS5S.js.map} +0 -0
  973. /package/dist/{themes-AOU4ZZXL.js.map → themes-JWWTOR3I.js.map} +0 -0
  974. /package/dist/{top-companies-FRPAURAH.js.map → top-companies-OOX3DITI.js.map} +0 -0
  975. /package/dist/{translate-SF234KLG.js.map → translate-GEFUP6KQ.js.map} +0 -0
  976. /package/dist/{triggers-SJUXDU3X.js.map → triggers-OX2GKG4Y.js.map} +0 -0
  977. /package/dist/{unlink-RIZD3XTI.js.map → unlink-3USEPJSA.js.map} +0 -0
  978. /package/dist/{unstage-MKTIVI3I.js.map → unstage-VSCNPTAC.js.map} +0 -0
  979. /package/dist/{update-COHXM25C.js.map → update-6JKTH65B.js.map} +0 -0
  980. /package/dist/{update-OXVZXDYH.js.map → update-FG4ELXYJ.js.map} +0 -0
  981. /package/dist/{update-SZLYEEU4.js.map → update-GZFKHA3A.js.map} +0 -0
  982. /package/dist/{update-NKX2GXAR.js.map → update-HZHG67N6.js.map} +0 -0
  983. /package/dist/{upload-LEDO3IRC.js.map → upload-BKCQ6FRW.js.map} +0 -0
  984. /package/dist/{url-options-Q5SL42CV.js.map → url-options-HCVRPZYU.js.map} +0 -0
  985. /package/dist/{url-params-KP6D7BF3.js.map → url-params-UN4DRN2H.js.map} +0 -0
  986. /package/dist/{validate-7QWQZ2OL.js.map → validate-NOWIOAHE.js.map} +0 -0
  987. /package/dist/{videos-VABK4KHJ.js.map → videos-XMTDEHEJ.js.map} +0 -0
  988. /package/dist/{web-DZGUPZYQ.js.map → web-UGU7YMII.js.map} +0 -0
  989. /package/dist/{winning-ads-6MDLRSKM.js.map → winning-ads-QOAYIR5U.js.map} +0 -0
  990. /package/dist/{write-commands-3VIK3VC4.js.map → write-commands-6VR2UD3T.js.map} +0 -0
  991. /package/dist/{x-GRDU7QC2.js.map → x-VCSMV7T5.js.map} +0 -0
@@ -0,0 +1,391 @@
1
+ import {
2
+ CUSTOMER_LIST_BATCH_ROWS,
3
+ CUSTOMER_LIST_KEYS,
4
+ IDENTIFYING_CUSTOMER_LIST_KEYS,
5
+ UNHASHED_CUSTOMER_LIST_KEYS,
6
+ customAudienceMembersSchema,
7
+ customerListBatchSchema
8
+ } from "./chunk-A4MVVPJ2.js";
9
+
10
+ // src/commands/ads/meta/customer-list.ts
11
+ import { createHash } from "crypto";
12
+ import { parse } from "csv-parse/sync";
13
+ import { isSupportedCountry, parsePhoneNumberFromString } from "libphonenumber-js";
14
+ var DATE_ORDERS = ["DMY", "MDY"];
15
+ function sha256(value) {
16
+ return createHash("sha256").update(value, "utf8").digest("hex");
17
+ }
18
+ function headerWords(cell) {
19
+ return cell.normalize("NFD").replace(new RegExp("\\p{Diacritic}", "gu"), "").toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
20
+ }
21
+ var HEADER_PATTERNS = [
22
+ [/^(e ?mail|email address|correo|correo electronico|mail)$/, "EMAIL"],
23
+ [/^(phone|phone number|mobile|mobile phone|telefono|movil|tel|celular|cell)$/, "PHONE"],
24
+ [/^(first name|firstname|fname|fn|given name|nombre)$/, "FN"],
25
+ [/^(last name|lastname|lname|ln|surname|family name|apellido|apellidos)$/, "LN"],
26
+ [/^(first initial|fi)$/, "FI"],
27
+ [/^(city|town|ct|ciudad|localidad)$/, "CT"],
28
+ [/^(state|province|region|st|provincia|estado)$/, "ST"],
29
+ [/^(zip|zip code|zipcode|postcode|post code|postal code|cp|codigo postal)$/, "ZIP"],
30
+ [/^(country|country code|pais)$/, "COUNTRY"],
31
+ [/^(dob|birthday|birth date|birthdate|date of birth|fecha de nacimiento|fecha nacimiento)$/, "DOB"],
32
+ [/^(doby|birth year|year of birth)$/, "DOBY"],
33
+ [/^(dobm|birth month)$/, "DOBM"],
34
+ [/^(dobd|birth day)$/, "DOBD"],
35
+ [/^(gen|gender|sex|genero|sexo)$/, "GEN"],
36
+ [/^(madid|idfa|aaid|gaid|advertising id|mobile advertiser id)$/, "MADID"],
37
+ [/^(extern id|external id|customer id|client id|crm id)$/, "EXTERN_ID"],
38
+ [/^(lookalike value|value)$/, "LOOKALIKE_VALUE"]
39
+ ];
40
+ function headerKey(cell) {
41
+ const words = headerWords(cell);
42
+ const upper = cell.trim().toUpperCase();
43
+ if (CUSTOMER_LIST_KEYS.includes(upper)) {
44
+ return upper;
45
+ }
46
+ return HEADER_PATTERNS.find(([pattern]) => pattern.test(words))?.[1];
47
+ }
48
+ function lettersOnly(value) {
49
+ return value.normalize("NFC").toLowerCase().replace(/[^\p{L}]/gu, "");
50
+ }
51
+ function email(value) {
52
+ const normalized = value.trim().toLowerCase();
53
+ return /^[^@\s;,|]+@[^@\s;,|]+\.[^@\s;,|]+$/.test(normalized) ? normalized : void 0;
54
+ }
55
+ function country(value) {
56
+ const code = value.trim().toUpperCase();
57
+ return /^[A-Z]{2}$/.test(code) && isSupportedCountry(code) ? code : void 0;
58
+ }
59
+ function phone(value, rowCountry) {
60
+ const region = rowCountry ? rowCountry : void 0;
61
+ const parsed = parsePhoneNumberFromString(value.trim(), region);
62
+ return parsed?.isValid() ? parsed.number.replace(/^\+/, "") : void 0;
63
+ }
64
+ function zip(value, rowCountry) {
65
+ const compact = value.toLowerCase().replace(/\s+/g, "");
66
+ if (compact === "") return void 0;
67
+ const us = rowCountry === "US" || /^\d{5}-\d{4}$/.test(compact);
68
+ return us ? /^\d{5}/.exec(compact)?.[0] ?? void 0 : compact;
69
+ }
70
+ function gender(value) {
71
+ const first = value.trim().toLowerCase();
72
+ if (/^(m|male|man|hombre|masculino|h)$/.test(first)) return "m";
73
+ if (/^(f|female|woman|mujer|femenino)$/.test(first)) return "f";
74
+ return void 0;
75
+ }
76
+ var US_STATE_CODES = {
77
+ alabama: "al",
78
+ alaska: "ak",
79
+ arizona: "az",
80
+ arkansas: "ar",
81
+ california: "ca",
82
+ colorado: "co",
83
+ connecticut: "ct",
84
+ delaware: "de",
85
+ districtofcolumbia: "dc",
86
+ washingtondc: "dc",
87
+ florida: "fl",
88
+ georgia: "ga",
89
+ hawaii: "hi",
90
+ idaho: "id",
91
+ illinois: "il",
92
+ indiana: "in",
93
+ iowa: "ia",
94
+ kansas: "ks",
95
+ kentucky: "ky",
96
+ louisiana: "la",
97
+ maine: "me",
98
+ maryland: "md",
99
+ massachusetts: "ma",
100
+ michigan: "mi",
101
+ minnesota: "mn",
102
+ mississippi: "ms",
103
+ missouri: "mo",
104
+ montana: "mt",
105
+ nebraska: "ne",
106
+ nevada: "nv",
107
+ newhampshire: "nh",
108
+ newjersey: "nj",
109
+ newmexico: "nm",
110
+ newyork: "ny",
111
+ northcarolina: "nc",
112
+ northdakota: "nd",
113
+ ohio: "oh",
114
+ oklahoma: "ok",
115
+ oregon: "or",
116
+ pennsylvania: "pa",
117
+ rhodeisland: "ri",
118
+ southcarolina: "sc",
119
+ southdakota: "sd",
120
+ tennessee: "tn",
121
+ texas: "tx",
122
+ utah: "ut",
123
+ vermont: "vt",
124
+ virginia: "va",
125
+ washington: "wa",
126
+ westvirginia: "wv",
127
+ wisconsin: "wi",
128
+ wyoming: "wy",
129
+ puertorico: "pr",
130
+ guam: "gu",
131
+ americansamoa: "as",
132
+ virginislands: "vi",
133
+ usvirginislands: "vi",
134
+ northernmarianaislands: "mp"
135
+ };
136
+ var US_STATE_ABBREVIATIONS = new Set(Object.values(US_STATE_CODES));
137
+ function state(value, rowCountry) {
138
+ const letters = lettersOnly(value);
139
+ if (letters === "") return void 0;
140
+ if (rowCountry === "US") {
141
+ return US_STATE_CODES[letters] ?? (US_STATE_ABBREVIATIONS.has(letters) ? letters : void 0);
142
+ }
143
+ return (rowCountry === void 0 ? US_STATE_CODES[letters] : void 0) ?? letters;
144
+ }
145
+ function datePart(value, length, max) {
146
+ const digits = value.trim();
147
+ if (!/^\d{1,4}$/.test(digits)) return void 0;
148
+ const n = Number(digits);
149
+ if (length === 4) return digits.length === 4 && n >= 1900 && n <= max ? digits : void 0;
150
+ return n >= 1 && n <= max ? String(n).padStart(2, "0") : void 0;
151
+ }
152
+ var SLASHED_DATE = /^(\d{1,2})[/.-](\d{1,2})[/.-](\d{4})$/;
153
+ function dateOrderOf(values, explicit) {
154
+ if (explicit) return explicit;
155
+ let dayFirst = false;
156
+ let monthFirst = false;
157
+ let ambiguous = false;
158
+ for (const value of values) {
159
+ const match = SLASHED_DATE.exec(value.trim());
160
+ if (!match) continue;
161
+ const [first, second] = [Number(match[1]), Number(match[2])];
162
+ dayFirst ||= first > 12;
163
+ monthFirst ||= second > 12;
164
+ ambiguous ||= first <= 12 && second <= 12 && first !== second;
165
+ }
166
+ if (dayFirst && monthFirst) {
167
+ throw new Error(
168
+ "this file writes birthdays both day-first and month-first \u2014 make them one order, or pass --date-format DMY|MDY for the order most use"
169
+ );
170
+ }
171
+ if (dayFirst) return "DMY";
172
+ if (monthFirst) return "MDY";
173
+ if (ambiguous) {
174
+ throw new Error(
175
+ "this file's birthdays (like 03/07/1990) can be read day-first or month-first \u2014 pass --date-format DMY (day/month/year) or MDY (month/day/year)"
176
+ );
177
+ }
178
+ return void 0;
179
+ }
180
+ function dateOfBirth(value, order) {
181
+ const text = value.trim();
182
+ const iso = /^(\d{4})-(\d{1,2})-(\d{1,2})/.exec(text);
183
+ const slashed = SLASHED_DATE.exec(text);
184
+ const parts = iso ? [iso[1], iso[2], iso[3]] : slashed ? order === "MDY" ? [slashed[3], slashed[1], slashed[2]] : [slashed[3], slashed[2], slashed[1]] : void 0;
185
+ if (!parts) return void 0;
186
+ const year = datePart(parts[0] ?? "", 4, (/* @__PURE__ */ new Date()).getUTCFullYear());
187
+ const month = datePart(parts[1] ?? "", 2, 12);
188
+ const day = datePart(parts[2] ?? "", 2, 31);
189
+ return year && month && day ? [year, month, day] : void 0;
190
+ }
191
+ function decimalMarkShown(value) {
192
+ const cleaned = value.replace(/[^\d.,]/g, "");
193
+ const lastDot = cleaned.lastIndexOf(".");
194
+ const lastComma = cleaned.lastIndexOf(",");
195
+ if (lastDot >= 0 && lastComma >= 0) return lastDot > lastComma ? "." : ",";
196
+ const mark = lastDot >= 0 ? "." : lastComma >= 0 ? "," : void 0;
197
+ if (mark === void 0) return void 0;
198
+ if (cleaned.split(mark).length > 2) return mark === "." ? "," : ".";
199
+ return /^\d{3}$/.test(cleaned.slice(cleaned.indexOf(mark) + 1)) ? void 0 : mark;
200
+ }
201
+ function decimalMarkOf(values) {
202
+ for (const value of values) {
203
+ const mark = decimalMarkShown(value);
204
+ if (mark) return mark;
205
+ }
206
+ return void 0;
207
+ }
208
+ function numericValue(value, fileMark) {
209
+ const cleaned = value.replace(/[^\d.,-]/g, "");
210
+ const mark = decimalMarkShown(cleaned) ?? fileMark;
211
+ if (mark === void 0 && /[.,]/.test(cleaned)) return void 0;
212
+ const thousands = mark === "," ? "." : ",";
213
+ const plain = cleaned.split(thousands).join("").replace(",", ".");
214
+ const n = Number(plain);
215
+ return plain !== "" && Number.isFinite(n) && n >= 0 ? String(n) : void 0;
216
+ }
217
+ function normalizedCell(key, value, rowCountry, conventions) {
218
+ switch (key) {
219
+ case "EMAIL":
220
+ return email(value);
221
+ case "PHONE":
222
+ return phone(value, rowCountry);
223
+ case "FN":
224
+ case "LN":
225
+ case "CT":
226
+ return lettersOnly(value) || void 0;
227
+ case "FI":
228
+ return lettersOnly(value).slice(0, 1) || void 0;
229
+ case "ST":
230
+ return state(value, rowCountry);
231
+ case "ZIP":
232
+ return zip(value, rowCountry);
233
+ case "COUNTRY":
234
+ return country(value)?.toLowerCase();
235
+ case "DOBY":
236
+ return datePart(value, 4, (/* @__PURE__ */ new Date()).getUTCFullYear());
237
+ case "DOBM":
238
+ return datePart(value, 2, 12);
239
+ case "DOBD":
240
+ return datePart(value, 2, 31);
241
+ case "GEN":
242
+ return gender(value);
243
+ case "MADID":
244
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(value.trim().toLowerCase()) ? value.trim().toLowerCase() : void 0;
245
+ case "EXTERN_ID":
246
+ return value.trim() || void 0;
247
+ case "LOOKALIKE_VALUE":
248
+ return numericValue(value, conventions.decimalMark);
249
+ default:
250
+ return void 0;
251
+ }
252
+ }
253
+ function planColumns(firstRow, options) {
254
+ if (options.columns) {
255
+ const plan2 = options.columns.map((name, source) => {
256
+ const key = headerKey(name);
257
+ if (!key)
258
+ throw new Error(`--columns: "${name}" is not a column Meta matches on (${CUSTOMER_LIST_KEYS.join(", ")})`);
259
+ return { source, key };
260
+ });
261
+ return { plan: plan2, ignored: [], hasHeader: false };
262
+ }
263
+ const valueHeader = options.valueColumn ? headerWords(options.valueColumn) : void 0;
264
+ const plan = [];
265
+ const ignored = [];
266
+ firstRow.forEach((cell, source) => {
267
+ const named = valueHeader !== void 0 && headerWords(cell) === valueHeader;
268
+ const key = named ? "LOOKALIKE_VALUE" : headerKey(cell);
269
+ if (key && (key !== "LOOKALIKE_VALUE" || named) && !plan.some((entry) => entry.key === key)) {
270
+ plan.push({ source, key });
271
+ } else if (cell.trim() !== "") {
272
+ ignored.push(cell.trim());
273
+ }
274
+ });
275
+ if (valueHeader && !plan.some((entry) => entry.key === "LOOKALIKE_VALUE")) {
276
+ throw new Error(`--value-column "${options.valueColumn}" is not a column of this file`);
277
+ }
278
+ return { plan, ignored, hasHeader: true };
279
+ }
280
+ function schemaOf(plan) {
281
+ return plan.flatMap((entry) => entry.key === "DOB" ? ["DOBY", "DOBM", "DOBD"] : [entry.key]);
282
+ }
283
+ function hashed(key, normalized) {
284
+ return UNHASHED_CUSTOMER_LIST_KEYS.has(key) ? normalized : sha256(normalized);
285
+ }
286
+ function rowCountryOf(row, plan, defaultCountry) {
287
+ const column = plan.find((entry) => entry.key === "COUNTRY");
288
+ return (column ? country(row[column.source] ?? "") : void 0) ?? defaultCountry;
289
+ }
290
+ function countUnreadable(unreadable, key) {
291
+ unreadable[key] = (unreadable[key] ?? 0) + 1;
292
+ }
293
+ function columnCells(entry, raw, rowCountry, unreadable, conventions) {
294
+ const blank = raw.trim() === "";
295
+ if (entry.key === "DOB") {
296
+ const parts = blank ? void 0 : dateOfBirth(raw, conventions.dateOrder);
297
+ if (!blank && !parts) countUnreadable(unreadable, "DOBY");
298
+ return [
299
+ ["DOBY", parts?.[0] ?? ""],
300
+ ["DOBM", parts?.[1] ?? ""],
301
+ ["DOBD", parts?.[2] ?? ""]
302
+ ];
303
+ }
304
+ if (blank) return [[entry.key, ""]];
305
+ const normalized = normalizedCell(entry.key, raw, rowCountry, conventions);
306
+ if (normalized === void 0) countUnreadable(unreadable, entry.key);
307
+ return [[entry.key, normalized ?? ""]];
308
+ }
309
+ function delimiterOf(content) {
310
+ const firstLine = content.replace(/^\uFEFF/, "").split(/\r?\n/).find((line) => line.trim() !== "") ?? "";
311
+ const unquoted = firstLine.replace(/"[^"]*"/g, "");
312
+ const count = (mark) => unquoted.split(mark).length - 1;
313
+ const most = Math.max(count(" "), count(";"), count(","));
314
+ return most === 0 ? "," : [" ", ";", ","].find((mark) => count(mark) === most) ?? ",";
315
+ }
316
+ function customerListFromFile(content, options) {
317
+ const delimiter = delimiterOf(content);
318
+ const table = parse(content, {
319
+ bom: true,
320
+ skip_empty_lines: true,
321
+ relax_column_count: true,
322
+ trim: true,
323
+ delimiter
324
+ });
325
+ const { plan, ignored, hasHeader } = planColumns(table[0] ?? [], options);
326
+ const schema = schemaOf(plan);
327
+ if (!schema.some((key) => IDENTIFYING_CUSTOMER_LIST_KEYS.includes(key))) {
328
+ throw new Error(
329
+ "this file has no column Meta can match people on \u2014 it needs one of email, phone, mobile advertiser id or your own customer id (name the columns with --columns for a file without a header)"
330
+ );
331
+ }
332
+ const defaultCountry = options.defaultCountry ? country(options.defaultCountry) : void 0;
333
+ const body = table.slice(hasHeader ? 1 : 0);
334
+ const columnValues = (key) => {
335
+ const column = plan.find((entry) => entry.key === key);
336
+ return column ? body.map((row) => row[column.source] ?? "") : [];
337
+ };
338
+ const conventions = {
339
+ dateOrder: dateOrderOf(columnValues("DOB"), options.dateFormat),
340
+ decimalMark: decimalMarkOf(columnValues("LOOKALIKE_VALUE"))
341
+ };
342
+ const valueBased = schema.includes("LOOKALIKE_VALUE");
343
+ const unreadable = {};
344
+ const rows = [];
345
+ let skippedRows = 0;
346
+ for (const row of body) {
347
+ const rowCountry = rowCountryOf(row, plan, defaultCountry);
348
+ const cells = plan.flatMap(
349
+ (entry) => columnCells(entry, row[entry.source] ?? "", rowCountry, unreadable, conventions)
350
+ );
351
+ const identified = cells.some(([key, value]) => value !== "" && IDENTIFYING_CUSTOMER_LIST_KEYS.includes(key));
352
+ const valued = !valueBased || cells.some(([key, value]) => key === "LOOKALIKE_VALUE" && value !== "");
353
+ if (!identified || !valued) {
354
+ skippedRows++;
355
+ continue;
356
+ }
357
+ rows.push(cells.map(([key, value]) => value === "" ? "" : hashed(key, value)));
358
+ }
359
+ return { schema, rows, skippedRows, unreadable, ignoredColumns: ignored };
360
+ }
361
+ function customerListBatches(rows) {
362
+ const out = [];
363
+ for (let at = 0; at < rows.length; at += CUSTOMER_LIST_BATCH_ROWS)
364
+ out.push(rows.slice(at, at + CUSTOMER_LIST_BATCH_ROWS));
365
+ return out;
366
+ }
367
+ function customerListUploadRefusal(audienceId, action, list) {
368
+ const batches = customerListBatches(list.rows);
369
+ for (const rows of batches) {
370
+ const batch = customerListBatchSchema.safeParse({ schema: list.schema, rows });
371
+ if (!batch.success) return batch.error.issues[0]?.message;
372
+ }
373
+ const change = customAudienceMembersSchema.safeParse({
374
+ audience_id: audienceId,
375
+ action,
376
+ schema: list.schema,
377
+ batches: batches.map((rows, index) => ({ fileId: `local-${index}`, rows: rows.length }))
378
+ });
379
+ if (change.success) return void 0;
380
+ const issue = change.error.issues[0];
381
+ return issue?.path[0] === "audience_id" ? `${audienceId} is not a custom audience id or a meta_temp_* ref from this chat` : issue?.message;
382
+ }
383
+
384
+ export {
385
+ DATE_ORDERS,
386
+ decimalMarkShown,
387
+ customerListFromFile,
388
+ customerListBatches,
389
+ customerListUploadRefusal
390
+ };
391
+ //# sourceMappingURL=chunk-5GQCN2QZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/customer-list.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n CUSTOMER_LIST_BATCH_ROWS,\n CUSTOMER_LIST_KEYS,\n type CustomerListAction,\n type CustomerListKey,\n customAudienceMembersSchema,\n customerListBatchSchema,\n IDENTIFYING_CUSTOMER_LIST_KEYS,\n UNHASHED_CUSTOMER_LIST_KEYS,\n} from \"@baker/api/ads-meta/customerList\";\nimport { parse } from \"csv-parse/sync\";\nimport { type CountryCode, isSupportedCountry, parsePhoneNumberFromString } from \"libphonenumber-js\";\n\n/**\n * A customer list read from a marketer's file and hashed here — on the agent's\n * machine — so no raw email, phone or name ever reaches Baker or Meta.\n *\n * The normalization is Meta's own (Custom Audiences guide, \"Hashing and\n * normalization\"): an email trimmed and lowercased; a phone as digits with its\n * country code and no leading zero; names, city and state lowercase with no\n * punctuation or spaces (accented letters kept, in UTF-8); a US zip cut to its\n * first five digits; a country as its two-letter code; a birth date as year,\n * month and day; gender as m or f. Each is then SHA-256 hex. A mobile\n * advertiser id and your own customer id are sent as they are, and a\n * value-based list's value as a plain number.\n */\n\n/** The parts of a person Meta can match on, as `customerListFromFile` returns them: already hashed. */\nexport interface HashedCustomerList {\n schema: CustomerListKey[];\n rows: string[][];\n /** Rows with nothing Meta can match on once unreadable values were set aside — not sent. */\n skippedRows: number;\n /** Values that could not be read, by column — counted, never shown. */\n unreadable: Partial<Record<CustomerListKey, number>>;\n /** Columns that are not something Meta matches on — not sent. */\n ignoredColumns: string[];\n}\n\nexport interface CustomerListOptions {\n /** Two-letter country for phones written without their country code, when a row names no country. */\n defaultCountry?: string;\n /** The column holding each person's value, for a value-based list. */\n valueColumn?: string;\n /** Meta keys for a file with no header row, in column order. */\n columns?: string[];\n /** How slashed birthdays are written (07/03/1990): day first or month first. Read from the file when it shows. */\n dateFormat?: DateOrder;\n}\n\nexport const DATE_ORDERS = [\"DMY\", \"MDY\"] as const;\nexport type DateOrder = (typeof DATE_ORDERS)[number];\n\n/** How the whole file writes what one cell cannot say alone: the order of a slashed date, the decimal mark of a value. */\ninterface FileConventions {\n dateOrder: DateOrder | undefined;\n decimalMark: \".\" | \",\" | undefined;\n}\n\nfunction sha256(value: string): string {\n return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n}\n\n/** A header as its words: lowercased, accents and separators gone — \"Teléfono móvil\" is \"telefono movil\". */\nfunction headerWords(cell: string): string {\n return cell\n .normalize(\"NFD\")\n .replace(/\\p{Diacritic}/gu, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .trim();\n}\n\n/** \"dob\" is not a Meta key: a whole date of birth is split into DOBY, DOBM and DOBD. */\ntype HeaderKey = CustomerListKey | \"DOB\";\n\nconst HEADER_PATTERNS: ReadonlyArray<[RegExp, HeaderKey]> = [\n [/^(e ?mail|email address|correo|correo electronico|mail)$/, \"EMAIL\"],\n [/^(phone|phone number|mobile|mobile phone|telefono|movil|tel|celular|cell)$/, \"PHONE\"],\n [/^(first name|firstname|fname|fn|given name|nombre)$/, \"FN\"],\n [/^(last name|lastname|lname|ln|surname|family name|apellido|apellidos)$/, \"LN\"],\n [/^(first initial|fi)$/, \"FI\"],\n [/^(city|town|ct|ciudad|localidad)$/, \"CT\"],\n [/^(state|province|region|st|provincia|estado)$/, \"ST\"],\n [/^(zip|zip code|zipcode|postcode|post code|postal code|cp|codigo postal)$/, \"ZIP\"],\n [/^(country|country code|pais)$/, \"COUNTRY\"],\n [/^(dob|birthday|birth date|birthdate|date of birth|fecha de nacimiento|fecha nacimiento)$/, \"DOB\"],\n [/^(doby|birth year|year of birth)$/, \"DOBY\"],\n [/^(dobm|birth month)$/, \"DOBM\"],\n [/^(dobd|birth day)$/, \"DOBD\"],\n [/^(gen|gender|sex|genero|sexo)$/, \"GEN\"],\n [/^(madid|idfa|aaid|gaid|advertising id|mobile advertiser id)$/, \"MADID\"],\n [/^(extern id|external id|customer id|client id|crm id)$/, \"EXTERN_ID\"],\n [/^(lookalike value|value)$/, \"LOOKALIKE_VALUE\"],\n];\n\nfunction headerKey(cell: string): HeaderKey | undefined {\n const words = headerWords(cell);\n const upper = cell.trim().toUpperCase();\n if ((CUSTOMER_LIST_KEYS as readonly string[]).includes(upper)) {\n return upper as CustomerListKey;\n }\n return HEADER_PATTERNS.find(([pattern]) => pattern.test(words))?.[1];\n}\n\n/** Letters only, lowercase — punctuation, spaces and digits gone, accented letters kept. */\nfunction lettersOnly(value: string): string {\n return value\n .normalize(\"NFC\")\n .toLowerCase()\n .replace(/[^\\p{L}]/gu, \"\");\n}\n\nfunction email(value: string): string | undefined {\n const normalized = value.trim().toLowerCase();\n return /^[^@\\s;,|]+@[^@\\s;,|]+\\.[^@\\s;,|]+$/.test(normalized) ? normalized : undefined;\n}\n\nfunction country(value: string): string | undefined {\n const code = value.trim().toUpperCase();\n return /^[A-Z]{2}$/.test(code) && isSupportedCountry(code) ? code : undefined;\n}\n\nfunction phone(value: string, rowCountry: string | undefined): string | undefined {\n const region = rowCountry ? (rowCountry as CountryCode) : undefined;\n const parsed = parsePhoneNumberFromString(value.trim(), region);\n return parsed?.isValid() ? parsed.number.replace(/^\\+/, \"\") : undefined;\n}\n\nfunction zip(value: string, rowCountry: string | undefined): string | undefined {\n const compact = value.toLowerCase().replace(/\\s+/g, \"\");\n if (compact === \"\") return undefined;\n const us = rowCountry === \"US\" || /^\\d{5}-\\d{4}$/.test(compact);\n return us ? (/^\\d{5}/.exec(compact)?.[0] ?? undefined) : compact;\n}\n\nfunction gender(value: string): string | undefined {\n const first = value.trim().toLowerCase();\n if (/^(m|male|man|hombre|masculino|h)$/.test(first)) return \"m\";\n if (/^(f|female|woman|mujer|femenino)$/.test(first)) return \"f\";\n return undefined;\n}\n\n/** The 50 states, DC and the territories, by name — Meta matches a US state on its two-letter code. */\nconst US_STATE_CODES: Record<string, string> = {\n alabama: \"al\",\n alaska: \"ak\",\n arizona: \"az\",\n arkansas: \"ar\",\n california: \"ca\",\n colorado: \"co\",\n connecticut: \"ct\",\n delaware: \"de\",\n districtofcolumbia: \"dc\",\n washingtondc: \"dc\",\n florida: \"fl\",\n georgia: \"ga\",\n hawaii: \"hi\",\n idaho: \"id\",\n illinois: \"il\",\n indiana: \"in\",\n iowa: \"ia\",\n kansas: \"ks\",\n kentucky: \"ky\",\n louisiana: \"la\",\n maine: \"me\",\n maryland: \"md\",\n massachusetts: \"ma\",\n michigan: \"mi\",\n minnesota: \"mn\",\n mississippi: \"ms\",\n missouri: \"mo\",\n montana: \"mt\",\n nebraska: \"ne\",\n nevada: \"nv\",\n newhampshire: \"nh\",\n newjersey: \"nj\",\n newmexico: \"nm\",\n newyork: \"ny\",\n northcarolina: \"nc\",\n northdakota: \"nd\",\n ohio: \"oh\",\n oklahoma: \"ok\",\n oregon: \"or\",\n pennsylvania: \"pa\",\n rhodeisland: \"ri\",\n southcarolina: \"sc\",\n southdakota: \"sd\",\n tennessee: \"tn\",\n texas: \"tx\",\n utah: \"ut\",\n vermont: \"vt\",\n virginia: \"va\",\n washington: \"wa\",\n westvirginia: \"wv\",\n wisconsin: \"wi\",\n wyoming: \"wy\",\n puertorico: \"pr\",\n guam: \"gu\",\n americansamoa: \"as\",\n virginislands: \"vi\",\n usvirginislands: \"vi\",\n northernmarianaislands: \"mp\",\n};\nconst US_STATE_ABBREVIATIONS = new Set(Object.values(US_STATE_CODES));\n\n/**\n * A state as Meta matches it: a US state by its two-letter code (\"California\"\n * is `ca`), anything else as letters only. A row that names no country is read\n * as US when its state is a US state's full name — \"Georgia\" included, which is\n * far likelier the state than the country in a state column.\n */\nfunction state(value: string, rowCountry: string | undefined): string | undefined {\n const letters = lettersOnly(value);\n if (letters === \"\") return undefined;\n if (rowCountry === \"US\") {\n return US_STATE_CODES[letters] ?? (US_STATE_ABBREVIATIONS.has(letters) ? letters : undefined);\n }\n return (rowCountry === undefined ? US_STATE_CODES[letters] : undefined) ?? letters;\n}\n\nfunction datePart(value: string, length: 2 | 4, max: number): string | undefined {\n const digits = value.trim();\n if (!/^\\d{1,4}$/.test(digits)) return undefined;\n const n = Number(digits);\n if (length === 4) return digits.length === 4 && n >= 1900 && n <= max ? digits : undefined;\n return n >= 1 && n <= max ? String(n).padStart(2, \"0\") : undefined;\n}\n\nconst SLASHED_DATE = /^(\\d{1,2})[/.-](\\d{1,2})[/.-](\\d{4})$/;\n\n/**\n * The order a file writes its slashed dates in. \"03/07/1990\" alone is 3 July\n * or March 7, and a wrong guess hashes a different birthday — the row silently\n * stops matching — so the order comes from `--date-format`, else from a date\n * in the file that can only be read one way (25/03 is day-first, 03/25\n * month-first). A file that never shows it is refused.\n */\nfunction dateOrderOf(values: readonly string[], explicit: DateOrder | undefined): DateOrder | undefined {\n if (explicit) return explicit;\n let dayFirst = false;\n let monthFirst = false;\n let ambiguous = false;\n for (const value of values) {\n const match = SLASHED_DATE.exec(value.trim());\n if (!match) continue;\n const [first, second] = [Number(match[1]), Number(match[2])];\n dayFirst ||= first > 12;\n monthFirst ||= second > 12;\n ambiguous ||= first <= 12 && second <= 12 && first !== second;\n }\n if (dayFirst && monthFirst) {\n throw new Error(\n \"this file writes birthdays both day-first and month-first — make them one order, or pass --date-format DMY|MDY for the order most use\",\n );\n }\n if (dayFirst) return \"DMY\";\n if (monthFirst) return \"MDY\";\n if (ambiguous) {\n throw new Error(\n \"this file's birthdays (like 03/07/1990) can be read day-first or month-first — pass --date-format DMY (day/month/year) or MDY (month/day/year)\",\n );\n }\n return undefined;\n}\n\n/** An ISO date of birth (1990-03-07) or a slashed one (07/03/1990, in the file's order) as year, month and day. */\nfunction dateOfBirth(value: string, order: DateOrder | undefined): [string, string, string] | undefined {\n const text = value.trim();\n const iso = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})/.exec(text);\n const slashed = SLASHED_DATE.exec(text);\n const parts = iso\n ? [iso[1], iso[2], iso[3]]\n : slashed\n ? order === \"MDY\"\n ? [slashed[3], slashed[1], slashed[2]]\n : [slashed[3], slashed[2], slashed[1]]\n : undefined;\n if (!parts) return undefined;\n const year = datePart(parts[0] ?? \"\", 4, new Date().getUTCFullYear());\n const month = datePart(parts[1] ?? \"\", 2, 12);\n const day = datePart(parts[2] ?? \"\", 2, 31);\n return year && month && day ? [year, month, day] : undefined;\n}\n\n/**\n * The decimal mark one value shows on its own, or undefined when it cannot say:\n * with both marks the last one is decimal (\"1.250,50\"); a mark used twice\n * groups thousands (\"1.250.000\"); a single mark followed by other than three\n * digits is decimal (\"12,5\"). A single mark before three digits (\"1.250\") is\n * either, and only the file's other values can say which.\n */\nexport function decimalMarkShown(value: string): \".\" | \",\" | undefined {\n const cleaned = value.replace(/[^\\d.,]/g, \"\");\n const lastDot = cleaned.lastIndexOf(\".\");\n const lastComma = cleaned.lastIndexOf(\",\");\n if (lastDot >= 0 && lastComma >= 0) return lastDot > lastComma ? \".\" : \",\";\n const mark = lastDot >= 0 ? \".\" : lastComma >= 0 ? \",\" : undefined;\n if (mark === undefined) return undefined;\n if (cleaned.split(mark).length > 2) return mark === \".\" ? \",\" : \".\";\n return /^\\d{3}$/.test(cleaned.slice(cleaned.indexOf(mark) + 1)) ? undefined : mark;\n}\n\n/** The decimal mark the file's values agree on, or undefined when none shows one. */\nfunction decimalMarkOf(values: readonly string[]): \".\" | \",\" | undefined {\n for (const value of values) {\n const mark = decimalMarkShown(value);\n if (mark) return mark;\n }\n return undefined;\n}\n\n/**\n * A value as a plain number: currency signs and thousands separators dropped\n * (\"€1,250.50\" is 1250.5, \"1.250,50\" is 1250.5). A value whose mark the file\n * never settles (\"1.250\" alone) is unreadable rather than guessed — a\n * thousandfold error in a value-based list skews the lookalike Meta builds.\n */\nfunction numericValue(value: string, fileMark: \".\" | \",\" | undefined): string | undefined {\n const cleaned = value.replace(/[^\\d.,-]/g, \"\");\n const mark = decimalMarkShown(cleaned) ?? fileMark;\n if (mark === undefined && /[.,]/.test(cleaned)) return undefined;\n const thousands = mark === \",\" ? \".\" : \",\";\n const plain = cleaned.split(thousands).join(\"\").replace(\",\", \".\");\n const n = Number(plain);\n return plain !== \"\" && Number.isFinite(n) && n >= 0 ? String(n) : undefined;\n}\n\n/** One cell of a column, normalized as Meta asks — undefined when it cannot be read. */\nfunction normalizedCell(\n key: CustomerListKey,\n value: string,\n rowCountry: string | undefined,\n conventions: FileConventions,\n): string | undefined {\n switch (key) {\n case \"EMAIL\":\n return email(value);\n case \"PHONE\":\n return phone(value, rowCountry);\n case \"FN\":\n case \"LN\":\n case \"CT\":\n return lettersOnly(value) || undefined;\n case \"FI\":\n return lettersOnly(value).slice(0, 1) || undefined;\n case \"ST\":\n return state(value, rowCountry);\n case \"ZIP\":\n return zip(value, rowCountry);\n case \"COUNTRY\":\n return country(value)?.toLowerCase();\n case \"DOBY\":\n return datePart(value, 4, new Date().getUTCFullYear());\n case \"DOBM\":\n return datePart(value, 2, 12);\n case \"DOBD\":\n return datePart(value, 2, 31);\n case \"GEN\":\n return gender(value);\n case \"MADID\":\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(value.trim().toLowerCase())\n ? value.trim().toLowerCase()\n : undefined;\n case \"EXTERN_ID\":\n return value.trim() || undefined;\n case \"LOOKALIKE_VALUE\":\n return numericValue(value, conventions.decimalMark);\n default:\n return undefined;\n }\n}\n\n/** How each source column becomes Meta keys, in order. */\ninterface ColumnPlan {\n source: number;\n key: HeaderKey;\n}\n\nfunction planColumns(\n firstRow: string[],\n options: CustomerListOptions,\n): { plan: ColumnPlan[]; ignored: string[]; hasHeader: boolean } {\n if (options.columns) {\n const plan = options.columns.map((name, source) => {\n const key = headerKey(name);\n if (!key)\n throw new Error(`--columns: \"${name}\" is not a column Meta matches on (${CUSTOMER_LIST_KEYS.join(\", \")})`);\n return { source, key };\n });\n return { plan, ignored: [], hasHeader: false };\n }\n const valueHeader = options.valueColumn ? headerWords(options.valueColumn) : undefined;\n const plan: ColumnPlan[] = [];\n const ignored: string[] = [];\n firstRow.forEach((cell, source) => {\n const named = valueHeader !== undefined && headerWords(cell) === valueHeader;\n const key = named ? \"LOOKALIKE_VALUE\" : headerKey(cell);\n // A person's value is the column the list named, never a column that merely reads \"value\".\n if (key && (key !== \"LOOKALIKE_VALUE\" || named) && !plan.some((entry) => entry.key === key)) {\n plan.push({ source, key });\n } else if (cell.trim() !== \"\") {\n ignored.push(cell.trim());\n }\n });\n if (valueHeader && !plan.some((entry) => entry.key === \"LOOKALIKE_VALUE\")) {\n throw new Error(`--value-column \"${options.valueColumn}\" is not a column of this file`);\n }\n return { plan, ignored, hasHeader: true };\n}\n\nfunction schemaOf(plan: readonly ColumnPlan[]): CustomerListKey[] {\n return plan.flatMap((entry) => (entry.key === \"DOB\" ? ([\"DOBY\", \"DOBM\", \"DOBD\"] as const) : [entry.key]));\n}\n\nfunction hashed(key: CustomerListKey, normalized: string): string {\n return UNHASHED_CUSTOMER_LIST_KEYS.has(key) ? normalized : sha256(normalized);\n}\n\n/** The row's country, which a phone without its code and a US zip are read against. */\nfunction rowCountryOf(row: readonly string[], plan: readonly ColumnPlan[], defaultCountry: string | undefined) {\n const column = plan.find((entry) => entry.key === \"COUNTRY\");\n return (column ? country(row[column.source] ?? \"\") : undefined) ?? defaultCountry;\n}\n\ntype Cell = [CustomerListKey, string];\n\nfunction countUnreadable(unreadable: Partial<Record<CustomerListKey, number>>, key: CustomerListKey): void {\n unreadable[key] = (unreadable[key] ?? 0) + 1;\n}\n\n/** One source column's cells in a row, normalized — a date of birth becomes three. Empty when unreadable. */\nfunction columnCells(\n entry: ColumnPlan,\n raw: string,\n rowCountry: string | undefined,\n unreadable: Partial<Record<CustomerListKey, number>>,\n conventions: FileConventions,\n): Cell[] {\n const blank = raw.trim() === \"\";\n if (entry.key === \"DOB\") {\n const parts = blank ? undefined : dateOfBirth(raw, conventions.dateOrder);\n if (!blank && !parts) countUnreadable(unreadable, \"DOBY\");\n return [\n [\"DOBY\", parts?.[0] ?? \"\"],\n [\"DOBM\", parts?.[1] ?? \"\"],\n [\"DOBD\", parts?.[2] ?? \"\"],\n ];\n }\n if (blank) return [[entry.key, \"\"]];\n const normalized = normalizedCell(entry.key, raw, rowCountry, conventions);\n if (normalized === undefined) countUnreadable(unreadable, entry.key);\n return [[entry.key, normalized ?? \"\"]];\n}\n\n/**\n * The one character a file's columns are split on, read off its first line.\n * Excel writes `;` where the decimal comma is taken, tabs come from a copied\n * sheet. Only one is used: split on all three, a semicolon file's \"1250,50\"\n * becomes two cells and every column after it shifts.\n */\nfunction delimiterOf(content: string): string {\n const firstLine =\n content\n .replace(/^\\uFEFF/, \"\")\n .split(/\\r?\\n/)\n .find((line) => line.trim() !== \"\") ?? \"\";\n const unquoted = firstLine.replace(/\"[^\"]*\"/g, \"\");\n const count = (mark: string) => unquoted.split(mark).length - 1;\n const most = Math.max(count(\"\\t\"), count(\";\"), count(\",\"));\n // A tie goes to the rarer mark: a comma file seldom holds a semicolon, a semicolon file often a decimal comma.\n return most === 0 ? \",\" : ([\"\\t\", \";\", \",\"].find((mark) => count(mark) === most) ?? \",\");\n}\n\nexport function customerListFromFile(content: string, options: CustomerListOptions): HashedCustomerList {\n const delimiter = delimiterOf(content);\n const table: string[][] = parse(content, {\n bom: true,\n skip_empty_lines: true,\n relax_column_count: true,\n trim: true,\n delimiter,\n });\n const { plan, ignored, hasHeader } = planColumns(table[0] ?? [], options);\n const schema = schemaOf(plan);\n if (!schema.some((key) => IDENTIFYING_CUSTOMER_LIST_KEYS.includes(key))) {\n throw new Error(\n \"this file has no column Meta can match people on — it needs one of email, phone, mobile advertiser id or your own customer id (name the columns with --columns for a file without a header)\",\n );\n }\n const defaultCountry = options.defaultCountry ? country(options.defaultCountry) : undefined;\n const body = table.slice(hasHeader ? 1 : 0);\n const columnValues = (key: HeaderKey) => {\n const column = plan.find((entry) => entry.key === key);\n return column ? body.map((row) => row[column.source] ?? \"\") : [];\n };\n const conventions: FileConventions = {\n dateOrder: dateOrderOf(columnValues(\"DOB\"), options.dateFormat),\n decimalMark: decimalMarkOf(columnValues(\"LOOKALIKE_VALUE\")),\n };\n const valueBased = schema.includes(\"LOOKALIKE_VALUE\");\n const unreadable: Partial<Record<CustomerListKey, number>> = {};\n const rows: string[][] = [];\n let skippedRows = 0;\n for (const row of body) {\n const rowCountry = rowCountryOf(row, plan, defaultCountry);\n const cells = plan.flatMap((entry) =>\n columnCells(entry, row[entry.source] ?? \"\", rowCountry, unreadable, conventions),\n );\n const identified = cells.some(([key, value]) => value !== \"\" && IDENTIFYING_CUSTOMER_LIST_KEYS.includes(key));\n // A value-based list weighs every person by their value; one without a value is left out, not sent as nothing.\n const valued = !valueBased || cells.some(([key, value]) => key === \"LOOKALIKE_VALUE\" && value !== \"\");\n if (!identified || !valued) {\n skippedRows++;\n continue;\n }\n rows.push(cells.map(([key, value]) => (value === \"\" ? \"\" : hashed(key, value))));\n }\n return { schema, rows, skippedRows, unreadable, ignoredColumns: ignored };\n}\n\n/** The list's rows in the batches they are uploaded in — Meta's per-request ceiling each. */\nexport function customerListBatches(rows: readonly string[][]): string[][][] {\n const out: string[][][] = [];\n for (let at = 0; at < rows.length; at += CUSTOMER_LIST_BATCH_ROWS)\n out.push(rows.slice(at, at + CUSTOMER_LIST_BATCH_ROWS));\n return out;\n}\n\n/**\n * Why this change could not be staged, checked before a single batch is\n * uploaded: an upload the stage then refuses leaves stored people that no\n * change names. Everything the contract says is checked here, with\n * placeholder file ids standing in for the batches not yet stored.\n */\nexport function customerListUploadRefusal(\n audienceId: string,\n action: CustomerListAction,\n list: Pick<HashedCustomerList, \"schema\" | \"rows\">,\n): string | undefined {\n const batches = customerListBatches(list.rows);\n for (const rows of batches) {\n const batch = customerListBatchSchema.safeParse({ schema: list.schema, rows });\n if (!batch.success) return batch.error.issues[0]?.message;\n }\n const change = customAudienceMembersSchema.safeParse({\n audience_id: audienceId,\n action,\n schema: list.schema,\n batches: batches.map((rows, index) => ({ fileId: `local-${index}`, rows: rows.length })),\n });\n if (change.success) return undefined;\n const issue = change.error.issues[0];\n return issue?.path[0] === \"audience_id\"\n ? `${audienceId} is not a custom audience id or a meta_temp_* ref from this chat`\n : issue?.message;\n}\n"],"mappings":"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","names":["plan"]}
@@ -0,0 +1,207 @@
1
+ import {
2
+ handleConnectionError,
3
+ needsConnectionFix,
4
+ writeAdsJson
5
+ } from "./chunk-SWL4AAPP.js";
6
+ import {
7
+ LINKEDIN_SEARCH_STATUSES,
8
+ unsupportedLinkedinSearchStatuses
9
+ } from "./chunk-66QHX566.js";
10
+ import {
11
+ ApiError
12
+ } from "./chunk-XDZVBX6L.js";
13
+ import {
14
+ MissingChatIdError,
15
+ getEnv
16
+ } from "./chunk-EE72SSB2.js";
17
+
18
+ // src/commands/ads/linkedin/shared.ts
19
+ import { readFileSync } from "fs";
20
+ var DAY_MS = 864e5;
21
+ function handleLinkedinError(err) {
22
+ if (err instanceof ApiError) {
23
+ if (needsConnectionFix(err.code, err.message)) {
24
+ handleConnectionError("linkedin_ads", err.message);
25
+ }
26
+ if (isNoAccountsSelectedError(err.code, err.message)) {
27
+ handleConnectionError("linkedin_ads", err.message);
28
+ }
29
+ const explanation = explainLinkedinError(err);
30
+ const envelope = {
31
+ ok: false,
32
+ error: {
33
+ code: err.code,
34
+ message: err.message,
35
+ fix: {
36
+ action: explanation.action,
37
+ explanation: explanation.message,
38
+ correctedCommand: explanation.correctedCommand
39
+ },
40
+ retryable: err.code === "RATE_LIMITED" || err.code === "UNAVAILABLE" || err.code === "INTERNAL_ERROR"
41
+ }
42
+ };
43
+ writeAdsJson(envelope);
44
+ process.exit(1);
45
+ }
46
+ writeAdsJson(unexpectedErrorEnvelope(err));
47
+ process.exit(1);
48
+ }
49
+ function unexpectedErrorEnvelope(err) {
50
+ if (err instanceof MissingChatIdError) {
51
+ return {
52
+ ok: false,
53
+ error: {
54
+ code: err.code,
55
+ message: err.message,
56
+ fix: {
57
+ action: "reject",
58
+ explanation: "LinkedIn changes are staged in a chat and this run has none. Don't retry: carry on with the rest of the job and tell the user this change couldn't be staged from here."
59
+ },
60
+ retryable: false
61
+ }
62
+ };
63
+ }
64
+ const message = err instanceof Error ? err.message : "Unexpected error";
65
+ return { ok: false, error: { code: "NETWORK_ERROR", message } };
66
+ }
67
+ function isNoAccountsSelectedError(code, message) {
68
+ return code === "VALIDATION_ERROR" && /no linkedin ad accounts selected/i.test(message);
69
+ }
70
+ function explainLinkedinError(err) {
71
+ const lower = err.message.toLowerCase();
72
+ if (err.code === "VALIDATION_ERROR" && lower.includes("granularity") && lower.includes("daily")) {
73
+ return {
74
+ action: "retry_with_flag",
75
+ message: "LinkedIn rejects DAILY granularity when pivoting on demographic dims (job-title, company, etc.). Re-run with --granularity ALL or MONTHLY.",
76
+ correctedCommand: void 0
77
+ };
78
+ }
79
+ if (err.code === "RATE_LIMITED") {
80
+ return {
81
+ action: "wait_and_retry",
82
+ message: "Hit a LinkedIn throttle. The CLI already backs off automatically \u2014 if you see this you've exhausted the retry budget. Wait ~60s and retry."
83
+ };
84
+ }
85
+ if (err.code === "INTERNAL_ERROR" && lower.includes("deprecat")) {
86
+ return {
87
+ action: "reject",
88
+ message: "LinkedIn-Version header is deprecated. The backend constant LINKEDIN_API_VERSION needs to be bumped \u2014 file an issue or update the constant."
89
+ };
90
+ }
91
+ return { action: "reject", message: err.message };
92
+ }
93
+ var LI_ACCOUNT_ID_RE = /^(urn:li:sponsoredAccount:)?\d+$/;
94
+ function resolveAccountIdArg(args) {
95
+ const fromArgs = args["account-id"] ?? args["account-urn"];
96
+ const id = fromArgs || getEnv().BAKER_LINKEDIN_AD_ACCOUNT_ID;
97
+ if (!id) {
98
+ writeAdsJson({
99
+ ok: false,
100
+ error: {
101
+ code: "MISSING_ACCOUNT_ID",
102
+ message: "Pass --account-id (numeric) or --account-urn (urn:li:sponsoredAccount:N), or set BAKER_LINKEDIN_AD_ACCOUNT_ID. Run `baker ads linkedin accounts` to find IDs."
103
+ }
104
+ });
105
+ process.exit(1);
106
+ }
107
+ if (!LI_ACCOUNT_ID_RE.test(id)) {
108
+ writeAdsJson({
109
+ ok: false,
110
+ error: {
111
+ code: "INVALID_ACCOUNT_ID",
112
+ message: `Invalid LinkedIn account ID "${id}". Expected numeric or urn:li:sponsoredAccount:N.`
113
+ }
114
+ });
115
+ process.exit(1);
116
+ }
117
+ return id.startsWith("urn:") ? id.split(":").pop() ?? id : id;
118
+ }
119
+ function todayIso() {
120
+ return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
121
+ }
122
+ function daysAgoIso(days) {
123
+ return new Date(Date.now() - days * DAY_MS).toISOString().slice(0, 10);
124
+ }
125
+ function csvOrJson(args) {
126
+ return args.output ?? "json";
127
+ }
128
+ function statusesArgDescription(level) {
129
+ return `CSV of statuses (${LINKEDIN_SEARCH_STATUSES[level].join(",")})`;
130
+ }
131
+ function statusFilterError(level, statuses) {
132
+ const unsupported = unsupportedLinkedinSearchStatuses(level, statuses);
133
+ if (unsupported.length === 0) {
134
+ return null;
135
+ }
136
+ const accepted = LINKEDIN_SEARCH_STATUSES[level].join(",");
137
+ return {
138
+ ok: false,
139
+ error: {
140
+ code: "INVALID_STATUS",
141
+ message: `LinkedIn does not accept status ${unsupported.join(", ")} for this listing.`,
142
+ fix: {
143
+ action: "retry_with_flag",
144
+ explanation: `Re-run with --statuses from ${accepted}, or --all-statuses to drop the filter.`
145
+ },
146
+ retryable: false
147
+ }
148
+ };
149
+ }
150
+ function resolveStatusFilter(args, level) {
151
+ if (args["all-statuses"]) {
152
+ return void 0;
153
+ }
154
+ const explicit = args.statuses;
155
+ if (!explicit) {
156
+ return ["ACTIVE"];
157
+ }
158
+ const statuses = explicit.split(",").map((s) => s.trim().toUpperCase()).filter(Boolean);
159
+ const error = statusFilterError(level, statuses);
160
+ if (error) {
161
+ writeAdsJson(error);
162
+ process.exit(1);
163
+ }
164
+ return statuses;
165
+ }
166
+ function loadTargetingArg(args) {
167
+ const inline = args.targeting;
168
+ if (inline) {
169
+ try {
170
+ return JSON.parse(inline);
171
+ } catch {
172
+ handleLinkedinError(new Error("--targeting must be valid JSON. See LinkedIn 'targetingCriteria' shape."));
173
+ }
174
+ }
175
+ const file = args["targeting-file"];
176
+ if (file) {
177
+ try {
178
+ return JSON.parse(readFileSync(file, "utf-8"));
179
+ } catch (e) {
180
+ handleLinkedinError(
181
+ new Error(`Failed to read --targeting-file: ${e instanceof Error ? e.message : "I/O error"}`)
182
+ );
183
+ }
184
+ }
185
+ handleLinkedinError(new Error("Pass --targeting-file <path> or --targeting '{...JSON...}'"));
186
+ }
187
+ function exitOnInvalidArgs(issues, flagByField) {
188
+ const messages = issues.map((issue) => {
189
+ const field = String(issue.path[0] ?? "");
190
+ return `${flagByField[field] ?? (field || "args")}: ${issue.message}`;
191
+ });
192
+ writeAdsJson({ ok: false, error: { code: "INVALID_ARGS", message: messages.join("; ") } });
193
+ process.exit(1);
194
+ }
195
+
196
+ export {
197
+ handleLinkedinError,
198
+ resolveAccountIdArg,
199
+ todayIso,
200
+ daysAgoIso,
201
+ csvOrJson,
202
+ statusesArgDescription,
203
+ resolveStatusFilter,
204
+ loadTargetingArg,
205
+ exitOnInvalidArgs
206
+ };
207
+ //# sourceMappingURL=chunk-5HJRZFMW.js.map