@koda-sl/baker-cli 0.34.1 → 0.34.3

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 (682) hide show
  1. package/README.md +59 -28
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +39 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/client.d.ts +12 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +153 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/actions/claim.d.ts +13 -0
  11. package/dist/commands/actions/claim.d.ts.map +1 -0
  12. package/dist/commands/actions/claim.js +45 -0
  13. package/dist/commands/actions/claim.js.map +1 -0
  14. package/dist/commands/actions/complete.d.ts +18 -0
  15. package/dist/commands/actions/complete.d.ts.map +1 -0
  16. package/dist/commands/actions/complete.js +42 -0
  17. package/dist/commands/actions/complete.js.map +1 -0
  18. package/dist/commands/actions/create.d.ts +24 -0
  19. package/dist/commands/actions/create.d.ts.map +1 -0
  20. package/dist/commands/actions/create.js +68 -0
  21. package/dist/commands/actions/create.js.map +1 -0
  22. package/dist/commands/actions/discard.d.ts +18 -0
  23. package/dist/commands/actions/discard.d.ts.map +1 -0
  24. package/dist/commands/actions/discard.js +44 -0
  25. package/dist/commands/actions/discard.js.map +1 -0
  26. package/dist/commands/actions/get.d.ts +13 -0
  27. package/dist/commands/actions/get.d.ts.map +1 -0
  28. package/dist/commands/actions/get.js +34 -0
  29. package/dist/commands/actions/get.js.map +1 -0
  30. package/dist/commands/actions/index.d.ts +2 -0
  31. package/dist/commands/actions/index.d.ts.map +1 -0
  32. package/dist/commands/actions/index.js +43 -0
  33. package/dist/commands/actions/index.js.map +1 -0
  34. package/dist/commands/actions/link.d.ts +13 -0
  35. package/dist/commands/actions/link.d.ts.map +1 -0
  36. package/dist/commands/actions/link.js +43 -0
  37. package/dist/commands/actions/link.js.map +1 -0
  38. package/dist/commands/actions/list.d.ts +19 -0
  39. package/dist/commands/actions/list.d.ts.map +1 -0
  40. package/dist/commands/actions/list.js +66 -0
  41. package/dist/commands/actions/list.js.map +1 -0
  42. package/dist/commands/actions/release.d.ts +13 -0
  43. package/dist/commands/actions/release.d.ts.map +1 -0
  44. package/dist/commands/actions/release.js +38 -0
  45. package/dist/commands/actions/release.js.map +1 -0
  46. package/dist/commands/actions/shared.d.ts +6 -0
  47. package/dist/commands/actions/shared.d.ts.map +1 -0
  48. package/dist/commands/actions/shared.js +28 -0
  49. package/dist/commands/actions/shared.js.map +1 -0
  50. package/dist/commands/actions/tag/add.d.ts +18 -0
  51. package/dist/commands/actions/tag/add.d.ts.map +1 -0
  52. package/dist/commands/actions/tag/add.js +47 -0
  53. package/dist/commands/actions/tag/add.js.map +1 -0
  54. package/dist/commands/actions/tag/create.d.ts +23 -0
  55. package/dist/commands/actions/tag/create.d.ts.map +1 -0
  56. package/dist/commands/actions/tag/create.js +50 -0
  57. package/dist/commands/actions/tag/create.js.map +1 -0
  58. package/dist/commands/actions/tag/delete.d.ts +13 -0
  59. package/dist/commands/actions/tag/delete.d.ts.map +1 -0
  60. package/dist/commands/actions/tag/delete.js +36 -0
  61. package/dist/commands/actions/tag/delete.js.map +1 -0
  62. package/dist/commands/actions/tag/index.d.ts +2 -0
  63. package/dist/commands/actions/tag/index.d.ts.map +1 -0
  64. package/dist/commands/actions/tag/index.js +32 -0
  65. package/dist/commands/actions/tag/index.js.map +1 -0
  66. package/dist/commands/actions/tag/list.d.ts +2 -0
  67. package/dist/commands/actions/tag/list.d.ts.map +1 -0
  68. package/dist/commands/actions/tag/list.js +24 -0
  69. package/dist/commands/actions/tag/list.js.map +1 -0
  70. package/dist/commands/actions/tag/remove.d.ts +18 -0
  71. package/dist/commands/actions/tag/remove.d.ts.map +1 -0
  72. package/dist/commands/actions/tag/remove.js +48 -0
  73. package/dist/commands/actions/tag/remove.js.map +1 -0
  74. package/dist/commands/actions/tag/update.d.ts +28 -0
  75. package/dist/commands/actions/tag/update.d.ts.map +1 -0
  76. package/dist/commands/actions/tag/update.js +50 -0
  77. package/dist/commands/actions/tag/update.js.map +1 -0
  78. package/dist/commands/actions/unlink.d.ts +13 -0
  79. package/dist/commands/actions/unlink.d.ts.map +1 -0
  80. package/dist/commands/actions/unlink.js +45 -0
  81. package/dist/commands/actions/unlink.js.map +1 -0
  82. package/dist/commands/actions/update.d.ts +23 -0
  83. package/dist/commands/actions/update.d.ts.map +1 -0
  84. package/dist/commands/actions/update.js +50 -0
  85. package/dist/commands/actions/update.js.map +1 -0
  86. package/dist/commands/ads/cache.d.ts +7 -0
  87. package/dist/commands/ads/cache.d.ts.map +1 -0
  88. package/dist/commands/ads/cache.js +73 -0
  89. package/dist/commands/ads/cache.js.map +1 -0
  90. package/dist/commands/ads/cache.test.d.ts +2 -0
  91. package/dist/commands/ads/cache.test.d.ts.map +1 -0
  92. package/dist/commands/ads/cache.test.js +44 -0
  93. package/dist/commands/ads/cache.test.js.map +1 -0
  94. package/dist/commands/ads/field-descriptions.d.ts +2 -0
  95. package/dist/commands/ads/field-descriptions.d.ts.map +1 -0
  96. package/dist/commands/ads/field-descriptions.js +91 -0
  97. package/dist/commands/ads/field-descriptions.js.map +1 -0
  98. package/dist/commands/ads/google/accounts.d.ts +14 -0
  99. package/dist/commands/ads/google/accounts.d.ts.map +1 -0
  100. package/dist/commands/ads/google/accounts.js +76 -0
  101. package/dist/commands/ads/google/accounts.js.map +1 -0
  102. package/dist/commands/ads/google/changes.d.ts +34 -0
  103. package/dist/commands/ads/google/changes.d.ts.map +1 -0
  104. package/dist/commands/ads/google/changes.js +80 -0
  105. package/dist/commands/ads/google/changes.js.map +1 -0
  106. package/dist/commands/ads/google/correction-table.d.ts +3 -0
  107. package/dist/commands/ads/google/correction-table.d.ts.map +1 -0
  108. package/dist/commands/ads/google/correction-table.js +352 -0
  109. package/dist/commands/ads/google/correction-table.js.map +1 -0
  110. package/dist/commands/ads/google/currency.d.ts +13 -0
  111. package/dist/commands/ads/google/currency.d.ts.map +1 -0
  112. package/dist/commands/ads/google/currency.js +68 -0
  113. package/dist/commands/ads/google/currency.js.map +1 -0
  114. package/dist/commands/ads/google/error-parser.d.ts +3 -0
  115. package/dist/commands/ads/google/error-parser.d.ts.map +1 -0
  116. package/dist/commands/ads/google/error-parser.js +91 -0
  117. package/dist/commands/ads/google/error-parser.js.map +1 -0
  118. package/dist/commands/ads/google/error-parser.test.d.ts +2 -0
  119. package/dist/commands/ads/google/error-parser.test.d.ts.map +1 -0
  120. package/dist/commands/ads/google/error-parser.test.js +48 -0
  121. package/dist/commands/ads/google/error-parser.test.js.map +1 -0
  122. package/dist/commands/ads/google/index.d.ts +2 -0
  123. package/dist/commands/ads/google/index.d.ts.map +1 -0
  124. package/dist/commands/ads/google/index.js +34 -0
  125. package/dist/commands/ads/google/index.js.map +1 -0
  126. package/dist/commands/ads/google/keywords/discover.d.ts +49 -0
  127. package/dist/commands/ads/google/keywords/discover.d.ts.map +1 -0
  128. package/dist/commands/ads/google/keywords/discover.js +151 -0
  129. package/dist/commands/ads/google/keywords/discover.js.map +1 -0
  130. package/dist/commands/ads/google/keywords/index.d.ts +2 -0
  131. package/dist/commands/ads/google/keywords/index.d.ts.map +1 -0
  132. package/dist/commands/ads/google/keywords/index.js +24 -0
  133. package/dist/commands/ads/google/keywords/index.js.map +1 -0
  134. package/dist/commands/ads/google/keywords/languages.d.ts +2 -0
  135. package/dist/commands/ads/google/keywords/languages.d.ts.map +1 -0
  136. package/dist/commands/ads/google/keywords/languages.js +23 -0
  137. package/dist/commands/ads/google/keywords/languages.js.map +1 -0
  138. package/dist/commands/ads/google/keywords/locations.d.ts +2 -0
  139. package/dist/commands/ads/google/keywords/locations.d.ts.map +1 -0
  140. package/dist/commands/ads/google/keywords/locations.js +23 -0
  141. package/dist/commands/ads/google/keywords/locations.js.map +1 -0
  142. package/dist/commands/ads/google/keywords/metrics.d.ts +34 -0
  143. package/dist/commands/ads/google/keywords/metrics.d.ts.map +1 -0
  144. package/dist/commands/ads/google/keywords/metrics.js +123 -0
  145. package/dist/commands/ads/google/keywords/metrics.js.map +1 -0
  146. package/dist/commands/ads/google/library/index.d.ts +3 -0
  147. package/dist/commands/ads/google/library/index.d.ts.map +1 -0
  148. package/dist/commands/ads/google/library/index.js +279 -0
  149. package/dist/commands/ads/google/library/index.js.map +1 -0
  150. package/dist/commands/ads/google/library/index.test.d.ts +2 -0
  151. package/dist/commands/ads/google/library/index.test.d.ts.map +1 -0
  152. package/dist/commands/ads/google/library/index.test.js +26 -0
  153. package/dist/commands/ads/google/library/index.test.js.map +1 -0
  154. package/dist/commands/ads/google/preflight.d.ts +3 -0
  155. package/dist/commands/ads/google/preflight.d.ts.map +1 -0
  156. package/dist/commands/ads/google/preflight.js +122 -0
  157. package/dist/commands/ads/google/preflight.js.map +1 -0
  158. package/dist/commands/ads/google/preflight.test.d.ts +2 -0
  159. package/dist/commands/ads/google/preflight.test.d.ts.map +1 -0
  160. package/dist/commands/ads/google/preflight.test.js +50 -0
  161. package/dist/commands/ads/google/preflight.test.js.map +1 -0
  162. package/dist/commands/ads/google/presets.d.ts +12 -0
  163. package/dist/commands/ads/google/presets.d.ts.map +1 -0
  164. package/dist/commands/ads/google/presets.js +85 -0
  165. package/dist/commands/ads/google/presets.js.map +1 -0
  166. package/dist/commands/ads/google/presets.test.d.ts +2 -0
  167. package/dist/commands/ads/google/presets.test.d.ts.map +1 -0
  168. package/dist/commands/ads/google/presets.test.js +79 -0
  169. package/dist/commands/ads/google/presets.test.js.map +1 -0
  170. package/dist/commands/ads/google/query.d.ts +64 -0
  171. package/dist/commands/ads/google/query.d.ts.map +1 -0
  172. package/dist/commands/ads/google/query.js +304 -0
  173. package/dist/commands/ads/google/query.js.map +1 -0
  174. package/dist/commands/ads/index.d.ts +2 -0
  175. package/dist/commands/ads/index.d.ts.map +1 -0
  176. package/dist/commands/ads/index.js +34 -0
  177. package/dist/commands/ads/index.js.map +1 -0
  178. package/dist/commands/ads/linkedin/account.d.ts +20 -0
  179. package/dist/commands/ads/linkedin/account.d.ts.map +1 -0
  180. package/dist/commands/ads/linkedin/account.js +39 -0
  181. package/dist/commands/ads/linkedin/account.js.map +1 -0
  182. package/dist/commands/ads/linkedin/accounts.d.ts +20 -0
  183. package/dist/commands/ads/linkedin/accounts.d.ts.map +1 -0
  184. package/dist/commands/ads/linkedin/accounts.js +56 -0
  185. package/dist/commands/ads/linkedin/accounts.js.map +1 -0
  186. package/dist/commands/ads/linkedin/analytics.d.ts +84 -0
  187. package/dist/commands/ads/linkedin/analytics.d.ts.map +1 -0
  188. package/dist/commands/ads/linkedin/analytics.js +249 -0
  189. package/dist/commands/ads/linkedin/analytics.js.map +1 -0
  190. package/dist/commands/ads/linkedin/audience-size.d.ts +28 -0
  191. package/dist/commands/ads/linkedin/audience-size.d.ts.map +1 -0
  192. package/dist/commands/ads/linkedin/audience-size.js +75 -0
  193. package/dist/commands/ads/linkedin/audience-size.js.map +1 -0
  194. package/dist/commands/ads/linkedin/audit.d.ts +35 -0
  195. package/dist/commands/ads/linkedin/audit.d.ts.map +1 -0
  196. package/dist/commands/ads/linkedin/audit.js +136 -0
  197. package/dist/commands/ads/linkedin/audit.js.map +1 -0
  198. package/dist/commands/ads/linkedin/bid-pricing.d.ts +38 -0
  199. package/dist/commands/ads/linkedin/bid-pricing.d.ts.map +1 -0
  200. package/dist/commands/ads/linkedin/bid-pricing.js +76 -0
  201. package/dist/commands/ads/linkedin/bid-pricing.js.map +1 -0
  202. package/dist/commands/ads/linkedin/campaign-groups.d.ts +32 -0
  203. package/dist/commands/ads/linkedin/campaign-groups.d.ts.map +1 -0
  204. package/dist/commands/ads/linkedin/campaign-groups.js +50 -0
  205. package/dist/commands/ads/linkedin/campaign-groups.js.map +1 -0
  206. package/dist/commands/ads/linkedin/campaigns.d.ts +36 -0
  207. package/dist/commands/ads/linkedin/campaigns.d.ts.map +1 -0
  208. package/dist/commands/ads/linkedin/campaigns.js +57 -0
  209. package/dist/commands/ads/linkedin/campaigns.js.map +1 -0
  210. package/dist/commands/ads/linkedin/conversation.d.ts +36 -0
  211. package/dist/commands/ads/linkedin/conversation.d.ts.map +1 -0
  212. package/dist/commands/ads/linkedin/conversation.js +77 -0
  213. package/dist/commands/ads/linkedin/conversation.js.map +1 -0
  214. package/dist/commands/ads/linkedin/conversions.d.ts +2 -0
  215. package/dist/commands/ads/linkedin/conversions.d.ts.map +1 -0
  216. package/dist/commands/ads/linkedin/conversions.js +102 -0
  217. package/dist/commands/ads/linkedin/conversions.js.map +1 -0
  218. package/dist/commands/ads/linkedin/creatives.d.ts +36 -0
  219. package/dist/commands/ads/linkedin/creatives.d.ts.map +1 -0
  220. package/dist/commands/ads/linkedin/creatives.js +57 -0
  221. package/dist/commands/ads/linkedin/creatives.js.map +1 -0
  222. package/dist/commands/ads/linkedin/demographics.d.ts +40 -0
  223. package/dist/commands/ads/linkedin/demographics.d.ts.map +1 -0
  224. package/dist/commands/ads/linkedin/demographics.js +117 -0
  225. package/dist/commands/ads/linkedin/demographics.js.map +1 -0
  226. package/dist/commands/ads/linkedin/facets.d.ts +2 -0
  227. package/dist/commands/ads/linkedin/facets.d.ts.map +1 -0
  228. package/dist/commands/ads/linkedin/facets.js +95 -0
  229. package/dist/commands/ads/linkedin/facets.js.map +1 -0
  230. package/dist/commands/ads/linkedin/forecast.d.ts +50 -0
  231. package/dist/commands/ads/linkedin/forecast.d.ts.map +1 -0
  232. package/dist/commands/ads/linkedin/forecast.js +83 -0
  233. package/dist/commands/ads/linkedin/forecast.js.map +1 -0
  234. package/dist/commands/ads/linkedin/index.d.ts +19 -0
  235. package/dist/commands/ads/linkedin/index.d.ts.map +1 -0
  236. package/dist/commands/ads/linkedin/index.js +83 -0
  237. package/dist/commands/ads/linkedin/index.js.map +1 -0
  238. package/dist/commands/ads/linkedin/leads.d.ts +40 -0
  239. package/dist/commands/ads/linkedin/leads.d.ts.map +1 -0
  240. package/dist/commands/ads/linkedin/leads.js +75 -0
  241. package/dist/commands/ads/linkedin/leads.js.map +1 -0
  242. package/dist/commands/ads/linkedin/presets.d.ts +40 -0
  243. package/dist/commands/ads/linkedin/presets.d.ts.map +1 -0
  244. package/dist/commands/ads/linkedin/presets.js +193 -0
  245. package/dist/commands/ads/linkedin/presets.js.map +1 -0
  246. package/dist/commands/ads/linkedin/presets.test.d.ts +2 -0
  247. package/dist/commands/ads/linkedin/presets.test.d.ts.map +1 -0
  248. package/dist/commands/ads/linkedin/presets.test.js +98 -0
  249. package/dist/commands/ads/linkedin/presets.test.js.map +1 -0
  250. package/dist/commands/ads/linkedin/schemas.d.ts +2 -0
  251. package/dist/commands/ads/linkedin/schemas.d.ts.map +1 -0
  252. package/dist/commands/ads/linkedin/schemas.js +300 -0
  253. package/dist/commands/ads/linkedin/schemas.js.map +1 -0
  254. package/dist/commands/ads/linkedin/shared.d.ts +17 -0
  255. package/dist/commands/ads/linkedin/shared.d.ts.map +1 -0
  256. package/dist/commands/ads/linkedin/shared.js +116 -0
  257. package/dist/commands/ads/linkedin/shared.js.map +1 -0
  258. package/dist/commands/ads/linkedin/top-companies.d.ts +44 -0
  259. package/dist/commands/ads/linkedin/top-companies.d.ts.map +1 -0
  260. package/dist/commands/ads/linkedin/top-companies.js +86 -0
  261. package/dist/commands/ads/linkedin/top-companies.js.map +1 -0
  262. package/dist/commands/ads/meta/account.d.ts +11 -0
  263. package/dist/commands/ads/meta/account.d.ts.map +1 -0
  264. package/dist/commands/ads/meta/account.js +32 -0
  265. package/dist/commands/ads/meta/account.js.map +1 -0
  266. package/dist/commands/ads/meta/accounts.d.ts +20 -0
  267. package/dist/commands/ads/meta/accounts.d.ts.map +1 -0
  268. package/dist/commands/ads/meta/accounts.js +55 -0
  269. package/dist/commands/ads/meta/accounts.js.map +1 -0
  270. package/dist/commands/ads/meta/activities.d.ts +24 -0
  271. package/dist/commands/ads/meta/activities.d.ts.map +1 -0
  272. package/dist/commands/ads/meta/activities.js +44 -0
  273. package/dist/commands/ads/meta/activities.js.map +1 -0
  274. package/dist/commands/ads/meta/ads.d.ts +36 -0
  275. package/dist/commands/ads/meta/ads.d.ts.map +1 -0
  276. package/dist/commands/ads/meta/ads.js +57 -0
  277. package/dist/commands/ads/meta/ads.js.map +1 -0
  278. package/dist/commands/ads/meta/adsets.d.ts +32 -0
  279. package/dist/commands/ads/meta/adsets.d.ts.map +1 -0
  280. package/dist/commands/ads/meta/adsets.js +50 -0
  281. package/dist/commands/ads/meta/adsets.js.map +1 -0
  282. package/dist/commands/ads/meta/audiences.d.ts +20 -0
  283. package/dist/commands/ads/meta/audiences.d.ts.map +1 -0
  284. package/dist/commands/ads/meta/audiences.js +41 -0
  285. package/dist/commands/ads/meta/audiences.js.map +1 -0
  286. package/dist/commands/ads/meta/businesses.d.ts +12 -0
  287. package/dist/commands/ads/meta/businesses.d.ts.map +1 -0
  288. package/dist/commands/ads/meta/businesses.js +35 -0
  289. package/dist/commands/ads/meta/businesses.js.map +1 -0
  290. package/dist/commands/ads/meta/campaigns.d.ts +28 -0
  291. package/dist/commands/ads/meta/campaigns.d.ts.map +1 -0
  292. package/dist/commands/ads/meta/campaigns.js +51 -0
  293. package/dist/commands/ads/meta/campaigns.js.map +1 -0
  294. package/dist/commands/ads/meta/creatives.d.ts +24 -0
  295. package/dist/commands/ads/meta/creatives.d.ts.map +1 -0
  296. package/dist/commands/ads/meta/creatives.js +51 -0
  297. package/dist/commands/ads/meta/creatives.js.map +1 -0
  298. package/dist/commands/ads/meta/index.d.ts +17 -0
  299. package/dist/commands/ads/meta/index.d.ts.map +1 -0
  300. package/dist/commands/ads/meta/index.js +79 -0
  301. package/dist/commands/ads/meta/index.js.map +1 -0
  302. package/dist/commands/ads/meta/insights.d.ts +92 -0
  303. package/dist/commands/ads/meta/insights.d.ts.map +1 -0
  304. package/dist/commands/ads/meta/insights.js +260 -0
  305. package/dist/commands/ads/meta/insights.js.map +1 -0
  306. package/dist/commands/ads/meta/pixels.d.ts +33 -0
  307. package/dist/commands/ads/meta/pixels.d.ts.map +1 -0
  308. package/dist/commands/ads/meta/pixels.js +76 -0
  309. package/dist/commands/ads/meta/pixels.js.map +1 -0
  310. package/dist/commands/ads/meta/presets.d.ts +30 -0
  311. package/dist/commands/ads/meta/presets.d.ts.map +1 -0
  312. package/dist/commands/ads/meta/presets.js +86 -0
  313. package/dist/commands/ads/meta/presets.js.map +1 -0
  314. package/dist/commands/ads/meta/preview.d.ts +32 -0
  315. package/dist/commands/ads/meta/preview.d.ts.map +1 -0
  316. package/dist/commands/ads/meta/preview.js +90 -0
  317. package/dist/commands/ads/meta/preview.js.map +1 -0
  318. package/dist/commands/ads/meta/shared.d.ts +18 -0
  319. package/dist/commands/ads/meta/shared.d.ts.map +1 -0
  320. package/dist/commands/ads/meta/shared.js +86 -0
  321. package/dist/commands/ads/meta/shared.js.map +1 -0
  322. package/dist/commands/ads/output.d.ts +22 -0
  323. package/dist/commands/ads/output.d.ts.map +1 -0
  324. package/dist/commands/ads/output.js +130 -0
  325. package/dist/commands/ads/output.js.map +1 -0
  326. package/dist/commands/ads/output.test.d.ts +2 -0
  327. package/dist/commands/ads/output.test.d.ts.map +1 -0
  328. package/dist/commands/ads/output.test.js +100 -0
  329. package/dist/commands/ads/output.test.js.map +1 -0
  330. package/dist/commands/ads/types.d.ts +69 -0
  331. package/dist/commands/ads/types.d.ts.map +1 -0
  332. package/dist/commands/ads/types.js +2 -0
  333. package/dist/commands/ads/types.js.map +1 -0
  334. package/dist/commands/ads/x/accounts.d.ts +14 -0
  335. package/dist/commands/ads/x/accounts.d.ts.map +1 -0
  336. package/dist/commands/ads/x/accounts.js +73 -0
  337. package/dist/commands/ads/x/accounts.js.map +1 -0
  338. package/dist/commands/ads/x/active-entities.d.ts +43 -0
  339. package/dist/commands/ads/x/active-entities.d.ts.map +1 -0
  340. package/dist/commands/ads/x/active-entities.js +88 -0
  341. package/dist/commands/ads/x/active-entities.js.map +1 -0
  342. package/dist/commands/ads/x/audiences.d.ts +19 -0
  343. package/dist/commands/ads/x/audiences.d.ts.map +1 -0
  344. package/dist/commands/ads/x/audiences.js +65 -0
  345. package/dist/commands/ads/x/audiences.js.map +1 -0
  346. package/dist/commands/ads/x/campaigns.d.ts +34 -0
  347. package/dist/commands/ads/x/campaigns.d.ts.map +1 -0
  348. package/dist/commands/ads/x/campaigns.js +56 -0
  349. package/dist/commands/ads/x/campaigns.js.map +1 -0
  350. package/dist/commands/ads/x/cards.d.ts +19 -0
  351. package/dist/commands/ads/x/cards.d.ts.map +1 -0
  352. package/dist/commands/ads/x/cards.js +65 -0
  353. package/dist/commands/ads/x/cards.js.map +1 -0
  354. package/dist/commands/ads/x/error-parser.d.ts +3 -0
  355. package/dist/commands/ads/x/error-parser.d.ts.map +1 -0
  356. package/dist/commands/ads/x/error-parser.js +80 -0
  357. package/dist/commands/ads/x/error-parser.js.map +1 -0
  358. package/dist/commands/ads/x/funding.d.ts +19 -0
  359. package/dist/commands/ads/x/funding.d.ts.map +1 -0
  360. package/dist/commands/ads/x/funding.js +65 -0
  361. package/dist/commands/ads/x/funding.js.map +1 -0
  362. package/dist/commands/ads/x/index.d.ts +2 -0
  363. package/dist/commands/ads/x/index.d.ts.map +1 -0
  364. package/dist/commands/ads/x/index.js +50 -0
  365. package/dist/commands/ads/x/index.js.map +1 -0
  366. package/dist/commands/ads/x/line-items.d.ts +34 -0
  367. package/dist/commands/ads/x/line-items.d.ts.map +1 -0
  368. package/dist/commands/ads/x/line-items.js +55 -0
  369. package/dist/commands/ads/x/line-items.js.map +1 -0
  370. package/dist/commands/ads/x/media.d.ts +24 -0
  371. package/dist/commands/ads/x/media.d.ts.map +1 -0
  372. package/dist/commands/ads/x/media.js +70 -0
  373. package/dist/commands/ads/x/media.js.map +1 -0
  374. package/dist/commands/ads/x/output.d.ts +13 -0
  375. package/dist/commands/ads/x/output.d.ts.map +1 -0
  376. package/dist/commands/ads/x/output.js +75 -0
  377. package/dist/commands/ads/x/output.js.map +1 -0
  378. package/dist/commands/ads/x/presets.d.ts +15 -0
  379. package/dist/commands/ads/x/presets.d.ts.map +1 -0
  380. package/dist/commands/ads/x/presets.js +60 -0
  381. package/dist/commands/ads/x/presets.js.map +1 -0
  382. package/dist/commands/ads/x/promoted-tweets.d.ts +29 -0
  383. package/dist/commands/ads/x/promoted-tweets.d.ts.map +1 -0
  384. package/dist/commands/ads/x/promoted-tweets.js +74 -0
  385. package/dist/commands/ads/x/promoted-tweets.js.map +1 -0
  386. package/dist/commands/ads/x/run-list.d.ts +17 -0
  387. package/dist/commands/ads/x/run-list.d.ts.map +1 -0
  388. package/dist/commands/ads/x/run-list.js +60 -0
  389. package/dist/commands/ads/x/run-list.js.map +1 -0
  390. package/dist/commands/ads/x/stats/index.d.ts +2 -0
  391. package/dist/commands/ads/x/stats/index.d.ts.map +1 -0
  392. package/dist/commands/ads/x/stats/index.js +32 -0
  393. package/dist/commands/ads/x/stats/index.js.map +1 -0
  394. package/dist/commands/ads/x/stats/job-create.d.ts +58 -0
  395. package/dist/commands/ads/x/stats/job-create.d.ts.map +1 -0
  396. package/dist/commands/ads/x/stats/job-create.js +95 -0
  397. package/dist/commands/ads/x/stats/job-create.js.map +1 -0
  398. package/dist/commands/ads/x/stats/job-status.d.ts +18 -0
  399. package/dist/commands/ads/x/stats/job-status.d.ts.map +1 -0
  400. package/dist/commands/ads/x/stats/job-status.js +58 -0
  401. package/dist/commands/ads/x/stats/job-status.js.map +1 -0
  402. package/dist/commands/ads/x/stats/job.d.ts +63 -0
  403. package/dist/commands/ads/x/stats/job.d.ts.map +1 -0
  404. package/dist/commands/ads/x/stats/job.js +183 -0
  405. package/dist/commands/ads/x/stats/job.js.map +1 -0
  406. package/dist/commands/ads/x/stats/sync.d.ts +73 -0
  407. package/dist/commands/ads/x/stats/sync.d.ts.map +1 -0
  408. package/dist/commands/ads/x/stats/sync.js +151 -0
  409. package/dist/commands/ads/x/stats/sync.js.map +1 -0
  410. package/dist/commands/ads/x/targeting-constants.d.ts +34 -0
  411. package/dist/commands/ads/x/targeting-constants.d.ts.map +1 -0
  412. package/dist/commands/ads/x/targeting-constants.js +80 -0
  413. package/dist/commands/ads/x/targeting-constants.js.map +1 -0
  414. package/dist/commands/ads/x/targeting-criteria.d.ts +24 -0
  415. package/dist/commands/ads/x/targeting-criteria.d.ts.map +1 -0
  416. package/dist/commands/ads/x/targeting-criteria.js +69 -0
  417. package/dist/commands/ads/x/targeting-criteria.js.map +1 -0
  418. package/dist/commands/ga4/audit.d.ts +13 -0
  419. package/dist/commands/ga4/audit.d.ts.map +1 -0
  420. package/dist/commands/ga4/audit.js +67 -0
  421. package/dist/commands/ga4/audit.js.map +1 -0
  422. package/dist/commands/ga4/index.d.ts +2 -0
  423. package/dist/commands/ga4/index.d.ts.map +1 -0
  424. package/dist/commands/ga4/index.js +26 -0
  425. package/dist/commands/ga4/index.js.map +1 -0
  426. package/dist/commands/ga4/presets.d.ts +8 -0
  427. package/dist/commands/ga4/presets.d.ts.map +1 -0
  428. package/dist/commands/ga4/presets.js +33 -0
  429. package/dist/commands/ga4/presets.js.map +1 -0
  430. package/dist/commands/ga4/properties.d.ts +14 -0
  431. package/dist/commands/ga4/properties.d.ts.map +1 -0
  432. package/dist/commands/ga4/properties.js +61 -0
  433. package/dist/commands/ga4/properties.js.map +1 -0
  434. package/dist/commands/ga4/query.d.ts +69 -0
  435. package/dist/commands/ga4/query.d.ts.map +1 -0
  436. package/dist/commands/ga4/query.js +184 -0
  437. package/dist/commands/ga4/query.js.map +1 -0
  438. package/dist/commands/ga4/resolve.d.ts +2 -0
  439. package/dist/commands/ga4/resolve.d.ts.map +1 -0
  440. package/dist/commands/ga4/resolve.js +57 -0
  441. package/dist/commands/ga4/resolve.js.map +1 -0
  442. package/dist/commands/gsc/index.d.ts +2 -0
  443. package/dist/commands/gsc/index.d.ts.map +1 -0
  444. package/dist/commands/gsc/index.js +26 -0
  445. package/dist/commands/gsc/index.js.map +1 -0
  446. package/dist/commands/gsc/presets.d.ts +9 -0
  447. package/dist/commands/gsc/presets.d.ts.map +1 -0
  448. package/dist/commands/gsc/presets.js +34 -0
  449. package/dist/commands/gsc/presets.js.map +1 -0
  450. package/dist/commands/gsc/query.d.ts +79 -0
  451. package/dist/commands/gsc/query.d.ts.map +1 -0
  452. package/dist/commands/gsc/query.js +196 -0
  453. package/dist/commands/gsc/query.js.map +1 -0
  454. package/dist/commands/gsc/resolve.d.ts +2 -0
  455. package/dist/commands/gsc/resolve.d.ts.map +1 -0
  456. package/dist/commands/gsc/resolve.js +57 -0
  457. package/dist/commands/gsc/resolve.js.map +1 -0
  458. package/dist/commands/gsc/sitemaps.d.ts +19 -0
  459. package/dist/commands/gsc/sitemaps.d.ts.map +1 -0
  460. package/dist/commands/gsc/sitemaps.js +65 -0
  461. package/dist/commands/gsc/sitemaps.js.map +1 -0
  462. package/dist/commands/gsc/sites.d.ts +14 -0
  463. package/dist/commands/gsc/sites.d.ts.map +1 -0
  464. package/dist/commands/gsc/sites.js +61 -0
  465. package/dist/commands/gsc/sites.js.map +1 -0
  466. package/dist/commands/images/delete.d.ts +19 -0
  467. package/dist/commands/images/delete.d.ts.map +1 -0
  468. package/dist/commands/images/delete.js +58 -0
  469. package/dist/commands/images/delete.js.map +1 -0
  470. package/dist/commands/images/extract.d.ts +28 -0
  471. package/dist/commands/images/extract.d.ts.map +1 -0
  472. package/dist/commands/images/extract.js +61 -0
  473. package/dist/commands/images/extract.js.map +1 -0
  474. package/dist/commands/images/find.d.ts +38 -0
  475. package/dist/commands/images/find.d.ts.map +1 -0
  476. package/dist/commands/images/find.js +78 -0
  477. package/dist/commands/images/find.js.map +1 -0
  478. package/dist/commands/images/get.d.ts +30 -0
  479. package/dist/commands/images/get.d.ts.map +1 -0
  480. package/dist/commands/images/get.js +42 -0
  481. package/dist/commands/images/get.js.map +1 -0
  482. package/dist/commands/images/gif.d.ts +38 -0
  483. package/dist/commands/images/gif.d.ts.map +1 -0
  484. package/dist/commands/images/gif.js +89 -0
  485. package/dist/commands/images/gif.js.map +1 -0
  486. package/dist/commands/images/google.d.ts +43 -0
  487. package/dist/commands/images/google.d.ts.map +1 -0
  488. package/dist/commands/images/google.js +85 -0
  489. package/dist/commands/images/google.js.map +1 -0
  490. package/dist/commands/images/icon.d.ts +33 -0
  491. package/dist/commands/images/icon.d.ts.map +1 -0
  492. package/dist/commands/images/icon.js +74 -0
  493. package/dist/commands/images/icon.js.map +1 -0
  494. package/dist/commands/images/index.d.ts +2 -0
  495. package/dist/commands/images/index.d.ts.map +1 -0
  496. package/dist/commands/images/index.js +63 -0
  497. package/dist/commands/images/index.js.map +1 -0
  498. package/dist/commands/images/ingest.d.ts +28 -0
  499. package/dist/commands/images/ingest.d.ts.map +1 -0
  500. package/dist/commands/images/ingest.js +60 -0
  501. package/dist/commands/images/ingest.js.map +1 -0
  502. package/dist/commands/images/library.d.ts +55 -0
  503. package/dist/commands/images/library.d.ts.map +1 -0
  504. package/dist/commands/images/library.js +86 -0
  505. package/dist/commands/images/library.js.map +1 -0
  506. package/dist/commands/images/logo.d.ts +28 -0
  507. package/dist/commands/images/logo.d.ts.map +1 -0
  508. package/dist/commands/images/logo.js +71 -0
  509. package/dist/commands/images/logo.js.map +1 -0
  510. package/dist/commands/images/screenshot.d.ts +28 -0
  511. package/dist/commands/images/screenshot.d.ts.map +1 -0
  512. package/dist/commands/images/screenshot.js +72 -0
  513. package/dist/commands/images/screenshot.js.map +1 -0
  514. package/dist/commands/images/search.d.ts +45 -0
  515. package/dist/commands/images/search.d.ts.map +1 -0
  516. package/dist/commands/images/search.js +74 -0
  517. package/dist/commands/images/search.js.map +1 -0
  518. package/dist/commands/images/sticker.d.ts +38 -0
  519. package/dist/commands/images/sticker.d.ts.map +1 -0
  520. package/dist/commands/images/sticker.js +89 -0
  521. package/dist/commands/images/sticker.js.map +1 -0
  522. package/dist/commands/images/stock.d.ts +63 -0
  523. package/dist/commands/images/stock.d.ts.map +1 -0
  524. package/dist/commands/images/stock.js +124 -0
  525. package/dist/commands/images/stock.js.map +1 -0
  526. package/dist/commands/images/upload.d.ts +39 -0
  527. package/dist/commands/images/upload.d.ts.map +1 -0
  528. package/dist/commands/images/upload.js +159 -0
  529. package/dist/commands/images/upload.js.map +1 -0
  530. package/dist/commands/images/use.d.ts +23 -0
  531. package/dist/commands/images/use.d.ts.map +1 -0
  532. package/dist/commands/images/use.js +66 -0
  533. package/dist/commands/images/use.js.map +1 -0
  534. package/dist/commands/research/advertisers.d.ts +34 -0
  535. package/dist/commands/research/advertisers.d.ts.map +1 -0
  536. package/dist/commands/research/advertisers.js +78 -0
  537. package/dist/commands/research/advertisers.js.map +1 -0
  538. package/dist/commands/research/autocomplete.d.ts +34 -0
  539. package/dist/commands/research/autocomplete.d.ts.map +1 -0
  540. package/dist/commands/research/autocomplete.js +73 -0
  541. package/dist/commands/research/autocomplete.js.map +1 -0
  542. package/dist/commands/research/countries.d.ts +2 -0
  543. package/dist/commands/research/countries.d.ts.map +1 -0
  544. package/dist/commands/research/countries.js +69 -0
  545. package/dist/commands/research/countries.js.map +1 -0
  546. package/dist/commands/research/index.d.ts +2 -0
  547. package/dist/commands/research/index.d.ts.map +1 -0
  548. package/dist/commands/research/index.js +50 -0
  549. package/dist/commands/research/index.js.map +1 -0
  550. package/dist/commands/research/intent.d.ts +24 -0
  551. package/dist/commands/research/intent.d.ts.map +1 -0
  552. package/dist/commands/research/intent.js +78 -0
  553. package/dist/commands/research/intent.js.map +1 -0
  554. package/dist/commands/research/keyword-gap.d.ts +49 -0
  555. package/dist/commands/research/keyword-gap.d.ts.map +1 -0
  556. package/dist/commands/research/keyword-gap.js +107 -0
  557. package/dist/commands/research/keyword-gap.js.map +1 -0
  558. package/dist/commands/research/keywords-for-site.d.ts +44 -0
  559. package/dist/commands/research/keywords-for-site.d.ts.map +1 -0
  560. package/dist/commands/research/keywords-for-site.js +90 -0
  561. package/dist/commands/research/keywords-for-site.js.map +1 -0
  562. package/dist/commands/research/languages.d.ts +2 -0
  563. package/dist/commands/research/languages.d.ts.map +1 -0
  564. package/dist/commands/research/languages.js +42 -0
  565. package/dist/commands/research/languages.js.map +1 -0
  566. package/dist/commands/research/lighthouse.d.ts +24 -0
  567. package/dist/commands/research/lighthouse.d.ts.map +1 -0
  568. package/dist/commands/research/lighthouse.js +60 -0
  569. package/dist/commands/research/lighthouse.js.map +1 -0
  570. package/dist/commands/research/output.d.ts +29 -0
  571. package/dist/commands/research/output.d.ts.map +1 -0
  572. package/dist/commands/research/output.js +81 -0
  573. package/dist/commands/research/output.js.map +1 -0
  574. package/dist/commands/research/relevant-pages.d.ts +34 -0
  575. package/dist/commands/research/relevant-pages.d.ts.map +1 -0
  576. package/dist/commands/research/relevant-pages.js +76 -0
  577. package/dist/commands/research/relevant-pages.js.map +1 -0
  578. package/dist/commands/research/web.d.ts +19 -0
  579. package/dist/commands/research/web.d.ts.map +1 -0
  580. package/dist/commands/research/web.js +112 -0
  581. package/dist/commands/research/web.js.map +1 -0
  582. package/dist/commands/scheduled-actions/create.d.ts +50 -0
  583. package/dist/commands/scheduled-actions/create.d.ts.map +1 -0
  584. package/dist/commands/scheduled-actions/create.js +83 -0
  585. package/dist/commands/scheduled-actions/create.js.map +1 -0
  586. package/dist/commands/scheduled-actions/delete.d.ts +13 -0
  587. package/dist/commands/scheduled-actions/delete.d.ts.map +1 -0
  588. package/dist/commands/scheduled-actions/delete.js +41 -0
  589. package/dist/commands/scheduled-actions/delete.js.map +1 -0
  590. package/dist/commands/scheduled-actions/get.d.ts +13 -0
  591. package/dist/commands/scheduled-actions/get.d.ts.map +1 -0
  592. package/dist/commands/scheduled-actions/get.js +50 -0
  593. package/dist/commands/scheduled-actions/get.js.map +1 -0
  594. package/dist/commands/scheduled-actions/index.d.ts +2 -0
  595. package/dist/commands/scheduled-actions/index.d.ts.map +1 -0
  596. package/dist/commands/scheduled-actions/index.js +32 -0
  597. package/dist/commands/scheduled-actions/index.js.map +1 -0
  598. package/dist/commands/scheduled-actions/list.d.ts +2 -0
  599. package/dist/commands/scheduled-actions/list.d.ts.map +1 -0
  600. package/dist/commands/scheduled-actions/list.js +32 -0
  601. package/dist/commands/scheduled-actions/list.js.map +1 -0
  602. package/dist/commands/scheduled-actions/shared.d.ts +22 -0
  603. package/dist/commands/scheduled-actions/shared.d.ts.map +1 -0
  604. package/dist/commands/scheduled-actions/shared.js +90 -0
  605. package/dist/commands/scheduled-actions/shared.js.map +1 -0
  606. package/dist/commands/scheduled-actions/shared.test.d.ts +2 -0
  607. package/dist/commands/scheduled-actions/shared.test.d.ts.map +1 -0
  608. package/dist/commands/scheduled-actions/shared.test.js +12 -0
  609. package/dist/commands/scheduled-actions/shared.test.js.map +1 -0
  610. package/dist/commands/scheduled-actions/trigger.d.ts +13 -0
  611. package/dist/commands/scheduled-actions/trigger.d.ts.map +1 -0
  612. package/dist/commands/scheduled-actions/trigger.js +50 -0
  613. package/dist/commands/scheduled-actions/trigger.js.map +1 -0
  614. package/dist/commands/scheduled-actions/update.d.ts +58 -0
  615. package/dist/commands/scheduled-actions/update.d.ts.map +1 -0
  616. package/dist/commands/scheduled-actions/update.js +108 -0
  617. package/dist/commands/scheduled-actions/update.js.map +1 -0
  618. package/dist/commands/schema.d.ts +8 -0
  619. package/dist/commands/schema.d.ts.map +1 -0
  620. package/dist/commands/schema.js +38 -0
  621. package/dist/commands/schema.js.map +1 -0
  622. package/dist/commands/testimonials/get.d.ts +30 -0
  623. package/dist/commands/testimonials/get.d.ts.map +1 -0
  624. package/dist/commands/testimonials/get.js +42 -0
  625. package/dist/commands/testimonials/get.js.map +1 -0
  626. package/dist/commands/testimonials/index.d.ts +2 -0
  627. package/dist/commands/testimonials/index.d.ts.map +1 -0
  628. package/dist/commands/testimonials/index.js +22 -0
  629. package/dist/commands/testimonials/index.js.map +1 -0
  630. package/dist/commands/testimonials/list.d.ts +60 -0
  631. package/dist/commands/testimonials/list.d.ts.map +1 -0
  632. package/dist/commands/testimonials/list.js +69 -0
  633. package/dist/commands/testimonials/list.js.map +1 -0
  634. package/dist/commands/testimonials/search.d.ts +40 -0
  635. package/dist/commands/testimonials/search.d.ts.map +1 -0
  636. package/dist/commands/testimonials/search.js +59 -0
  637. package/dist/commands/testimonials/search.js.map +1 -0
  638. package/dist/commands/videos/delete.d.ts +19 -0
  639. package/dist/commands/videos/delete.d.ts.map +1 -0
  640. package/dist/commands/videos/delete.js +58 -0
  641. package/dist/commands/videos/delete.js.map +1 -0
  642. package/dist/commands/videos/get.d.ts +30 -0
  643. package/dist/commands/videos/get.d.ts.map +1 -0
  644. package/dist/commands/videos/get.js +42 -0
  645. package/dist/commands/videos/get.js.map +1 -0
  646. package/dist/commands/videos/index.d.ts +2 -0
  647. package/dist/commands/videos/index.d.ts.map +1 -0
  648. package/dist/commands/videos/index.js +25 -0
  649. package/dist/commands/videos/index.js.map +1 -0
  650. package/dist/commands/videos/search.d.ts +35 -0
  651. package/dist/commands/videos/search.d.ts.map +1 -0
  652. package/dist/commands/videos/search.js +54 -0
  653. package/dist/commands/videos/search.js.map +1 -0
  654. package/dist/commands/videos/upload.d.ts +19 -0
  655. package/dist/commands/videos/upload.d.ts.map +1 -0
  656. package/dist/commands/videos/upload.js +92 -0
  657. package/dist/commands/videos/upload.js.map +1 -0
  658. package/dist/env.d.ts +15 -0
  659. package/dist/env.d.ts.map +1 -0
  660. package/dist/env.js +39 -0
  661. package/dist/env.js.map +1 -0
  662. package/dist/error-handler.d.ts +8 -0
  663. package/dist/error-handler.d.ts.map +1 -0
  664. package/dist/error-handler.js +46 -0
  665. package/dist/error-handler.js.map +1 -0
  666. package/dist/geo-context.d.ts +21 -0
  667. package/dist/geo-context.d.ts.map +1 -0
  668. package/dist/geo-context.js +208 -0
  669. package/dist/geo-context.js.map +1 -0
  670. package/dist/output.d.ts +43 -0
  671. package/dist/output.d.ts.map +1 -0
  672. package/dist/output.js +182 -0
  673. package/dist/output.js.map +1 -0
  674. package/dist/output.test.d.ts +2 -0
  675. package/dist/output.test.d.ts.map +1 -0
  676. package/dist/output.test.js +117 -0
  677. package/dist/output.test.js.map +1 -0
  678. package/dist/schemas.d.ts +17 -0
  679. package/dist/schemas.d.ts.map +1 -0
  680. package/dist/schemas.js +11 -0
  681. package/dist/schemas.js.map +1 -0
  682. package/package.json +1 -1
@@ -0,0 +1,102 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiGet } from "../../../client.js";
3
+ import { writeAdsJson, writeAdsOutput } from "../output.js";
4
+ import { csvOrJson, handleLinkedinError, resolveAccountIdArg } from "./shared.js";
5
+ const DAY_MS = 86_400_000;
6
+ function healthOf(rules) {
7
+ const enabled = rules.filter((r) => r.enabled !== false);
8
+ const capi = enabled.filter((r) => r.conversionMethod === "CONVERSIONS_API");
9
+ const pixel = enabled.filter((r) => r.conversionMethod === "PIXEL");
10
+ const staleCapi = capi.filter((r) => !r.lastConversionReportedAt || Date.now() - r.lastConversionReportedAt > 7 * DAY_MS);
11
+ const longView = enabled.filter((r) => r.viewThroughAttributionWindowSize !== undefined && r.viewThroughAttributionWindowSize > 7);
12
+ const leads = enabled.filter((r) => r.type === "LEAD");
13
+ const wrongDedup = leads.filter((r) => r.countingMethod && r.countingMethod !== "ONE_TIME_EACH_MEMBER");
14
+ return {
15
+ totalRules: rules.length,
16
+ enabledRules: enabled.length,
17
+ capiRules: capi.length,
18
+ pixelRules: pixel.length,
19
+ hasLeadEvent: leads.length > 0,
20
+ hasPurchaseEvent: enabled.some((r) => r.type === "PURCHASE"),
21
+ staleCapiRules: staleCapi,
22
+ longViewWindow: longView,
23
+ wrongLeadDedup: wrongDedup,
24
+ };
25
+ }
26
+ const listCmd = defineCommand({
27
+ meta: {
28
+ name: "list",
29
+ description: `List conversion rules on the account.`,
30
+ },
31
+ args: {
32
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
33
+ "account-urn": { type: "string", description: "Alias for --account-id" },
34
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
35
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
36
+ },
37
+ run: async ({ args }) => {
38
+ const accountId = resolveAccountIdArg(args);
39
+ try {
40
+ const params = { "account-id": accountId };
41
+ if (args["skip-cache"])
42
+ params["skip-cache"] = "true";
43
+ const data = await apiGet("/api/ads/linkedin/conversions", params);
44
+ const fmt = csvOrJson(args);
45
+ if (fmt !== "json") {
46
+ writeAdsOutput(data, fmt);
47
+ return;
48
+ }
49
+ writeAdsJson({ ok: true, data });
50
+ }
51
+ catch (err) {
52
+ handleLinkedinError(err);
53
+ }
54
+ },
55
+ });
56
+ const healthCmd = defineCommand({
57
+ meta: {
58
+ name: "health",
59
+ description: `5-point Insight Tag / CAPI health check (playbook §07).
60
+
61
+ Surfaces:
62
+ - Are rules enabled?
63
+ - Do we have at least one LEAD or PURCHASE event?
64
+ - Do CAPI rules show recent activity (≤7 days)?
65
+ - Is the view-through window ≤7 days?
66
+ - Do LEAD rules use ONE_TIME_EACH_MEMBER de-dup?`,
67
+ },
68
+ args: {
69
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
70
+ "account-urn": { type: "string", description: "Alias for --account-id" },
71
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
72
+ output: { type: "string", description: "json", default: "json" },
73
+ },
74
+ run: async ({ args }) => {
75
+ const accountId = resolveAccountIdArg(args);
76
+ try {
77
+ const params = { "account-id": accountId };
78
+ if (args["skip-cache"])
79
+ params["skip-cache"] = "true";
80
+ const data = await apiGet("/api/ads/linkedin/conversions", params);
81
+ writeAdsJson({ ok: true, data: healthOf(data) });
82
+ }
83
+ catch (err) {
84
+ handleLinkedinError(err);
85
+ }
86
+ },
87
+ });
88
+ export const conversionsCommand = defineCommand({
89
+ meta: {
90
+ name: "conversions",
91
+ description: `Conversion rules — Insight Tag and Conversions API.
92
+
93
+ Subcommands:
94
+ list — every rule on the account
95
+ health — playbook §07 5-point health check`,
96
+ },
97
+ subCommands: {
98
+ list: listCmd,
99
+ health: healthCmd,
100
+ },
101
+ });
102
+ //# sourceMappingURL=conversions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversions.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/conversions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export declare const creativesCommand: import("citty").CommandDef<{
2
+ readonly "account-id": {
3
+ readonly type: "string";
4
+ readonly description: "Numeric account ID or urn:li:sponsoredAccount:N";
5
+ };
6
+ readonly "account-urn": {
7
+ readonly type: "string";
8
+ readonly description: "Alias for --account-id";
9
+ };
10
+ readonly "campaign-id": {
11
+ readonly type: "string";
12
+ readonly description: "Filter by campaign ID";
13
+ };
14
+ readonly "all-statuses": {
15
+ readonly type: "boolean";
16
+ readonly description: "Drop the default ACTIVE filter";
17
+ };
18
+ readonly statuses: {
19
+ readonly type: "string";
20
+ readonly description: "CSV of intended statuses (ACTIVE,PAUSED,DRAFT,ARCHIVED)";
21
+ };
22
+ readonly limit: {
23
+ readonly type: "string";
24
+ readonly description: "Max rows (default: 500)";
25
+ };
26
+ readonly "skip-cache": {
27
+ readonly type: "boolean";
28
+ readonly description: "Bypass server-side cache";
29
+ };
30
+ readonly output: {
31
+ readonly type: "string";
32
+ readonly description: "json|csv|jsonl|md";
33
+ readonly default: "json";
34
+ };
35
+ }>;
36
+ //# sourceMappingURL=creatives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creatives.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/creatives.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+C3B,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiGet } from "../../../client.js";
3
+ import { writeAdsJson, writeAdsOutput } from "../output.js";
4
+ import { csvOrJson, handleLinkedinError, resolveAccountIdArg, resolveStatusFilter } from "./shared.js";
5
+ export const creativesCommand = defineCommand({
6
+ meta: {
7
+ name: "creatives",
8
+ description: `List LinkedIn creatives (ads).
9
+
10
+ Defaults to ACTIVE intended-status. Pass --all-statuses or --statuses ACTIVE,PAUSED to widen.
11
+
12
+ The 'content' block is opaque (varies by creative type — image, video, document,
13
+ spotlight, conversation, dynamic). Use 'reviewStatus' to spot rejected/pending
14
+ creatives during an audit.
15
+
16
+ Examples:
17
+ baker ads linkedin creatives --account-id 503001492
18
+ baker ads linkedin creatives --account-id 503001492 --campaign-id 1234
19
+ baker ads linkedin creatives --account-id 503001492 --all-statuses --output csv`,
20
+ },
21
+ args: {
22
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
23
+ "account-urn": { type: "string", description: "Alias for --account-id" },
24
+ "campaign-id": { type: "string", description: "Filter by campaign ID" },
25
+ "all-statuses": { type: "boolean", description: "Drop the default ACTIVE filter" },
26
+ statuses: { type: "string", description: "CSV of intended statuses (ACTIVE,PAUSED,DRAFT,ARCHIVED)" },
27
+ limit: { type: "string", description: "Max rows (default: 500)" },
28
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
29
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
30
+ },
31
+ run: async ({ args }) => {
32
+ const accountId = resolveAccountIdArg(args);
33
+ try {
34
+ const params = { "account-id": accountId };
35
+ const statuses = resolveStatusFilter(args);
36
+ if (statuses)
37
+ params.statuses = statuses.join(",");
38
+ if (args["campaign-id"])
39
+ params["campaign-id"] = String(args["campaign-id"]);
40
+ if (args.limit)
41
+ params.limit = String(args.limit);
42
+ if (args["skip-cache"])
43
+ params["skip-cache"] = "true";
44
+ const data = await apiGet("/api/ads/linkedin/creatives", params);
45
+ const fmt = csvOrJson(args);
46
+ if (fmt !== "json") {
47
+ writeAdsOutput(data, fmt);
48
+ return;
49
+ }
50
+ writeAdsJson({ ok: true, data });
51
+ }
52
+ catch (err) {
53
+ handleLinkedinError(err);
54
+ }
55
+ },
56
+ });
57
+ //# sourceMappingURL=creatives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creatives.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/creatives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAevG,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC5C,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE;;;;;;;;;;;kFAWiE;KAC/E;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;QAChG,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACxE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACvE,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gCAAgC,EAAE;QAClF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;QACpG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACjE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE;QAC1E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE;KAC9E;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,aAAa,CAAC;gBAAE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,YAAY,CAAC;gBAAE,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;YAEtD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAwB,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACxF,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,cAAc,CAAC,IAAiD,EAAE,GAAG,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YACD,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ export declare const demographicsCommand: import("citty").CommandDef<{
2
+ readonly "campaign-id": {
3
+ readonly type: "string";
4
+ readonly description: "Comma-separated campaign IDs (required)";
5
+ };
6
+ readonly pivots: {
7
+ readonly type: "string";
8
+ readonly description: `CSV of pivots (default: ${string})`;
9
+ };
10
+ readonly "top-n": {
11
+ readonly type: "string";
12
+ readonly description: "Top rows per pivot (default: 10)";
13
+ };
14
+ readonly intent: {
15
+ readonly type: "string";
16
+ readonly description: "baseline | revenue | funnel | engagement | lead-gen (default: baseline)";
17
+ };
18
+ readonly start: {
19
+ readonly type: "string";
20
+ readonly description: "Start date YYYY-MM-DD";
21
+ };
22
+ readonly end: {
23
+ readonly type: "string";
24
+ readonly description: "End date YYYY-MM-DD";
25
+ };
26
+ readonly "last-days": {
27
+ readonly type: "string";
28
+ readonly description: "Window relative to today (default: 30)";
29
+ };
30
+ readonly "skip-cache": {
31
+ readonly type: "boolean";
32
+ readonly description: "Bypass server-side cache";
33
+ };
34
+ readonly output: {
35
+ readonly type: "string";
36
+ readonly description: "json";
37
+ readonly default: "json";
38
+ };
39
+ }>;
40
+ //# sourceMappingURL=demographics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demographics.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/demographics.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0F9B,CAAC"}
@@ -0,0 +1,117 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiPost } from "../../../client.js";
3
+ import { writeAdsJson } from "../output.js";
4
+ import { csvOrJson, daysAgoIso, handleLinkedinError, todayIso } from "./shared.js";
5
+ const DEFAULT_PIVOTS = ["job-title", "company", "industry", "seniority", "job-function", "company-size"];
6
+ function numberOf(v) {
7
+ if (typeof v === "number")
8
+ return Number.isFinite(v) ? v : 0;
9
+ if (typeof v === "string") {
10
+ const n = Number(v);
11
+ return Number.isFinite(n) ? n : 0;
12
+ }
13
+ return 0;
14
+ }
15
+ function topByImpressions(rows, limit) {
16
+ return [...rows].sort((a, b) => numberOf(b.impressions) - numberOf(a.impressions)).slice(0, limit);
17
+ }
18
+ export const demographicsCommand = defineCommand({
19
+ meta: {
20
+ name: "demographics",
21
+ description: `Sweep all firmographic pivots in one command — LinkedIn's superpower.
22
+
23
+ Default pivots:
24
+ job-title, company, industry, seniority, job-function, company-size
25
+
26
+ Use --pivots to narrow the sweep. Output is one section per pivot, each with
27
+ top-N rows by impressions (configurable via --top-n).
28
+
29
+ Demographic data is delayed 12-24h with a ≥3-event privacy floor — small
30
+ buckets are silently dropped. The CLI surfaces this in 'warnings' when the
31
+ result set comes back unexpectedly empty.
32
+
33
+ Examples:
34
+ baker ads linkedin demographics --campaign-id 1234
35
+ baker ads linkedin demographics --campaign-id 1234 --pivots job-title,company
36
+ baker ads linkedin demographics --campaign-id 1234 --last-days 30 --top-n 25`,
37
+ },
38
+ args: {
39
+ "campaign-id": { type: "string", description: "Comma-separated campaign IDs (required)" },
40
+ pivots: { type: "string", description: `CSV of pivots (default: ${DEFAULT_PIVOTS.join(",")})` },
41
+ "top-n": { type: "string", description: "Top rows per pivot (default: 10)" },
42
+ intent: { type: "string", description: "baseline | revenue | funnel | engagement | lead-gen (default: baseline)" },
43
+ start: { type: "string", description: "Start date YYYY-MM-DD" },
44
+ end: { type: "string", description: "End date YYYY-MM-DD" },
45
+ "last-days": { type: "string", description: "Window relative to today (default: 30)" },
46
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
47
+ output: { type: "string", description: "json", default: "json" },
48
+ },
49
+ run: async ({ args }) => {
50
+ const fmt = csvOrJson(args);
51
+ if (fmt !== "json") {
52
+ writeAdsJson({
53
+ ok: false,
54
+ error: {
55
+ code: "UNSUPPORTED_FORMAT",
56
+ message: "demographics returns a structured per-pivot report — only --output json supported.",
57
+ },
58
+ });
59
+ process.exit(1);
60
+ }
61
+ const campaignIdsRaw = args["campaign-id"];
62
+ if (!campaignIdsRaw) {
63
+ handleLinkedinError(new Error("--campaign-id is required (CSV for multi)."));
64
+ }
65
+ const ids = campaignIdsRaw
66
+ .split(",")
67
+ .map((s) => s.trim())
68
+ .filter(Boolean);
69
+ const pivotsRaw = args.pivots?.split(",").map((s) => s.trim().toLowerCase());
70
+ const pivots = (pivotsRaw && pivotsRaw.length > 0 ? pivotsRaw : DEFAULT_PIVOTS);
71
+ const topN = args["top-n"] ? Number(args["top-n"]) : 10;
72
+ const intent = args.intent ?? "baseline";
73
+ const { start, end } = resolveRange(args);
74
+ try {
75
+ const results = [];
76
+ for (const pivot of pivots) {
77
+ const data = await apiPost("/api/ads/linkedin/analytics", {
78
+ request: {
79
+ level: "campaign",
80
+ ids,
81
+ intent,
82
+ pivot,
83
+ start,
84
+ end,
85
+ granularity: "ALL",
86
+ limit: 500,
87
+ },
88
+ skipCache: Boolean(args["skip-cache"]),
89
+ });
90
+ results.push({ pivot, rows: topByImpressions(data.rows, topN), warnings: data.warnings });
91
+ }
92
+ writeAdsJson({
93
+ ok: true,
94
+ data: {
95
+ query: { campaigns: ids, start, end, intent, topN },
96
+ pivots: results,
97
+ },
98
+ });
99
+ }
100
+ catch (err) {
101
+ handleLinkedinError(err);
102
+ }
103
+ },
104
+ });
105
+ function resolveRange(args) {
106
+ const start = args.start;
107
+ const end = args.end;
108
+ if (start) {
109
+ return { start, end };
110
+ }
111
+ const days = args["last-days"] ? Number(args["last-days"]) : 30;
112
+ if (!Number.isFinite(days) || days < 1) {
113
+ handleLinkedinError(new Error("Invalid --last-days; must be a positive integer."));
114
+ }
115
+ return { start: daysAgoIso(days), end: todayIso() };
116
+ }
117
+ //# sourceMappingURL=demographics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demographics.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/demographics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const facetsCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=facets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/facets.ts"],"names":[],"mappings":"AA4FA,eAAO,MAAM,aAAa,qDAcxB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiGet } from "../../../client.js";
3
+ import { writeAdsJson, writeAdsOutput } from "../output.js";
4
+ import { csvOrJson, handleLinkedinError } from "./shared.js";
5
+ const listCmd = defineCommand({
6
+ meta: {
7
+ name: "list",
8
+ description: `List every targeting facet LinkedIn supports.
9
+
10
+ Cached 7 days. Use this to discover what dimensions you can target on (industries,
11
+ seniorities, titles, employers, growthRate, companyCategory, skills, etc.).`,
12
+ },
13
+ args: {
14
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
15
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
16
+ },
17
+ run: async ({ args }) => {
18
+ try {
19
+ const params = {};
20
+ if (args["skip-cache"])
21
+ params["skip-cache"] = "true";
22
+ const data = await apiGet("/api/ads/linkedin/facets", params);
23
+ const fmt = csvOrJson(args);
24
+ if (fmt !== "json") {
25
+ writeAdsOutput(data, fmt);
26
+ return;
27
+ }
28
+ writeAdsJson({ ok: true, data });
29
+ }
30
+ catch (err) {
31
+ handleLinkedinError(err);
32
+ }
33
+ },
34
+ });
35
+ const valuesCmd = defineCommand({
36
+ meta: {
37
+ name: "values",
38
+ description: `Look up entity values for a single facet — full list or typeahead search.
39
+
40
+ Examples:
41
+ baker ads linkedin facets values --facet seniorities — all seniority URNs
42
+ baker ads linkedin facets values --facet titles --query "marketing director" — typeahead
43
+ baker ads linkedin facets values --facet industries --output csv
44
+
45
+ The --facet flag accepts the bare name (industries, seniorities, titles, etc.)
46
+ or the full URN (urn:li:adTargetingFacet:industries).`,
47
+ },
48
+ args: {
49
+ facet: { type: "string", description: "Facet name (e.g. industries) or URN", required: true },
50
+ query: { type: "string", description: "Typeahead query (auto-switches finder to typeahead)" },
51
+ finder: { type: "string", description: "adTargetingFacet | typeahead | similarEntities (default: auto)" },
52
+ locale: { type: "string", description: "Locale (default: en_US)" },
53
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
54
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
55
+ },
56
+ run: async ({ args }) => {
57
+ try {
58
+ const params = { facet: String(args.facet) };
59
+ const finder = args.finder ?? (args.query ? "typeahead" : "adTargetingFacet");
60
+ params.finder = finder;
61
+ if (args.query)
62
+ params.query = String(args.query);
63
+ if (args.locale)
64
+ params.locale = String(args.locale);
65
+ if (args["skip-cache"])
66
+ params["skip-cache"] = "true";
67
+ const data = await apiGet("/api/ads/linkedin/facets/entities", params);
68
+ const fmt = csvOrJson(args);
69
+ if (fmt !== "json") {
70
+ writeAdsOutput(data, fmt);
71
+ return;
72
+ }
73
+ writeAdsJson({ ok: true, data });
74
+ }
75
+ catch (err) {
76
+ handleLinkedinError(err);
77
+ }
78
+ },
79
+ });
80
+ export const facetsCommand = defineCommand({
81
+ meta: {
82
+ name: "facets",
83
+ description: `LinkedIn targeting facets and entity lookup.
84
+
85
+ Subcommands:
86
+ list — every facet (industries, seniorities, titles, employers, …)
87
+ values --facet titles — entity URNs for one facet
88
+ values --facet titles --query "marketing director" — typeahead`,
89
+ },
90
+ subCommands: {
91
+ list: listCmd,
92
+ values: valuesCmd,
93
+ },
94
+ });
95
+ //# sourceMappingURL=facets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facets.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/facets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export declare const forecastCommand: import("citty").CommandDef<{
2
+ readonly "account-id": {
3
+ readonly type: "string";
4
+ readonly description: "Numeric account ID or urn:li:sponsoredAccount:N";
5
+ };
6
+ readonly "account-urn": {
7
+ readonly type: "string";
8
+ readonly description: "Alias for --account-id";
9
+ };
10
+ readonly objective: {
11
+ readonly type: "string";
12
+ readonly description: "Objective type";
13
+ readonly required: true;
14
+ };
15
+ readonly "cost-type": {
16
+ readonly type: "string";
17
+ readonly description: "CPC | CPM | CPV | CPS";
18
+ readonly required: true;
19
+ };
20
+ readonly "daily-budget": {
21
+ readonly type: "string";
22
+ readonly description: "e.g. '200 USD' or '200'";
23
+ };
24
+ readonly "total-budget": {
25
+ readonly type: "string";
26
+ readonly description: "e.g. '6000 USD'";
27
+ };
28
+ readonly bid: {
29
+ readonly type: "string";
30
+ readonly description: "Bid e.g. '8 USD'";
31
+ };
32
+ readonly targeting: {
33
+ readonly type: "string";
34
+ readonly description: "Inline JSON targetingCriteria";
35
+ };
36
+ readonly "targeting-file": {
37
+ readonly type: "string";
38
+ readonly description: "Path to JSON file with targetingCriteria";
39
+ };
40
+ readonly "skip-cache": {
41
+ readonly type: "boolean";
42
+ readonly description: "Bypass server-side cache";
43
+ };
44
+ readonly output: {
45
+ readonly type: "string";
46
+ readonly description: "json";
47
+ readonly default: "json";
48
+ };
49
+ }>;
50
+ //# sourceMappingURL=forecast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forecast.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/forecast.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4C1B,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { defineCommand } from "citty";
3
+ import { apiPost } from "../../../client.js";
4
+ import { writeAdsJson } from "../output.js";
5
+ import { handleLinkedinError, resolveAccountIdArg } from "./shared.js";
6
+ function loadTargeting(args) {
7
+ const inline = args.targeting;
8
+ if (inline) {
9
+ try {
10
+ return JSON.parse(inline);
11
+ }
12
+ catch {
13
+ handleLinkedinError(new Error("--targeting must be valid JSON."));
14
+ }
15
+ }
16
+ const file = args["targeting-file"];
17
+ if (file) {
18
+ try {
19
+ return JSON.parse(readFileSync(file, "utf-8"));
20
+ }
21
+ catch (e) {
22
+ handleLinkedinError(new Error(`Failed to read --targeting-file: ${e instanceof Error ? e.message : "I/O error"}`));
23
+ }
24
+ }
25
+ handleLinkedinError(new Error("Pass --targeting-file <path> or --targeting '{...JSON...}'"));
26
+ }
27
+ function parseMoney(raw) {
28
+ if (!raw)
29
+ return undefined;
30
+ // Accept either "100 USD" or just "100" (defaults to USD).
31
+ const m = /^(\d+(?:\.\d+)?)(?:\s+([A-Z]{3}))?$/.exec(raw.trim());
32
+ if (!m) {
33
+ handleLinkedinError(new Error(`Invalid money "${raw}". Use "100" or "100 EUR".`));
34
+ }
35
+ return { amount: m[1] ?? "0", currencyCode: m[2] ?? "USD" };
36
+ }
37
+ export const forecastCommand = defineCommand({
38
+ meta: {
39
+ name: "forecast",
40
+ description: `Forecast reach + impressions + clicks + spend for a hypothetical campaign.
41
+
42
+ Wraps /rest/adSupplyForecasts. Useful for greenfield (§14) — answers
43
+ "if we launch with this budget + targeting + objective, what's the expected delivery?"
44
+
45
+ Examples:
46
+ baker ads linkedin forecast --account-id 503001492 --objective LEAD_GENERATION --cost-type CPC \\
47
+ --daily-budget "200 USD" --bid "8 USD" --targeting-file targeting.json`,
48
+ },
49
+ args: {
50
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
51
+ "account-urn": { type: "string", description: "Alias for --account-id" },
52
+ objective: { type: "string", description: "Objective type", required: true },
53
+ "cost-type": { type: "string", description: "CPC | CPM | CPV | CPS", required: true },
54
+ "daily-budget": { type: "string", description: "e.g. '200 USD' or '200'" },
55
+ "total-budget": { type: "string", description: "e.g. '6000 USD'" },
56
+ bid: { type: "string", description: "Bid e.g. '8 USD'" },
57
+ targeting: { type: "string", description: "Inline JSON targetingCriteria" },
58
+ "targeting-file": { type: "string", description: "Path to JSON file with targetingCriteria" },
59
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
60
+ output: { type: "string", description: "json", default: "json" },
61
+ },
62
+ run: async ({ args }) => {
63
+ const accountId = resolveAccountIdArg(args);
64
+ const targetingCriteria = loadTargeting(args);
65
+ try {
66
+ const data = await apiPost("/api/ads/linkedin/forecast", {
67
+ accountId,
68
+ objectiveType: String(args.objective),
69
+ costType: String(args["cost-type"]).toUpperCase(),
70
+ targetingCriteria,
71
+ dailyBudget: parseMoney(args["daily-budget"]),
72
+ totalBudget: parseMoney(args["total-budget"]),
73
+ bid: parseMoney(args.bid),
74
+ skipCache: Boolean(args["skip-cache"]),
75
+ });
76
+ writeAdsJson({ ok: true, data });
77
+ }
78
+ catch (err) {
79
+ handleLinkedinError(err);
80
+ }
81
+ },
82
+ });
83
+ //# sourceMappingURL=forecast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forecast.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/forecast.ts"],"names":[],"mappings":"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"}